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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM微處理器的編程模型之:異常中斷處理

          ARM微處理器的編程模型之:異常中斷處理

          作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/257085.htm

          下面的例子顯示了如何使用_swi將C函數(shù)調(diào)用映射到半主機(jī)方式的SWI。

          #ifdef __thumb

          /* Thumb 狀態(tài)的Semihosting軟中斷處理*/

          #define SemiSWI 0xAB

          #else

          /* 狀態(tài)下的Semihosting的軟中斷處理*/

          #define SemiSWI 0x123456

          #endif

          /* 使用Semihosting軟中斷輸出一個(gè)字符*/

          __swi(SemiSWI) void Semihosting(unsigned op, char *c);

          #define WriteC(c) Semihosting (0x3,c)

          void write_a_character(int ch)

          {

          char tempch = ch;

          WriteC( tempch );

          }

          編譯程序含有一個(gè)機(jī)制,用以支持使用r12來(lái)傳遞所需運(yùn)算的值。根據(jù)AAPCS標(biāo)準(zhǔn),r12為IP寄存器,并且專用于函數(shù)調(diào)用。其他時(shí)間內(nèi)可將其用作暫存寄存器。如前面所述,通用SWI參數(shù)和返回值通過(guò)r0~r3寄存器傳遞。而r12可用于傳遞通用SWI調(diào)用的中斷功能編號(hào)。

          下面的例子顯示了通用SWI的C語(yǔ)言程序框架。

          __swi_indirect(0x80)

          unsigned SWI_ManipulateObject(unsigned operationNumber,

          unsigned object,unsigned parameter);

          unsigned DoSelectedManipulation(unsigned object,

          unsigned parameter, unsigned operation)

          {

          return SWI_ManipulateObject(operation, object, parameter);

          }

          生成的匯編代碼如下。

          DoSelectedManipulation PROC

          STMFD sp!,{r3,lr}

          MOV r12,r2

          SWI 0x80

          LDMFD sp!,{r3,pc}

          ENDP


          上一頁(yè) 1 2 3 4 5 6 7 8 9 10 下一頁(yè)

          評(píng)論


          相關(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); })();