嵌入式技巧:深度理解三種中斷調試方法
發布時間:2016-09-27 責任編輯:susan
【導讀】參照嵌入式軟件的開發流程。第一步:工程建立和配置。第二步:編輯源文件。第三步:工程編譯和鏈接。第四步:軟件的調試。第五步:執行文件的固化。

zaizhenggeliuchengzhong,yonghushouxianxuyaojianligongchengbingduigongchengzuochubudepeizhi,baokuopeizhichuliqihepeizhitiaoshishebei。bianjigongchengwenjian,baokuozijibianxiedehuibianheC語(yu)言(yan)源(yuan)程(cheng)序(xu),還(hai)有(you)工(gong)程(cheng)編(bian)譯(yi)時(shi)需(xu)要(yao)編(bian)寫(xie)的(de)鏈(lian)接(jie)腳(jiao)本(ben)文(wen)件(jian),調(tiao)試(shi)過(guo)程(cheng)中(zhong)需(xu)要(yao)編(bian)寫(xie)存(cun)儲(chu)區(qu)映(ying)像(xiang)文(wen)件(jian)和(he)命(ming)令(ling)腳(jiao)本(ben)文(wen)件(jian),以(yi)及(ji)上(shang)電(dian)複(fu)位(wei)時(shi)的(de)程(cheng)序(xu)運(yun)行(xing)入(ru)口(kou)的(de)啟(qi)動(dong)程(cheng)序(xu)文(wen)件(jian)。
對後四種文件的理解很重要,其作用解釋如下。
(1) 鏈接腳本文件:zaichengxubianyishiqizuoyong。gaiwenjianmiaoshudaimalianjiedingweideyouguanxinxi,baokuodaimaduan,shujuduan,dizhiduandeng,lianjieqibixushiyonggaiwenjianduizhenggexitongdedaimazuozhengquededingwei。zaiSDRAM中調試程序、在FLASH中調試或固化後運行的鏈接腳本文件應加以區分。(在IDE開發環境中使用擴展名*.ld)
(2)命令腳本文件:在SDRAM中調試程序時起作用。在集成環境與目標連接時、軟件調試過程中以及目標板複位後,有時需要集成環境自動完成一些特定的操作,比如複位目標板、清除看門狗、屏蔽中斷寄存器、存儲區映射等。這些操作可以通過執行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發環境中使用擴展名*.cs)。
(3)存儲區映像文件:在SDRAMzhongtiaoshichengxushiqizuoyong。zairuanjiantiaoshiguochengzhongfangwenfeifacunchuquzaibufenchuliqihemubiaobanshanghuichanshengyichang,ruguoyichangmeiyouchuli,zehuidaozhiruanjiantiaoshiguochengwufajixu,weilefangzhiyishangwentibingtiaozheng仿真器訪問速度以達到最合適的水平,提供這樣一種用於描述各個存儲區性質的文件叫存儲區映像文件(在IDE開發環境中使用擴展名*.map)。
在程序的調試過程中可以選擇使用存儲區映像文件*.map和命令腳本文件*. cs配合程序的調試。
(4) 啟動文件:它主要是完成一些和硬件相關的初始化的工作,為應用程序做準備。一般,啟動代碼的第一步是設置中斷和異常向量;第二步是完成係統啟動所必須的寄存器配置;第三步設置看門狗及用戶設計的部分外圍電路;第四步是配置係統所使用的存儲區分配地址空間; 第五步是變量初始化;第六步是為處理器的每個工作模式設置棧指針;最後一步是進入高級語言入口函數(Main函數)。
中斷程序設計
中斷調試方麵可以采用類似矢量中斷動態處理方式,讓中斷對應的確定地址代碼調轉到RAM的固定地址處,定義一個函數指針指向該固定地址,就可以隨時通過替換RAM固定地址處的代碼,實現動態改變中斷處理函數。
具體方法是:
(1)將中斷源函數指針定義在RAM中相對的固定地址,建立中斷矢量表;
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])();// 調用具體某中斷處理程序}
采(cai)用(yong)動(dong)態(tai)的(de)中(zhong)斷(duan)處(chu)理(li)方(fang)法(fa),在(zai)中(zhong)斷(duan)源(yuan)較(jiao)多(duo)的(de)情(qing)況(kuang)下(xia),中(zhong)斷(duan)響(xiang)應(ying)時(shi)間(jian)和(he)程(cheng)序(xu)性(xing)能(neng)得(de)到(dao)優(you)化(hua)。另(ling)外(wai),在(zai)調(tiao)試(shi)方(fang)麵(mian),此(ci)處(chu)理(li)方(fang)法(fa)具(ju)有(you)便(bian)於(yu)跟(gen)蹤(zong)調(tiao)試(shi)的(de)優(you)點(dian),並(bing)且(qie)根(gen)據(ju)需(xu)要(yao),可(ke)以(yi)方(fang)便(bian)變(bian)換(huan)中(zhong)斷(duan)處(chu)理(li)函(han)數(shu)。
中斷調試
軟件調試可以在SDRAM中或FLASH中進行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調試應在RAM中完成,但當RAM空間小於FLASH程序空間,程序隻能在FLASH運行和調試時,或者用戶希望了解程序在FLASH中實際運行情況時,就可以在FLASH中進行程序調試。
進行中斷調試時,應注意中斷入口位於SDRAM中或FLASH中0x18或0x1c地址,鏈接腳本文件必須使整個係統的代碼正確定位於0x0起始處,但SDRAM或FLASH對應的鏈接腳本文件及工程配置注意區別。
(1)程序在SDRAM中運行
在SDRAM中調試,使用SDRAM對應的鏈接腳本文件。調試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在IDE開發環境中使用擴展名*.elf);調試。
xiazaichengxuqianbixuqidongminglingjiaobenwenjianwanchengqianshudeyixietedingdecaozuo,minglingjiaobenwenjiandeqidongzailianjiefangzhenqishizidongjinxing,qizhongcunchuquyingsheyingyuchengxuzaiSDRAM中運行時相同,保證整個係統的代碼正確定位於0x0起始處。下載程序的起始地址也為0x0,下載成功後便可進行調試工作。
(2)程序在FLASH中運行
在FLASH中調試,使用FLASH對應的鏈接腳本文件。調試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉換(*.elf轉換為*.bin);固化*.bin程序;調試。
連(lian)接(jie)仿(fang)真(zhen)器(qi)後(hou)不(bu)需(xu)要(yao)下(xia)載(zai)程(cheng)序(xu),存(cun)儲(chu)區(qu)映(ying)射(she)由(you)本(ben)身(shen)工(gong)程(cheng)中(zhong)啟(qi)動(dong)文(wen)件(jian)運(yun)行(xing)完(wan)成(cheng),不(bu)需(xu)要(yao)命(ming)令(ling)腳(jiao)本(ben)文(wen)件(jian)。在(zai)本(ben)環(huan)境(jing)調(tiao)試(shi)過(guo)程(cheng)中(zhong),可(ke)以(yi)設(she)置(zhi)兩(liang)個(ge)硬(ying)件(jian)斷(duan)點(dian)。
(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空間中斷程序入口表
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 算力爆發遇上電源革新,大聯大世平集團攜手晶豐明源線上研討會解鎖應用落地
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
微波功率管
微波開關
微波連接器
微波器件
微波三極管
微波振蕩器
微電機
微調電容
微動開關
微蜂窩
位置傳感器
溫度保險絲
溫度傳感器
溫控開關
溫控可控矽
聞泰
穩壓電源
穩壓二極管
穩壓管
無焊端子
無線充電
無線監控
無源濾波器
五金工具
物聯網
顯示模塊
顯微鏡結構
線圈
線繞電位器
線繞電阻



