新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 協處理器及其他指令之:異常產生指令

        協處理器及其他指令之:異常產生指令

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

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

        中斷服務程序的主要工作放在C__Handler中,由C語言完成,用swich_case結構判斷中斷類型。典型的程序如下。

        void C__Handler( int swi_num, int *regs )

        {

        switch( swi_num )

        {

        case 0:

        regs[0] = regs[0] * regs[1];

        break;

        case 1:

        regs[0] = regs[0] + regs[1];

        break;

        case 2:

        regs[0] = (regs[0] * regs[1]) + (regs[2] * regs[3]);

        break;

        case 3:

        {

        int w, x, y, z;

        w = regs[0];

        x = regs[1];

        y = regs[2];

        z = regs[3];

        regs[0] = w + x + y + z;

        regs[1] = w - x - y - z;

        regs[2] = w * x * y * z;

        regs[3] =(w + x) * (y - z);

        }

        break;

        }

        }

        9.5.2 斷點中斷指令

        1.指令編碼格式

        斷點中斷指令(BreakPoint)產生一個預取異常(prefetch abort),它常被用來設置軟件斷點,在調試程序時十分有用。當系統中存在調試硬件時,該指令被忽略。

        指令的編碼格式如圖9.13所示。

        圖9.13 指令編碼格式

        2.指令的語法格式

        BKPT immediate>

        immediate>

        16位的立即數。該立即數可以用來保存額外的斷點信息。

        注意

        16位立即數在指令的編碼格式中并不是連續存放的。前12位放在bits[19∶8],而后4位放在bits[3∶0]。

        3.指令操作的偽代碼

        指令操作的偽代碼如下面程序段所示。

        If (not overridden by debug hard)

        R14_abt = address of BKPT instruction + 4

        SPSR_abt = CPSR

        CPSR[4:0] = 0b10111 /*進入異常模式*/

        CPSR[5] = 0 /*執行在狀態*/

        /*CPSR[6] is unchanged*/

        CPSR[7] = 1 /*禁止正常中斷*/

        If high vectors configured then

        PC = 0x0000000c

        4.指令的使用

        要正確的使用BKPT指令,必須和具體的調試系統相結合。一般說來,BKPT有兩種使用方法。

        (1)如果當前使用的系統調試硬件沒有屏蔽BKPT指令,那么在此系統中預取指令異常和軟件調試命令同時使用一個中斷向量。這樣當異常發生時,就要依靠系統自身來判斷是真正的預取異常還是軟件調試命令。判斷的方法,根據系統的不同,而有所不同。

        (2)如果當前的系統調試硬件屏蔽了BKPT指令,那么系統會跳過BKPT指令順序執行該指令下面的程序代碼。

        注意

        BKPT指令總是無條件執行的,當指令的編碼格式中的條件域不被解析為AL時,指令的執行結果不可預知。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 北宁市| 无锡市| 青阳县| 建德市| 横山县| 镇康县| 胶州市| 崇义县| 杭锦旗| 金阳县| 株洲县| 乌拉特中旗| 梁平县| 庆安县| 宜君县| 和林格尔县| 公安县| 昌江| 鄢陵县| 青龙| 福清市| 庆城县| 大洼县| 苍山县| 来宾市| 黄龙县| 融水| 开原市| 商都县| 讷河市| 东台市| 商河县| 泰来县| 三门县| 邳州市| 高碑店市| 稷山县| 嘉义市| 拉萨市| 清丰县| 乌拉特后旗|