新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM微處理器的編程模型之:異常中斷處理

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

        作者: 時間:2013-09-13 來源:網絡 收藏

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

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

        #ifdef __thumb

        /* Thumb 狀態的Semihosting軟中斷處理*/

        #define SemiSWI 0xAB

        #else

        /* 狀態下的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來傳遞所需運算的值。根據AAPCS標準,r12為IP寄存器,并且專用于函數調用。其他時間內可將其用作暫存寄存器。如前面所述,通用SWI參數和返回值通過r0~r3寄存器傳遞。而r12可用于傳遞通用SWI調用的中斷功能編號。

        下面的例子顯示了通用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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 镇坪县| 平塘县| 无为县| 台北市| 柯坪县| 措美县| 庄浪县| 通州市| 临清市| 临猗县| 长春市| 云和县| 名山县| 资阳市| 谢通门县| 宜章县| 三亚市| 江孜县| 水城县| 始兴县| 祥云县| 蒲城县| 衡阳县| 萝北县| 偏关县| 墨脱县| 永丰县| 社会| 西平县| 洮南市| 张掖市| 从化市| 汉沽区| 长丰县| 道孚县| 留坝县| 哈巴河县| 华安县| 鄂州市| 南雄市| 宜章县|