0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Arm中斷調(diào)試方法

454398 ? 來源:alpha007 ? 作者:alpha007 ? 2022-12-08 15:11 ? 次閱讀

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

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

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

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

(1) 鏈接腳本文件:在程序編譯時(shí)起作用。該文件描述代碼鏈接定位的有關(guān)信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對(duì)整個(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)入高級(jí)語言入口函數(shù)(Main 函數(shù))。

中斷程序設(shè)計(jì)

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

具體方法是:

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

void SetInterrupt (U32 vector, void (*handler)()){ InterruptHandlers[vector] = handler;}

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

如:SetInterrupt(IIC_INT,IICWriteIsr);

/* 聲明 IIC 中斷處理函數(shù),其中 IIC_INT 為 IIC 中斷源序號(hào),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ù)。

中斷調(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)試。

進(jìn)行中斷調(diào)試時(shí),應(yīng)注意中斷入口位于 SDRAM 中或 FLASH 中 0x18 或 0x1c 地址,鏈接腳本文件必須使整個(gè)系統(tǒng)的代碼正確定位于 0x0 起始處,但 SDRAM 或 FLASH 對(duì)應(yīng)的鏈接腳本文件及工程配置注意區(qū)別。

(1)程序在 SDRAM 中運(yùn)行

在 SDRAM 中調(diào)試,使用 SDRAM 對(duì)應(yīng)的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在 IDE 開發(fā)環(huán)境中使用擴(kuò)展名*.elf);調(diào)試。

下載程序前必須啟動(dòng)命令腳本文件完成前述的一些特定的操作,命令腳本文件的啟動(dòng)在連接仿真器時(shí)自動(dòng)進(jìn)行,其中存儲(chǔ)區(qū)映射應(yīng)與程序在 SDRAM 中運(yùn)行時(shí)相同,保證整個(gè)系統(tǒng)的代碼正確定位于 0x0 起始處。下載程序的起始地址也為 0x0,下載成功后便可進(jìn)行調(diào)試工作。

(2)程序在 FLASH 中運(yùn)行

在 FLASH 中調(diào)試,使用 FLASH 對(duì)應(yīng)的鏈接腳本文件。調(diào)試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉(zhuǎn)換(*.elf 轉(zhuǎn)換為*.bin);固化*.bin 程序;調(diào)試。

連接仿真器后不需要下載程序,存儲(chǔ)區(qū)映射由本身工程中啟動(dòng)文件運(yùn)行完成,不需要命令腳本文件。在本環(huán)境調(diào)試過程中,可以設(shè)置兩個(gè)硬件斷點(diǎn)。

(3)程序從 FLASH 中調(diào)到 SDRAM 中運(yùn)行

在某些應(yīng)用場合,強(qiáng)調(diào)程序運(yùn)行速度的情況下,希望程序在 SDRAM 中運(yùn)行,這樣就需要將 FLASH 中存儲(chǔ)的程序,在系統(tǒng)上電后搬運(yùn)到 SDRAM 某空間位置,然后自動(dòng)運(yùn)行。這種所謂的 Bootloader 技術(shù),在 DSP 系統(tǒng)中常被采用。

調(diào)試過程分兩步:

(a)首先將用戶程序在 SDRAM 中調(diào)試通過,然后將*.bin 文件固化到 FLASH 某一非 0 扇區(qū)地址空間;

(b) 將自己編寫的 Bootloader 搬運(yùn)程序調(diào)試通過并將 Bootloader.bin 文件固化到 FLASH 的 0 扇區(qū)地址空間,搬運(yùn)程序在系統(tǒng)上電后,將(a)中 FLASH 某一非 0 扇區(qū)地址空間存儲(chǔ)的程序,搬運(yùn)到在 SDRAM 調(diào)試中同樣的空間位置,實(shí)現(xiàn)程序在 SDRAM 中運(yùn)行的目的。

另外注意,因?yàn)橛脩魧?shí)際的程序中斷入口必須位于 FLASH 的 0x18 或 0x1c 地址,所以 Bootloader 搬運(yùn)程序還應(yīng)具有中斷入口的跳轉(zhuǎn)功能,即把 PC 指針由此轉(zhuǎn)向處于 SDRAM 空間的中斷程序入口表,就是整個(gè)用戶程序被搬運(yùn)到 SDRAM 的那一位置。

如:LDR PC, =HandleIRQ

// HandleIRQ 位于 SDRAM 空間中斷程序入口表

審核編輯黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5054

    文章

    18920

    瀏覽量

    301046
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    568

    瀏覽量

    33846
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為何嵌入式控制器首選ARMxy?深度解析

    嵌入式ARM控制器是一種基于ARM架構(gòu)的嵌入式系統(tǒng)控制器,廣泛應(yīng)用于各種嵌入式系統(tǒng)中,包括工業(yè)物聯(lián)網(wǎng)關(guān)、邊緣計(jì)算網(wǎng)關(guān)、智慧城市、智能設(shè)備、工
    的頭像 發(fā)表于 09-21 10:09 ?210次閱讀
    為何<b class='flag-5'>嵌入式</b>控制器首選ARMxy?深度解析

    ARM處理器的異常中斷響應(yīng)過程

    ARM處理器的異常中斷響應(yīng)是嵌入式系統(tǒng)設(shè)計(jì)中一個(gè)至關(guān)重要的環(huán)節(jié),它確保了系統(tǒng)在面對(duì)內(nèi)部或外部事件時(shí)能夠穩(wěn)定、可靠地運(yùn)行。
    的頭像 發(fā)表于 09-10 11:18 ?545次閱讀

    ARM MCU嵌入式開發(fā) | 基于國產(chǎn)GD32F10x芯片+嵌入的開始

    嵌人系統(tǒng)的分類方法是依照系統(tǒng)主控制芯片的復(fù)雜性進(jìn)行分類??梢苑譃樾?b class='flag-5'>嵌入式系統(tǒng)、中等規(guī)模嵌入式系統(tǒng)、復(fù)雜嵌入式系統(tǒng)。 認(rèn)識(shí)一下
    發(fā)表于 09-09 14:48

    嵌入式linux開發(fā)的基本步驟有哪些?

    之前,首先需要選擇合適的硬件平臺(tái)。硬件選擇需要考慮以下幾個(gè)方面: 1.1 處理器 嵌入式Linux開發(fā)需要一個(gè)處理器,常見的處理器有ARM、MIPS、PowerPC等。選擇處理器時(shí),需要考慮處理器的性能、功耗、成本等因素。 1.2 存儲(chǔ)器
    的頭像 發(fā)表于 09-02 09:11 ?292次閱讀

    【「ARM MCU嵌入式開發(fā) | 基于國產(chǎn)GD32F10x芯片」閱讀體驗(yàn)】+書籍整體概況

    一、導(dǎo)言 上周收到《ARM MCU嵌入式開發(fā) | 基于國產(chǎn)GD32F10x芯片》書籍,該紙質(zhì)書籍內(nèi)容可謂是面面俱到,由“清華大學(xué)出版社”出版,印刷第1版時(shí)間為2024年6月份,總共464千字
    發(fā)表于 08-25 22:48

    嵌入式系統(tǒng)怎么學(xué)?

    系統(tǒng)設(shè)計(jì)與調(diào)試:需要掌握嵌入式系統(tǒng)的設(shè)計(jì)方法調(diào)試技術(shù),包括硬件設(shè)計(jì)、軟件設(shè)計(jì)、電路調(diào)試等,以確保系統(tǒng)的穩(wěn)定性和可靠性。 隨著技術(shù)的不斷進(jìn)
    發(fā)表于 07-02 10:10

    如何提升嵌入式編程能力?

    :掌握嵌入式系統(tǒng)的基本原理,包括中斷、并發(fā)、實(shí)時(shí)操作、低功耗設(shè)計(jì)等。 3. 實(shí)踐編程:通過實(shí)際編寫和測(cè)試代碼來提高技能。從簡單的LED閃爍程序開始,逐步過渡到更復(fù)雜的項(xiàng)目,如定時(shí)器PWM應(yīng)用、串口、IIC
    發(fā)表于 06-21 10:01

    嵌入式片上系統(tǒng)和ARM哪個(gè)更好

    嵌入式片上系統(tǒng)和ARM各有其優(yōu)勢(shì),難以直接比較哪個(gè)更好,因?yàn)樗鼈冊(cè)诓煌膽?yīng)用場景和需求下都有各自的價(jià)值。
    的頭像 發(fā)表于 03-28 15:14 ?447次閱讀

    嵌入式軟件開發(fā)應(yīng)該掌握哪些知識(shí)?

    知識(shí)點(diǎn)學(xué)習(xí) 熟悉 Linux 的基本使用對(duì)于嵌入式軟件開發(fā)至關(guān)重要。包括文件系統(tǒng)的管理、用戶權(quán)限的控制、軟件包管理等。嵌入式開發(fā)人員需要能夠在 Linux 環(huán)境下進(jìn)行開發(fā)、調(diào)試和部署工作。因此我們需要
    發(fā)表于 02-19 11:23

    智能集成:整合模擬元件和ARM微控制器內(nèi)核,解決棘手嵌入式系統(tǒng)問題

    智能集成:整合模擬元件和ARM微控制器內(nèi)核,解決棘手嵌入式系統(tǒng)問題
    的頭像 發(fā)表于 01-05 18:18 ?621次閱讀
    智能集成:整合模擬元件和<b class='flag-5'>ARM</b>微控制器內(nèi)核,解決棘手<b class='flag-5'>嵌入式</b>系統(tǒng)問題

    什么是嵌入式系統(tǒng)?嵌入式系統(tǒng)的具體應(yīng)用

    嵌入式,一般是指嵌入式系統(tǒng)。用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置。
    的頭像 發(fā)表于 12-20 13:33 ?2285次閱讀

    IAR嵌入式解決方案發(fā)布全新版本

    軟件開發(fā)領(lǐng)域?qū)崿F(xiàn)了顯著進(jìn)展,引入了一系列增強(qiáng)功能,例如在Linux上進(jìn)行先進(jìn)的云調(diào)試和仿真。這次更新還包括Arm虛擬硬件(AVH)的集成和針對(duì)Linux的增強(qiáng)的IAR C-SPY調(diào)試器和模擬器,進(jìn)一步彰顯了我們?yōu)闈M足
    的頭像 發(fā)表于 12-08 15:17 ?731次閱讀

    基于嵌入式技術(shù)的網(wǎng)絡(luò)開票系統(tǒng)的設(shè)計(jì)方法

    電子發(fā)燒友網(wǎng)站提供《基于嵌入式技術(shù)的網(wǎng)絡(luò)開票系統(tǒng)的設(shè)計(jì)方法.pdf》資料免費(fèi)下載
    發(fā)表于 11-06 10:18 ?0次下載
    基于<b class='flag-5'>嵌入式</b>技術(shù)的網(wǎng)絡(luò)開票系統(tǒng)的設(shè)計(jì)<b class='flag-5'>方法</b>

    嵌入式程序基于源代碼仿真調(diào)試

    前面一課設(shè)計(jì)了51單片機(jī)最小系統(tǒng)電路,使用51單片機(jī)的I/O口控制發(fā)光二極管的狀態(tài),并裝載運(yùn)行了使用keil編寫的嵌入式程序。本次實(shí)驗(yàn)應(yīng)用proteus結(jié)合keil對(duì)嵌入式C程序進(jìn)行源代碼級(jí)調(diào)試
    的頭像 發(fā)表于 11-01 09:24 ?1052次閱讀
    <b class='flag-5'>嵌入式</b>程序基于源代碼仿真<b class='flag-5'>調(diào)試</b>

    ECT嵌入式交叉觸發(fā)的工作原理

    和可靠性。 CoreSight 是 ARM 的一個(gè)嵌入式調(diào)試和跟蹤平臺(tái),它提供了一套完整的工具鏈,用于開發(fā)和調(diào)試基于 ARM 處理器的系統(tǒng)。
    的頭像 發(fā)表于 10-30 15:15 ?473次閱讀