<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 嵌入式系統(tǒng) >> ARM >> 正文

      ARM C嵌入式編程

      作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2008-11-28

      護和恢復(fù)的需要;

      3、編寫中斷服務(wù)程序的一些基本原則:
           √避免在中斷服務(wù)程序中做浮點運算:好的終端讀物程序應(yīng)該遵循短小有效這一原則,在中斷服務(wù)程序中做浮點運算大大違背這一原則,同時有些處理器/編譯器就是不允許在中斷服務(wù)程序中做浮點運算;
           √中斷服務(wù)程序不能有返回值:所以中斷服務(wù)程序都定義為返回類型為void,即:void _irq Eint0_ISR(void);
           √中斷服務(wù)函數(shù)不能傳遞參數(shù):故參數(shù)列表為void,即:void _irq Eint0_ISR(void);
      4、Static:
           一個static變量,其實就是全局變量,只不過它有作用域,它可用于保存變量所在函數(shù)被類此調(diào)用期間的中間狀態(tài),比如:
      int cCout()
      {
      Static int loop = 0;
      .......
      loop++;
      .......
        }
           loop變量的值會跟隨著函數(shù)的調(diào)用次數(shù)而遞增,函數(shù)退出后,loop的值還存在,只是loop只能在函數(shù)中才能被訪問(函數(shù)作用域),而loop的內(nèi)存空間也只會在函數(shù)第一次被調(diào)用時才會被分配和初始化,以后每次進入函數(shù),都不為static分配了,而直接使用上一次的值。在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其他函數(shù)調(diào)用,模塊外其它函數(shù)無權(quán)訪問,是一個本地全局變量。

      5、Constant:
           將一個變量或?qū)ο蠖x成constant類型,則定義之后不能被更新(可讀不可寫),即在定義或說明類型時必須給他一個初始值。
           幾種須要注意的地方:
           √如果const位于星號(*)的左側(cè),則const修飾指針?biāo)赶虻淖兞浚粗羔樦赶虺A浚蝗?const int *a; 或int const *a;這兩種情況相同(cost放在變量聲明符的位置無關(guān)),指針指向一個常量,此時不能對內(nèi)容進行更改,即不能有寫操作語句*a=3;
           √如果cost位于型號的右側(cè),cost就是修飾指針本身,即指針本身是常量;如:int* const a;語句表示指針本身是常量,所指向內(nèi)容不是常量,即a++是錯誤的。
           √如果星號左右側(cè)都有const修飾,如:const int* const a;表示指針本身和指針指向的內(nèi)容均為常量。

      6.、Volatile:
           定義一個易失性變量,編譯器有一種技術(shù)叫數(shù)據(jù)流分析,分析程序中的變量在哪里被賦值、在哪里使用、在哪里失效,分析結(jié)果可以用于常量合并,常量傳播等優(yōu)化。當(dāng)編譯器檢查到代碼沒有修改字段的值,就有可能在你訪問字段時提供上次訪問的緩存值,這能夠提高程序的效率,但有時這些優(yōu)化會帶來問題,不是我們程序所需要的,特點是對硬件寄存器操作的程序,這時可以用volatile關(guān)鍵字禁止做這些優(yōu)化。
           使用volatile變量的場合:
           √硬件寄存器通常要加volatile說明,因為每次對它的讀寫都可能有不同的意義;
           √在中斷服務(wù)程序中修改的供其他程序檢測用的變量需要加volatile聲明;否則編譯器可能對變量更新一次后每次都使用緩存值不再立即更新;
           √多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加voatile關(guān)鍵字:在多線程訪問某字段時,代碼希望這些訪問能夠操作到操作(讀取)到字段的最新值,同時寫到變量的操作能立即更新;對字段加上volatile關(guān)鍵字,那么對該字段的任何請求(讀/寫)都會立刻得到執(zhí)行。

      Tags:ARM,C語言,嵌入式,編程  
      責(zé)任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章:
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 乱色熟女综合一区二区三区| 国产精品综合专区中文字幕免费播放 | 色天天天综合色天天碰| 亚洲精品国产第一综合99久久| 伊人色综合网一区二区三区| 亚洲国产综合精品一区在线播放| 一本久久a久久精品vr综合| 色婷婷综合和线在线| 狠狠人妻久久久久久综合| 亚洲国产欧美国产综合一区| 国产一级a爱做综合| 狠狠色丁香久久婷婷综合图片| 伊人色综合久久88加勒| 亚洲丁香婷婷综合久久| 色欲香天天天综合网站| 久久婷婷五月综合成人D啪| 精品无码综合一区二区三区| 鲁一鲁一鲁一鲁一曰综合网| 亚洲综合AV在线在线播放 | 在线精品国产成人综合| 97se亚洲综合在线| 亚洲综合无码一区二区| 99久久国产综合精品女同图片| 国产精品国产色综合色| 婷婷激情综合色五月久久| 狠狠色丁香久久婷婷综合_中 | 久久99国产综合精品| 综合在线视频精品专区| 狠狠色丁香婷综合久久| 亚洲AV综合色区无码一区| 久久综合九色综合欧洲| 久久久综合九色合综国产| 狠狠色综合色综合网络| 99久久国产综合精品2020| 一本一道久久综合久久| 欧美日韩综合一区二区三区| 一本色道久久鬼综合88| 国产成人综合亚洲亚洲国产第一页 | HEYZO无码综合国产精品| 久久99亚洲综合精品首页| 久久九九精品国产综合喷水|