Цитата(scifi @ Sep 13 2018, 12:03)

Костыль в виде aligned вылечит, но ужас никуда не денется.
Ну-ну, попробуйте объявить массив для стека какой-нить задачи RTOS, НЕ применив к нему обязательный "костыль" aligned. ...
"Ужас" убирается объявлением вместо банальных байтовых массивов с разношерстными данными ("протокольные" дела) объявлением полноценных структур с полями нужных размеров и названий, даже с применением union, где это нужно.
Чтобы структура была одинакового размера на любых компиляторах, нужен атрибут packed. Это - норма.
После чего в соотв. функцию передается ссылка (&) на структуру (или указатель, если нельзя писать на плюсах).
В этом случае правильный доступ к полям структуры станет головной болью
компилятора, а не кодера.
Вот пример обяявления такой структуры (не самый лучший пример, но тем не менее):
Код
struct __PACKED Frame
{
uint8_t start;
uint8_t command;
uint8_t dataSize;
union
{
uint8_t payload[COMMUNICATION_MAX_FRAME_DATA_SIZE_IN_BYTES];
MasterToSlave masterToSlave;
SlaveToMaster slaveToMaster;
} data;
struct
{
union
{
struct
{
uint8_t low;
uint8_t high;
};
uint16_t value;
};
} crc16;
};
// SlaveToMaster и SlaveToMaster - структуры одинакового размера, но с разными полями
ps. из-за необходимости применения телепатии к стартовому посту эта тема рискует перейти в очередной холивар :D