新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM的三種中斷調(diào)試方法簡介

        ARM的三種中斷調(diào)試方法簡介

        作者: 時(shí)間:2010-12-13 來源:網(wǎng)絡(luò) 收藏

        1 嵌入式軟件開發(fā)流程

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

          參照嵌入式軟件的開發(fā)流程。第一步:工程建立和配置。第二步:編輯源文件。第三步:工程編譯和鏈接。第四步:軟件的。第五步:執(zhí)行文件的固化。

          在整個(gè)流程中,用戶首先需要建立工程并對工程做初步的配置,包括配置處理器和配置設(shè)備。編輯工程文件,包括自己編寫的匯編和C語言源程序,還有工程編譯時(shí)需要編寫的鏈接腳本文件,過程中需要編寫存儲(chǔ)區(qū)映像文件和命令腳本文件,以及上電復(fù)位時(shí)的程序運(yùn)行入口的啟動(dòng)程序文件。

          對后四種文件的理解很重要,其作用解釋如下。

          (1) 鏈接腳本文件:在程序編譯時(shí)起作用。該文件描述代碼鏈接定位的有關(guān)信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對整個(gè)系統(tǒng)的代碼做正確的定位。在SDRAM中調(diào)試程序、在FLASH中調(diào)試或固化后運(yùn)行的鏈接腳本文件應(yīng)加以區(qū)分。(在IDE開發(fā)環(huán)境中使用擴(kuò)展名*.ld)

          (2)命令腳本文件:在SDRAM中調(diào)試程序時(shí)起作用。在集成環(huán)境與目標(biāo)連接時(shí)、軟件調(diào)試過程中以及目標(biāo)板復(fù)位后,有時(shí)需要集成環(huán)境自動(dòng)完成一些特定的操作,比如復(fù)位目標(biāo)板、清除看門狗、屏蔽寄存器、存儲(chǔ)區(qū)映射等。這些操作可以通過執(zhí)行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發(fā)環(huán)境中使用擴(kuò)展名*.cs)。

          (3)存儲(chǔ)區(qū)映像文件:在SDRAM中調(diào)試程序時(shí)起作用。在軟件調(diào)試過程中訪問非法存儲(chǔ)區(qū)在部分處理器和目標(biāo)板上會(huì)產(chǎn)生異常,如果異常沒有處理,則會(huì)導(dǎo)致軟件調(diào)試過程無法繼續(xù),為了防止以上問題并調(diào)整仿真器訪問速度以達(dá)到最合適的水平,提供這樣一種用于描述各個(gè)存儲(chǔ)區(qū)性質(zhì)的文件叫存儲(chǔ)區(qū)映像文件(在IDE開發(fā)環(huán)境中使用擴(kuò)展名*.map)。

          在程序的調(diào)試過程中可以選擇使用存儲(chǔ)區(qū)映像文件*.map和命令腳本文件*. cs配合程序的調(diào)試。

          (4) 啟動(dòng)文件:它主要是完成一些和硬件相關(guān)的初始化的工作,為應(yīng)用程序做準(zhǔn)備。一般,啟動(dòng)代碼的第一步是設(shè)置和異常向量;第二步是完成系統(tǒng)啟動(dòng)所必須的寄存器配置;第三步設(shè)置看門狗及用戶設(shè)計(jì)的部分外圍電路;第四步是配置系統(tǒng)所使用的存儲(chǔ)區(qū)分配地址空間; 第五步是變量初始化;第六步是為處理器的每個(gè)工作模式設(shè)置棧指針;最后一步是進(jìn)入高級語言入口函數(shù)(Main函數(shù))。

        2 程序設(shè)計(jì)

          中斷調(diào)試方面可以采用類似矢量中斷動(dòng)態(tài)處理方式,讓中斷對應(yīng)的確定地址代碼調(diào)轉(zhuǎn)到RAM的固定地址處,定義一個(gè)函數(shù)指針指向該固定地址,就可以隨時(shí)通過替換RAM固定地址處的代碼,實(shí)現(xiàn)動(dòng)態(tài)改變中斷處理函數(shù)。

          具體是:

          (1)將中斷源函數(shù)指針定義在RAM中相對的固定地址,建立中斷矢量表;

          void SetInterrupt (U32 vector, void (*handler)())

          {

          InterruptHandlers[vector] = handler;

          }

          (2)在程序中,調(diào)用具體某中斷源的中斷處理函數(shù);

          如: SetInterrupt(IIC_INT,IICWriteIsr);

          /* 聲明IIC中斷處理函數(shù),其中IIC_INT為 IIC中斷源序號,IICWriteIsr為 IIC的寫中斷處理函數(shù) */

          (3)在0x18處的IRQ或0x1C處的FIQ中斷入口函數(shù)中,獲取中斷源、清除中斷掛起標(biāo)志、通過已定義的中斷源函數(shù)指針進(jìn)入用戶具體某中斷處理程序。

          void ISR_IrqHandler(void)

          {

          IntOffSet = (unsigned int)INTOFFSET;

          Clear_PendingBit(IntOffSet>>2) ;

          (*InterruptHandlers[IntOffSet>>2])();

          // 調(diào)用具體某中斷處理程序

          }

          采用動(dòng)態(tài)的中斷處理,在中斷源較多的情況下,中斷響應(yīng)時(shí)間和程序性能得到優(yōu)化。另外,在調(diào)試方面,此處理具有便于跟蹤調(diào)試的優(yōu)點(diǎn),并且根據(jù)需要,可以方便變換中斷處理函數(shù)。

        3 中斷調(diào)試

          軟件調(diào)試可以在SDRAM中或FLASH中進(jìn)行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調(diào)試應(yīng)在RAM中完成,但當(dāng)RAM空間小于FLASH程序空間,程序只能在FLASH運(yùn)行和調(diào)試時(shí),或者用戶希望了解程序在FLASH中實(shí)際運(yùn)行情況時(shí),就可以在FLASH中進(jìn)行程序調(diào)試。


        上一頁 1 2 下一頁

        關(guān)鍵詞: 簡介 方法 調(diào)試 中斷 ARM

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 阳泉市| 上饶县| 蒙自县| 大渡口区| 潞西市| 恩施市| 廊坊市| 鹤山市| 博客| 法库县| 嘉鱼县| 凭祥市| 亚东县| 类乌齐县| 丹凤县| 紫阳县| 中江县| 眉山市| 淄博市| 浦江县| 栾城县| 酒泉市| 雷山县| 安阳县| 屯门区| 会泽县| 诸城市| 民乐县| 遂溪县| 吕梁市| 湖南省| 清流县| 普兰县| 宁波市| 潮州市| 福海县| 鸡泽县| 成安县| 双鸭山市| 德化县| 彭泽县|