<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內存地址訪(fǎng)問(wèn)

ARM內存地址訪(fǎng)問(wèn)

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
1、訪(fǎng)問(wèn)絕對地址的內存位置:

#define pISR_EINT0 (*(unsigned *) (_ISR_STRATADDRESS+0x74))

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

上述語(yǔ)句把無(wú)符號整數_ISR_STRATADDRESS+0x74強制轉換為指針,指向RAM,用下面的語(yǔ)句可以訪(fǎng)問(wèn)它:

pISR_EINT0 = (int)Eint0_ISR

為了訪(fǎng)問(wèn)一個(gè)絕對地址,把一個(gè)整形數強制轉換(typecast)為一指針。

2、__irq:

為了方便使用高級語(yǔ)言編寫(xiě)異常處理函數,ARM編譯器對異常處理函數做了特定擴展,只要使用關(guān)鍵字_irq,這樣編譯出來(lái)的函數就滿(mǎn)足異常響應對現場(chǎng)保護和恢復的需要;

3、編寫(xiě)中斷服務(wù)程序的一些基本原則:

√避免在中斷服務(wù)程序中做浮點(diǎn)運算:好的終端讀物程序應該遵循短小有效這一原則,在中斷服務(wù)程序中做浮點(diǎn)運算大大違背這一原則,同時(shí)有些處理器/編譯器就是不允許在中斷服務(wù)程序中做浮點(diǎn)運算;

√中斷服務(wù)程序不能有返回值:所以中斷服務(wù)程序都定義為返回類(lèi)型為void,即:void _irq Eint0_ISR(void);

√中斷服務(wù)函數不能傳遞參數:故參數列表為void,即:void _irq Eint0_ISR(void);

4、Static:

一個(gè)static變量,其實(shí)就是全局變量,只不過(guò)它有作用域,它可用于保存變量所在函數被類(lèi)此調用期間的中間狀態(tài),比如:

int cCout()

{

Static int loop = 0;

.......

loop++;

.......

}

loop變量的值會(huì )跟隨著(zhù)函數的調用次數而遞增,函數退出后,loop的值還存在,只是loop只能在函數中才能被訪(fǎng)問(wèn)(函數作用域),而loop的內存空間也只會(huì )在函數第一次被調用時(shí)才會(huì )被分配和初始化,以后每次進(jìn)入函數,都不為static分配了,而直接使用上一次的值。在模塊內,一個(gè)被聲明為靜態(tài)的函數只可被這一模塊內的其他函數調用,模塊外其它函數無(wú)權訪(fǎng)問(wèn),是一個(gè)本地全局變量。

5、Constant:

將一個(gè)變量或對象定義成constant類(lèi)型,則定義之后不能被更新(可讀不可寫(xiě)),即在定義或說(shuō)明類(lèi)型時(shí)必須給他一個(gè)初始值。

幾種須要注意的地方:

√如果const位于星號(*)的左側,則const修飾指針所指向的變量,即指針指向常量;如:const int *a; 或int const *a;這兩種情況相同(cost放在變量聲明符的位置無(wú)關(guān)),指針指向一個(gè)常量,此時(shí)不能對內容進(jìn)行更改,即不能有寫(xiě)操作語(yǔ)句*a=3;

√如果cost位于型號的右側,cost就是修飾指針本身,即指針本身是常量;如:int* const a;語(yǔ)句表示指針本身是常量,所指向內容不是常量,即a++是錯誤的。

√如果星號左右側都有const修飾,如:const int* const a;表示指針本身和指針指向的內容均為常量。

6.、Volatile:

定義一個(gè)易失性變量,編譯器有一種技術(shù)叫數據流分析,分析程序中的變量在哪里被賦值、在哪里使用、在哪里失效,分析結果可以用于常量合并,常量傳播等優(yōu)化。當編譯器檢查到代碼沒(méi)有修改字段的值,就有可能在你訪(fǎng)問(wèn)字段時(shí)提供上次訪(fǎng)問(wèn)的緩存值,這能夠提高程序的效率,但有時(shí)這些優(yōu)化會(huì )帶來(lái)問(wèn)題,不是我們程序所需要的,特點(diǎn)是對硬件寄存器操作的程序,這時(shí)可以用volatile關(guān)鍵字禁止做這些優(yōu)化。

使用volatile變量的場(chǎng)合:

√硬件寄存器通常要加volatile說(shuō)明,因為每次對它的讀寫(xiě)都可能有不同的意義;

√在中斷服務(wù)程序中修改的供其他程序檢測用的變量需要加volatile聲明;否則編譯器可能對變量更新一次后每次都使用緩存值不再立即更新;

√多任務(wù)環(huán)境下各任務(wù)間共享的標志應該加voatile關(guān)鍵字:在多線(xiàn)程訪(fǎng)問(wèn)某字段時(shí),代碼希望這些訪(fǎng)問(wèn)能夠操作到操作(讀?。┑阶侄蔚淖钚轮?,同時(shí)寫(xiě)到變量的操作能立即更新;對字段加上volatile關(guān)鍵字,那么對該字段的任何請求(讀/寫(xiě))都會(huì )立刻得到執行。



關(guān)鍵詞: ARM內存地址訪(fǎng)

評論


技術(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>