Ho una struttura di configurazione che vorrei salvare sul flash interno di ARM cortex M3. Secondo le specifiche, i dati salvati nel flash interno devono essere allineati a 32 bit. Poiché ho un sacco di booleani e caratteri nella mia struttura, non voglio usare 32 bit per archiviare 8 bit ... Ho deciso di impacchettare la struttura usando il pragma del preprocessore __packed
, quindi quando lo salvo come struttura intera , Devo solo assicurarmi che la dimensione della struttura sia divisibile per 4 (4 byte = 32 bit), lo faccio aggiungendo i byte di riempimento se necessario. Attualmente, durante lo sviluppo altero molto la struttura, e per renderla allineata con i 32 bit, ho bisogno di cambiare i byte del padding tutto il tempo. Attualmente, la struttura di guardare slike questoAllineamento della struttura C nella 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;
C'è un modo migliore per ottenere quello che sto facendo? Sono abbastanza nuovo nella programmazione Embedded, e voglio essere sicuro di non sbagliare.
Modifica: Nota. I dati viene mantenuto alla fine della interno-flash, in modo omettendo l'imbottitura non funzionerà ...
Ho creduto che la tua comprensione non sia corretta. Le istruzioni nella memoria flash potrebbero dover essere allineate e ciò sarà garantito dal compilatore. Ma i dati memorizzati in flash anche non allineati possono essere gestiti da core di corte cortex m3. Quale MCU della tua azienda usi? –