我已創建了一個EFS項目,具有以下結構盒裝結構從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個字節,是不是有數據丟失的風險,因爲在第一個成員之後,我的結構中將會有一個字節的填充空間(因爲我的編譯器不支持Packed結構並且我不能使用它) I向EFS寫了下面的值,
version -0
y1 -6
y2 -10
y3 -60
我只讀了16個字節,並且我的結構中的每個成員都被分配了正確的值。有沒有我的結構將有錯誤的值的任何情況。
(2)。由於在步驟一個混亂,我創建一個臨時struture像下面
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字節, 現在,當我請輸入到EFS作爲 版本= 0,Y 1 = 6 ,Y2 = 10,Y3 = 60,
成員被分配這樣的值:版本= 0,y1_a = 6,y1_b = 0,y2_a = 10,y2_b = 0, y3_a = 60,y3_b = 0;
有人可以幫助理解這一點嗎? 我的想法是在temp結構中讀取(以便EF和我的結構體的大小相同),然後將值從temp結構分配給我的原始結構
你使用什麼編譯器?什麼處理器?這是嵌入式系統嗎?什麼OS? – phonetagger
yes其嵌入式系統,android,編譯器因構建而異(取決於產品到產品) –
您可能會觀察到和endian訂購問題。你可能會在這裏找到你需要的答案(http://en.wikipedia.org/wiki/Endianness)。 – WhozCraig