Объявлены вот такие структуры
Код
template<class T, uint8_t X_SZ>
struct Table2D_storage
{
static const uint8_t x_size = X_SZ; ///< number of elements in row
T data[X_SZ];
};
template<class T, uint8_t X_SZ, uint8_t Y_SZ>
struct Table3D_storage
{
void SetDescription(const char* newDescr) volatile
{
for (auto& i : description)
{
i = *newDescr;
if( newDescr == 0)
break;
newDescr++;
}
description[TABLE_DESCRIPTION_LEN - 1] = 0;
}
static const uint8_t x_size = X_SZ; ///< number of elements in row
static const uint8_t y_size = Y_SZ; ///< number of elements in column
T data[Y_SZ][X_SZ];
char description[TABLE_DESCRIPTION_LEN];
};
enum
{
2D_X_SIZE = 16,
3D_X_SIZE = 16,
3D_Y_SIZE = 2,
};
typedef Table2D_storage<uint16_t, 2D_X_SIZE > 2D_t;
typedef Table3D_storage<Q7_8::RawValue_t, 3D_X_SIZE, 3D_Y_SIZE> 3D_t;
typedef struct
{
2D_t RPMQuant;
3D_t IgnWork;
}LookupTablesStorage_t;
LookupTablesStorage_t будет состоять из разных наборов шаблонов Table2D_storage<> и Table3D_storage<>
Их тип T может меняться от int8_t до int32_t. Размеры X_SZ и Y_SZ, соответственно, тоже могут быть разные...
Так вот было бы ОЧЕНЬ удобно в на ПК иметь тот-же заголовочный файл с объявлением LookupTablesStorage_t, заполнить ее нужными данными и потом просто сделать memcpy() на девайс(ну через интерфейс связи с ПК просто побайтово перекинуть данные).
Объявлять структуры пакованными не очень бы хотелось по причине невозможности использования указателей на члены и снижения быстродействия. В общем то с этим можно мириться конечно...
Делать более сложный протокол передачи с присвоением значений каждому члену структуры отдельно без веской причины тоже лень, да и лишний код в прошивке как-бы...
Есть подозрение, что т.к. обе архитектуры 32битные - требования к выравниванию должны совпадать.
Гуглил гуглил, но так и не нагуглил будет ли выравнивание одинаковым на x86 и ARM Cortex M3?
Прошивка девайса собирается ARM GCC, на ПК будет наверно MinGW, который тоже считай GCC.
Что скажите? Стоит ли так делать или обязательно паковать/присваивать почленно?
The truth is out there...