На этом сайте вы найдете несколько бесплатных настраиваемых датчиков.
Очень прост в установке и хорошо документирован. Например, вы можете получить что-то вроде этого через 5 минут после инструкции ниже.
Перейдите по вышеуказанному сайту. Нажмите GR004 и после появления всплывающего окна нажмите «Загрузить бесплатно».
Запишите этот код в свой XML-макет, и ваш манометр будет выполнен:
Загрузите, распакуйте и следуйте инструкциям по установке библиотеки (aar-файла) в ваш проект Android.
У вас есть много вариантов XML для его настройки:
И связанная функция путем кодирования.
Я бы сделал это следующим образом (см. Комментарии для получения дополнительной информации):
#include <iostream>
#include <cstdint>
#include <algorithm>
// This function does not concern me - do not pay attention at memory managemt
void* getObject()
{
uint32_t* oldArr = new uint32_t[2];
oldArr[0] = 1;
oldArr[1] = 2;
// no need for a cast
return oldArr;
};
struct ArrayStruct
{
uint32_t dest[2];
};
void copy_to(ArrayStruct& as, void const* type_erased_source)
{
// std::extent gives us the number of elements in an array
constexpr auto elements = std::extent<decltype(as.dest)>::value;
// cast the void* to the correct pointer type
auto source = reinterpret_cast<std::uint32_t const*>(type_erased_source);
// copy the objects to dest
std::copy(source, source + elements, std::begin(as.dest));
}
int main()
{
void* obj = getObject();
ArrayStruct s;
copy_to(s, obj);
std::cout << s.dest[0] << " " << s.dest[1];
}
Если вы посмотрите на какой-нибудь пример ассемблера на Godbolt, вы увидите, что функция copy_to
в конечном итоге скомпилирована в один движение памяти.
copy_to(ArrayStruct&, void const*):
mov rax, QWORD PTR [rsi]
mov QWORD PTR [rdi], rax
Просто используйте memcpy :
#include <cstring>
void GetArrayData(uint32_t arr[], void* data, uint32_t size)
{
std::memcpy(arr, data, size * sizeof(uint32_t));
}
В случае, если вам удастся изменить код и избежать использования void*
, std :: copy :
void GetArrayData(uint32_t arr[], uint32_t* data, uint32_t size)
{
std::copy(data, data+size, arr);
}