0

次の構造を持つ 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 のサイズと構造体の両方が同じになるように) 一時構造体を読み取り、一時構造体から元の構造体に値を割り当てることです。

4

1 に答える 1