Tengo una estructura de configuración que me gustaría guardar en el flash interno de la corteza M3 de ARM. Según las especificaciones, los datos guardados en el flash interno deben alinearse a 32 bits. Como tengo mucho booleano y caracteres en mi estructura, no quiero usar 32 bits para almacenar 8 bits ... Decidí empaquetar la estructura usando el preprocesador pragma __packed
, luego cuando lo guardo como una estructura completa , Solo tengo que asegurarme de que el tamaño de la estructura sea divisible por 4 (4 bytes = 32 bits), lo hago añadiendo bytes de relleno si es necesario. Actualmente, durante el desarrollo modifico mucho la estructura, y para que esté alineada con los 32 bits, necesito cambiar los bytes de relleno todo el tiempo. En la actualidad, la estructura parezca SLIKE esteAlineación de la estructura C en la memoria FLASH interna
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;
¿Hay una mejor manera de lograr lo que estoy haciendo? Soy bastante nuevo en la programación Embedded, y quiero asegurarme de no cometer errores.
Editar: Tenga en cuenta. Los datos se persistió en el extremo de la flash interna, por lo que omitiendo el relleno no va a funcionar ...
Creo que su comprensión no es correcta. Es posible que las instrucciones en la memoria flash tengan que estar alineadas y eso estará garantizado por el compilador. Pero los datos almacenados en flash incluso desalineados pueden ser gestionados por núcleos m3 de la corteza del brazo. ¿Qué MCU de la empresa usas? –