ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
1302288 Топик полностью
Nikolay_Po (18.04.2023 19:00, просмотров: 197) ответил IBAH на Такой парадокс. Структура пишится в Епром, и должна быть упакована, но для оптимизации обращения к элементам структуры, они должны быть выровнены. Выравниваю ручками. Хочу чтобы компилятор меня проверил.
Делайте как написал выше: большие элементы сначала. Спокойно пакуйте. Если переживаете, добавьте __attribute__((aligned)) в определении структуры. 

Я вообще делаю так: декларирую упакованную структуру. Потом объединяю её в союз с массивом байт размером sizeof(тип_структуры). И определяю этот союз с выравниванием с атрибутом aligned. Имею доступ к элементам структуры по именам, а для работы с ЭСПЗУ - как к массиву байт известного размера.

При таком подходе (от больших к меньшим), даже если компилятор намудрит и понавырвавнивает, меняется лишь размер массива байт, но доступ не ломается.

Впрочем, с GCC, пока не случалось, чтобы не до конца упаковал.