嵌入式技巧 ARM的三種中斷除錯方法介紹

2021-05-25 22:43:05 字數 2983 閱讀 4842

**亞嵌技術文件:

1 嵌入式

軟體開發流程

在整個流程中,使用者首先需要建立工程並對工程做初步的配置,包括配置處理器和配置除錯裝置。編輯工程檔案,包括自己編寫的彙編和c語言源程式,還有工程編譯時需要編寫的鏈結指令碼檔案,除錯過程中需要編寫儲存區映像檔案和命令指令碼檔案,以及上電復位時的程式執行入口的啟動程式檔案。

對後四種檔案的理解很重要,其作用解釋如下:

(1) 鏈結指令碼檔案:在程式編譯時起作用。該檔案描述**鏈結定位的有關資訊,包括**段,資料段,位址段等,鏈結器必須使用該檔案對整個系統的**做正確的定位。在sdram中除錯程式、在flash中除錯或固化後執行的鏈結指令碼檔案應加以區分。(在ide開發環境中使用副檔名*.ld)

(2)命令指令碼檔案:在sdram中除錯程式時起作用。在整合環境與目標連線時、軟體除錯過程中以及目標板復位後,有時需要整合環境自動完成一些特定的操作,比如復位目標板、清除看門狗、遮蔽中斷暫存器、儲存區對映等。這些操作可以通過執行一組命令序列來完成,儲存一組命令序列的文字檔案稱為命令指令碼檔案(在 ide開發環境中使用副檔名*.cs)。

(3)儲存區映像檔案:在sdram中除錯程式時起作用。在軟體除錯過程中訪問非法儲存區在部分處理器和目標板上會產生異常,如果異常沒有處理,則會導致軟體除錯過程無法繼續,為了防止以上問題並調整**器訪問速度以達到最合適的水平,提供這樣一種用於描述各個儲存區性質的檔案叫儲存區映像檔案(在ide開發環境中使用副檔名*.map)。

在程式的除錯過程中可以選擇使用儲存區映像檔案*.map和命令指令碼檔案*. cs配合程式的除錯。

(4) 啟動檔案:它主要是完成一些和硬體相關的初始化的工作,為應用程式做準備。一般,啟動**的第一步是設定中斷和異常向量;第二步是完成系統啟動所必須的暫存器配置;第三步設定看門狗及使用者設計的部分外圍電路;第四步是配置系統所使用的儲存區分配位址空間; 第五步是變數初始化;第六步是為處理器的每個工作模式設定棧指標;最後一步是進入高階

語言入口函式(main函式)。

2 中斷程式設計

中斷除錯方面可以採用類似向量中斷動態處理方式,讓中斷對應的確定位址**調轉到ram的固定位址處,定義乙個函式指標指向該固定位址,就可以隨時通過替換ram固定位址處的**,實現動態改變中斷處理函式。

具體方法是:

(1)將中斷源函式指標定義在ram中相對的固定位址,建立中斷向量表;

void setinterrupt (u32 vector, void (*handler)())

interrupthandlers[vector] = handler;

void setinterrupt (u32 vector, void (*handler)())

interrupthandlers[vector] = handler;

(2)在程式中,呼叫具體某中斷源的中斷處理函式;

如: setinterrupt(iic_int,iicwriteisr);

/* 宣告iic中斷處理函式,其中iic_int為 iic中斷源序號,iicwriteisr為 iic的寫中斷處理函式 */

(3)在0x18處的irq或0x1c處的fiq中斷入口函式中,獲取中斷源、清除中斷掛起標誌、通過已定義的中斷源函式指標進入使用者具體某中斷處理程式。

void isr_irqhandler(void)

intoffset = (unsigned int)intoffset;

clear_pendingbit(intoffset>>2) ;

(*interrupthandlers[intoffset>>2])();

// 呼叫具體某中斷處理程式

void isr_irqhandler(void)

intoffset = (unsigned int)intoffset;

clear_pendingbit(intoffset>>2) ;

(*interrupthandlers[intoffset>>2])();

// 呼叫具體某中斷處理程式

採用動態的中斷處理方法,在中斷源較多的情況下,中斷響應時間和程式效能得到優化。另外,在除錯方面,此處理方法具有便於跟蹤除錯的優點,並且根據需要,可以方便變換中斷處理函式。

3 中斷除錯

軟體除錯可以在sdram中或flash中進行。在sdram中,讀寫方便,訪問速度快。一般軟體除錯應在ram中完成,但當ram空間小於flash程式空間,程式只能在flash執行和除錯時,或者使用者希望了解程式在flash中實際運**況時,就可以在flash中進行程式除錯。

進行中斷除錯時,應注意中斷入口位於sdram中或flash中0x18或0x1c位址,鏈結指令碼檔案必須使整個系統的**正確定位於0x0起始處,但sdram或flash對應的鏈結指令碼檔案及工程配置注意區別。

(1)程式在sdram中執行

程式(在ide開發環境中使用副檔名*.elf);除錯。

(2)程式在flash中執行

(3)程式從flash中調到sdram中執行

在某些應用場合,強調程式執行速度的情況下,希望程式在sdram中執行,這樣就需要將flash中儲存的程式,在系統上電後搬運到sdram某空間位置,然後自動執行。這種所謂的bootloader技術,在dsp系統中常被採用。

除錯過程分兩步:

(a)首先將使用者程式在sdram中除錯通過,然後將*.bin檔案固化到flash某一非0扇區位址空間;

(b) 將自己編寫的bootloader搬運程式除錯通過並將bootloader.bin檔案固化到flash的 0扇區位址空間,搬運程式在系統上電後,將(a)中flash某一非0扇區位址空間儲存的程式,搬運到在sdram除錯中同樣的空間位置,實現程式在sdram中執行的目的。

另外注意,因為使用者實際的程式中斷入口必須位於flash的0x18或0x1c位址,所以bootloader搬運程式還應具有中斷入口的跳轉功能,即把pc指標由此轉向處於sdram空間的中斷程式入口表,就是整個使用者程式被搬運到sdram的那一位置。

ARM的三種中斷除錯方法介紹

1 嵌入式軟體開發流程 參照嵌入式軟體的開發流程。第一步 工程建立和配置。第二步 編輯原始檔。第三步 工程編譯和鏈結。第四步 軟體的除錯。第五步 執行檔案的固化。在整個流程中,使用者首先需要建立工程並對工程做初步的配置,包括配置處理器和配置除錯裝置。編輯工程檔案,包括自己編寫的彙編和c語言源程式,還...

嵌入式linux除錯技巧

1 列印往往是最常用的除錯技巧。除錯核心和驅動都可以採用printk。在kernel.h include linux 中定義了log的等級。未指定日誌級別的 printk 採用的預設級別是 default message loglevel,這個巨集在kernel printk.c 中被定義為整數 4...

三種嵌入式硬體趨勢

據資料調查顯示,嵌入式應用程式的增長速度超過了電氣工程師的可用性,預計到2026年每年僅增長7 相比之下,軟體工程師預計到2026年將增長24 這為進一步加速三種增長趨勢創造了條件 一 以前,尋找現成板的客戶已經決定了用於他們系統的特定處理器,或者至少是哪個品牌。這使他們只可能尋找並評估圍繞該晶元提...