Переношу проект с 8-bit (AVR) на 32-bit (STM32F4xx) и столкнулся с проблемой выровненных данных. Дело в том что обмен по SPI 8 битный. Полученные данные по SPI вычитываются в массив через DMA и накладываются на структуру с не выровненными данными (8бит, 16 бит, битовые поля). В результате не правильный результат. Пока обошёл это дело через pragma pack.
Код
#pragma pack(push, 1)
typedef struct name
{
} name_t
#pragma pack(pop)
typedef struct name
{
} name_t
#pragma pack(pop)
Всё работает, но не очень нравиться такая запись, дабы не напороться в дальнейшем на грабли, т.к оформляется всё виде драйвера на устройство и больше туда что б не лезть. Перебирать индексы массива не хочется, теряется наглядность. Есть ли какие ещё варианты записи структуры структуру с не выровненными данными, что бы наложить на массив данных?
Используется IAR6.5, в дальнейшим поддержка проекта будет только в IARе, потому вопрос совместимости с другими компиляторами особо не важен.
Железо будет только Cortex M4 или M3, про ограничения на других АРМах не актуально.
ЗЫ: Заметил ещё неприятную особенность записи pragma pack, как только делаешь сохранения в том файле, где записано pragma pack, то после перепрошивки перестают работать внешние прерывания. Если потом сделать сохранить в другом файле и зашить снова, то всё работает. С чем связано не понятно.