新聞中心

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

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

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

        本文引用地址:http://www.104case.com/article/257085.htm

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

        #ifdef __thumb

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

        #define SemiSWI 0xAB

        #else

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

        #define SemiSWI 0x123456

        #endif

        /* 使用Semihosting軟中斷輸出一個字符*/

        __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 );

        }

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

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

        __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


        上一頁 1 2 3 4 5 6 7 8 9 10 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 沈丘县| 梅州市| 长白| 许昌县| 泰安市| 岳普湖县| 广丰县| 兴安县| 安福县| 名山县| 澜沧| 奎屯市| 怀柔区| 栾城县| 渭源县| 韶山市| 睢宁县| 白河县| 巴南区| 诸城市| 巩留县| 桂东县| 屏边| 孟津县| 洛浦县| 辉县市| 同仁县| 明溪县| 宜君县| 禄劝| 通辽市| 宿松县| 永城市| 竹溪县| 清新县| 汶上县| 宁海县| 太谷县| 北票市| 体育| 鲁甸县|