<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM中的對齊問(wèn)題

ARM中的對齊問(wèn)題

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
ARM中,當吧一個(gè)內存區域初始化為某個(gè)結構體時(shí),必須注意字節對齊情況。

1. 簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/201611/316963.htm

在A(yíng)RM中,有ARM和Thumb兩種指令。
ARM指令 :每執行一條指令,PC的值加4個(gè)字節(32bits).一次訪(fǎng)問(wèn)4字節內容,該字節的起始地址必須是4字節對齊的位置上,

即地址的低兩位為bits[0b00],也就是說(shuō)地址必須是4的倍數。
Thumb指令:每執行一條指令,PC的值加2個(gè)字節(16bits).).一次訪(fǎng)問(wèn)2字節內容,該字節的起始地址必須是2字節對齊的位置上,

即地址的低兩位為bits=0,也就是說(shuō)地址必須是2的倍數。

遵循以上方式叫對齊(aligned)方式,不遵守這樣方式稱(chēng)為非對齊(unaligned)的存儲訪(fǎng)問(wèn)操作。

ARM CPU不支持未對齊雙字(8 bytes)訪(fǎng)問(wèn)。

雙字訪(fǎng)問(wèn)必須是8字節/4字節對齊.

2. ARM平臺中的字節對齊關(guān)鍵字

(1) __align(num)

(2) __packed

進(jìn)行一字節對齊。

(3) __unaligned

用于修飾某個(gè)變量,可按照非對齊方式訪(fǎng)問(wèn)。

3. __packed與#pragma pack(1)的區別

4. __attribute__((aligned))

用于指定類(lèi)型的最低對齊要求.

5. --unaligned_access / --no_unaligned_access

用于啟用/禁止:CPU上的未對齊數據訪(fǎng)問(wèn).

ARMv6 / ARMv7-AR : 默認值為--unaligned_access

ARMv6之前的/ARMv7-M : 默認值為--no_unaligned_access

EDK中RVCT_ALL_CC_FLAGS設為:--no_unaligned_access

ARMGCC沒(méi)有設。

6. 內存分配函數

盡量保證返回的地址,都是4字節對齊的。

7. 如何查找與字節對齊方面的問(wèn)題

(1) 編譯器的big little 設置

EDK中ARMGCC的flag設為:-mlittle-endian

(2) CPU是否支持非對齊訪(fǎng)問(wèn)


===================

字節對齊的故障只能出現在“引用”的使用過(guò)程中。當使用“對象名”來(lái)操作對象時(shí),根本不用擔心字節對齊問(wèn)題。

在A(yíng)DS環(huán)境下,有“ALIGN” 、“__align(x)” 、“__packed”關(guān)鍵字用于字節對齊處理。ALIGN用于匯編語(yǔ)言,__align(x)用于C語(yǔ)言,

__packed用于放棄字節對齊。

單字節對齊類(lèi)型的引用可以操作任何對象,雙字節對齊類(lèi)型的引用可以操作雙字節、四字節、八字節對齊的對象,…………。

只有遵守這個(gè)規則,程序才可能是健壯的。

如果我們想使用雙字節對齊類(lèi)型的引用來(lái)操作單字節對齊對象,那么你在定義該引用時(shí)必須使用__packed關(guān)鍵字!

============================



關(guān)鍵詞: ARM對齊問(wèn)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>