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)())
void setinterrupt (u32 vector, void (*handler)()) (2)在程式中,呼叫具體某中斷源的中斷處理函式;
如: setinterrupt(iic_int,iicwriteisr);
/* 宣告iic中斷處理函式,其中iic_int為 iic中斷源序號,iicwriteisr為 iic的寫中斷處理函式 */
(3)在0x18處的irq或0x1c處的fiq中斷入口函式中,獲取中斷源、清除中斷掛起標誌、通過已定義的中斷源函式指標進入使用者具體某中斷處理程式。
void isr_irqhandler(void)
void isr_irqhandler(void)
採用動態的中斷處理方法,在中斷源較多的情況下,中斷響應時間和程式效能得到優化。另外,在除錯方面,此處理方法具有便於跟蹤除錯的優點,並且根據需要,可以方便變換中斷處理函式。
3 中斷除錯
軟體除錯可以在sdram中或flash中進行。在sdram中,讀寫方便,訪問速度快。一般軟體除錯應在ram中完成,但當ram空間小於flash程 序空間,程式只能在flash執行和除錯時,或者使用者希望了解程式在flash中實際運**況時,就可以在flash中進行程式除錯。
進行中斷除錯時,應注意中斷入口位於sdram中或flash中0x18或0x1c位址,鏈結指令碼檔案必須使整個系統的**正確定位於0x0起始處,但sdram或flash對應的鏈結指令碼檔案及工程配置注意區別。
(1)程式在sdram中執行
(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的那一位置。
如:ldr pc, =handleirq
// handleirq位於sdram空間中斷程式入口表
嵌入式軟體開發之我見
自己從事嵌入式系統開發有好多年了,在此想與大家分享我對於嵌入式開發的一點心得與體會。先大致說一說我的工作經歷。97年畢業後做了兩年的電氣與電子設計與開發,這一時期,我做過電路原理圖的設計和pcb板的設計。從99年開始,我進入了軟體行業。第一次做嵌入式開發是在2000年,在隨後的六年多的時間裡,我差不...
嵌入式軟體開發流程及中斷除錯方法
參照嵌入式軟體的開發流程。第一步 工程建立和配置。第二步 編輯原始檔。第三步 工程編譯和鏈結。第四步 軟體的除錯。第五步 執行檔案的固化。在整個流程中,使用者首先需要建立工程並對工程做初步的配置,包括配置處理器和配置除錯裝置。編輯工程檔案,包括自己編寫的彙編和c語言源程式,還有工程編譯時需要編寫的鏈...
嵌入式軟體開發流程及中斷除錯方法
參照嵌入式軟體的開發流程。第一步 工程建立和配置。第二步 編輯原始檔。第三步 工程編譯和鏈結。第四步 軟體的除錯。第五步 執行檔案的固化。在整個流程中,使用者首先需要建立工程並對工程做初步的配置,包括配置處理器和配置除錯裝置。編輯工程檔案,包括自己編寫的彙編和c語言源程式,還有工程編譯時需要編寫的鏈...