在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            ARM內(nèi)存地址訪問(wèn)

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

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

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

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

            pISR_EINT0 = (int)Eint0_ISR

            為了訪問(wèn)一個(gè)絕對(duì)地址,把一個(gè)整形數(shù)強(qiáng)制轉(zhuǎn)換(typecast)為一指針。

            2、__irq:

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

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

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

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

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

            4、Static:

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

            int cCout()

            {

            Static int loop = 0;

            .......

            loop++;

            .......

            }

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

            5、Constant:

            將一個(gè)變量或?qū)ο蠖x成constant類型,則定義之后不能被更新(可讀不可寫),即在定義或說(shuō)明類型時(shí)必須給他一個(gè)初始值。

            幾種須要注意的地方:

            √如果const位于星號(hào)(*)的左側(cè),則const修飾指針?biāo)赶虻淖兞浚粗羔樦赶虺A?;?const int *a; 或int const *a;這兩種情況相同(cost放在變量聲明符的位置無(wú)關(guān)),指針指向一個(gè)常量,此時(shí)不能對(duì)內(nèi)容進(jìn)行更改,即不能有寫操作語(yǔ)句*a=3;

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

            √如果星號(hào)左右側(cè)都有const修飾,如:const int* const a;表示指針本身和指針指向的內(nèi)容均為常量。

            6.、Volatile:

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

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

            √硬件寄存器通常要加volatile說(shuō)明,因?yàn)槊看螌?duì)它的讀寫都可能有不同的意義;

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

            √多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加voatile關(guān)鍵字:在多線程訪問(wèn)某字段時(shí),代碼希望這些訪問(wèn)能夠操作到操作(讀取)到字段的最新值,同時(shí)寫到變量的操作能立即更新;對(duì)字段加上volatile關(guān)鍵字,那么對(duì)該字段的任何請(qǐng)求(讀/寫)都會(huì)立刻得到執(zhí)行。



            關(guān)鍵詞: ARM內(nèi)存地址訪

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉