次の構造を持つ 1 つの EFS アイテムを作成しました。
struct
{
uint8 version; // uint8 - 1 byte data type, uint16 - 2 byte
uint16 y1;
uint16 y2;
uint16 y3;
uint8 reserved[9];
}
EFS ファイルのサイズが 16 バイトになったので、圧縮されていると思います。
これで、電源を入れたときに EFS から値を読み取る同じ構造がありますが、コンパイラによって返される構造のサイズは 18 バイトになります (コンパイラはパッキングをサポートしていないため、EFS の読み取りは失敗していました)。
16バイトだけ読んで合格しました。
質問:
(1)。16 バイトだけを読み取った場合、データ損失のリスクはありませんか?次の値を EFS に、
version -0
y1 -6
y2 -10
y3 -60
16 バイトしか読み取らず、構造体のすべてのメンバーに正しい値が割り当てられました。私の構造が間違った値を持つシナリオはありますか?
(2)。ステップ1で混乱したため、以下のような一時的な構造を1つ作成しました
struct
{
uint8 version;
uint8 y1_a;
uint8 y1_b;
uint8 y2_a;
uint8 y2_b;
uint8 y3_a;
uint8 y3_b;
uint8 reserved[9];
}
これで、EFS と構造体の両方のサイズが 16 バイトになりました。バージョン =0、y1=6、y2=10、y3=60 として EFS に入力すると、
メンバーには次のような値が割り当てられます:version=0,y1_a = 6, y1_b =0, y2_a = 10, y2_b =0, y3_a =60, y3_b =0;
誰かがこれを理解するのを助けることができますか? 私の考えは、(EF のサイズと構造体の両方が同じになるように) 一時構造体を読み取り、一時構造体から元の構造体に値を割り当てることです。