前兩天寫了個程序,在PC上單元測試一切正常,但是加載到嵌入式系統中運行,執行的結果總是不正確,糾察了很久,發現問題出現在如下代碼:
unsigned int type; unsigned char *pType;
type = 2; pType = (unsigned char *)&type; |
在PC機上,上述代碼運行後,type=2, *pType=2,而在嵌入式系統中運行,得到的值卻是type=2, *pType=0。
經過查閱資料才發現,原來這次使用的嵌入式系統數據存儲是大端結構,低地址存放的是高位數據,上述數據的存儲形式如下:
指針pType指向的是type變量的第一個字節所在的地址,實際上該字節保存的數據是type變量的最高字節的值。
在PC機上,數據存儲是小端模式,低地址存放的是低位數據,上述數據的存儲形式如下:
指針pType指向的數據正好就是type變量最低位字節的數據。
因此,編寫嵌入式系統的代碼,如果想要考慮到通用性,則應當儘量避免使用上述的指針用法來訪問int類型數據的每個字節的值,而是應該使用int類型數據進行左移、右移等操作得到相應字節的值,這樣不管是大端還是小端存儲,都不會有問題。
本文出自 “rainman” 博客,請務必保留此出處http://lancelot.blog.51cto.com/393579/470035