用32位arm7芯片lpc2129和keil編譯器,在項目開發中遇到的問題以下:
定義字節數組 :
BYTE array[10] = {0};
然后把地址&array[1]強迫轉換并賦值:
*(UINT16 *)(&array[1]) = 0xaabb;
然后讀取數組里的內容,發現被賦值的元素是array[0]和array[1],讀出的內容是:
array[0]的內容是0xbb, array[1]的內容是0xaa,array[2]-array[9]都是0。
甚是不解。難道被賦值的不應當是array[1]和array[2]嗎?
因而我把這幾行代碼用vs2008在pc上運行1下,發現,被賦值的是array[1]和array[2](這是我預期的)。
緊接著我又在arm + keil里試了1下,給&array[2]強迫轉換并賦值,發現是我預期的,被賦值的是array[2]和array[3].
思考:
1 ,這個應當不是大小真個問題。
2,如果是內存強迫對齊的問題,32 位 cpu訪問內存的時候只能訪問4的整數倍的地址,但是keil編譯器應當會把該語句編為屢次store(寫存)命令,然后運算出1個對應的值放到對應的地址啊。
我明天看下對應的匯編代碼。明天見。