<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ARM的高效C語言編程

          基于ARM的高效C語言編程

          作者: 時間:2010-09-29 來源:網(wǎng)絡(luò) 收藏

            匯編代碼1:

            mov r0,#0

            mov r1,#0

            add1

            add r1,r1,#1

            cmp r1,#0x0a

            add r0,r1,r0

            bcc add1

            匯編代碼2:

            mov r0,#0

            mov r1,#0x0a

            add2

            subs r1,r1,#1

            add r0,r1,r0

            bne add2

            比較代碼1和代碼2,兩者的功能是相同的,但是代碼2在循環(huán)中少了1條指令。該循環(huán)的執(zhí)行次數(shù)為10次,即在執(zhí)行時共減少了10條指令。

            3.2 內(nèi)聯(lián)函數(shù)的使用

            當(dāng)函數(shù)體代碼較少(通常只有一兩條語句),且又被經(jīng)常調(diào)用時,可將它設(shè)為內(nèi)聯(lián)函數(shù)(inline)。對內(nèi)聯(lián)函數(shù)的調(diào)用類似于宏定義的展開,因此沒有函數(shù)調(diào)用的開銷(即參數(shù)的傳遞和函數(shù)值的返回),只是增加了被調(diào)用函數(shù)的代碼量。

            例如在嵌入式系統(tǒng)中,經(jīng)常訪問的外設(shè)端口的讀寫代碼就可以設(shè)成內(nèi)聯(lián)函數(shù),以提高執(zhí)行效率。外設(shè)寄存器的讀寫函數(shù)如下:

            inline unsigned short reg_read(unsigned short reg){

            return (unsigned short)*(volatile unsigned short *)( reg);//外設(shè)寄存器的讀函數(shù)

            }

            inline void reg_write(unsigned short reg, unsigned short val){

            *(volatile unsigned short *)(reg)=val;//外設(shè)寄存器的寫函數(shù)

            }

            這兩個函數(shù)的共同特點是:函數(shù)體的代碼很少,只有1個語句;使用的局部變量很少,只有1~2個參數(shù)。由于定義為內(nèi)聯(lián)函數(shù),程序的可讀性較好;在執(zhí)行時由于沒有調(diào)用開銷,執(zhí)行效率較高;函數(shù)體很小,在被展開時空間開銷不大。

            結(jié)語

            由于嵌入式系統(tǒng)對存儲空間的限制和實時性的需求,在編寫代碼時必須采用相應(yīng)的方法和原則以減少代碼的空間開銷和時間開銷。代碼優(yōu)化需要花費時間,并且代碼優(yōu)化后將降低源代碼的可讀性。因此,只有對經(jīng)常被調(diào)用且對性能影響較大的函數(shù)進行優(yōu)化,才能最有效地優(yōu)化系統(tǒng)。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 語言編程 高效 ARM 基于

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();