嵌入式軟件開發(fā)流程及ARM的中斷調(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空間中斷程序入口表.
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論