У меня есть структура конфигурации, которую я бы хотел сохранить на внутренней вспышке ARM-коры M3. В соответствии со спецификациями сохранение данных во внутренней вспышке должно быть выровнено до 32 бит. Поскольку у меня есть много логических и символов в моей структуре, я не хочу использовать 32 бита для хранения 8 бит ... Я решил упаковать структуру, используя прагму препроцессора __packed
, Затем, когда я сохраняю ее как целую структуру , Я просто должен убедиться, что размер структуры делится на 4 (4 байта = 32 бит), я делаю это, добавляя байты заполнения, если это необходимо. В настоящее время во время разработки я много изменяю структуру, и чтобы она выровнялась с 32 битами, мне нужно постоянно менять байты заполнения. В настоящее время структура выглядит slike этогоВыравнивание структуры C во внутренней FLASH-памяти
typedef __packed struct
{
uint8_t status;
uint16_t delay;
uint32_t blabla;
uint8_t foo[5];
uint8_t padding[...] // this has to be changed every time I alter the structure.
} CONFIG;
Есть ли лучший способ добиться того, что я делаю? Я совершенно новый в программировании встраиваемых программ, и я хочу убедиться, что я не ошибаюсь.
Редактировать: Обратите внимание. Данные сохраняются в конце внутренней вспышки, так опуская отступы не будет работать ...
Я считаю, что ваше понимание неверно. Возможно, инструкции во флэш-памяти должны быть выровнены, и это будет гарантировано компилятором. Но данные, хранящиеся в флэш-памяти даже без выровненности, могут управляться ядрами cortex m3. Какой MCU компании вы используете? –