STM32F105RC プロセッサに ARM GCC を使用しています。
私のアプリケーションでは、次のようなものになりました。
typedef struct
{
uint16_t coinValue;
uint8_t minimumCoins;
} MIN_COIN_RENDERING;
typedef struct
{
uint16_t coinValue;
uint8_t hopperType;
uint8_t motorDelay;
} CONFIG_HOPPER;
typedef struct
{
MIN_COIN_RENDERING minCoinRendering[10];
CONFIG_HOPPER hopper[5];
uint8_t reservedFFU[X];
//
uint16_t crc;
} APPLICATION_CONFIG; // MUST have 128 bytes!
最初の問題は、予約されている FFU (上に X でマークされている) のバイト数を正しく決定する方法です。
X = 128 - (10 x 3 + 5 x 4 + 2) = 76 と言ったら、これは正しくありません。
X の正しい値は 66です。これは、コンパイラが (少なくともコンパイラの既定の設定で) 構造体のフィールドを整列させるためです。
EEPROM に保存/復元されるため、全体の構造は 128 バイトである必要があります。この構造は、EEPROM にあるもののシャドウ コピーとして使用されます...
私の質問: APPLICATION_CONFIG 構造体に新しいフィールドを追加する (または何かを変更する) たびに、reservedFFU サイズを台無しにすることなく (EEPROM 用に) シャドウ コピーを作成する (より適切で柔軟な) 方法はありますか?