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

在zai整zheng個ge流liu程cheng中zhong,用yong戶hu首shou先xian需xu要yao建jian立li工gong程cheng並bing對dui工gong程cheng做zuo初chu步bu的de配pei置zhi,包bao括kuo配pei置zhi處chu理li器qi和he配pei置zhi調tiao試shi設she備bei。編bian輯ji工gong程cheng文wen件jian,包bao括kuo自zi己ji編bian寫xie的de彙hui編bian和heC語(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) 鏈接腳本文件:在zai程cheng序xu編bian譯yi時shi起qi作zuo用yong。該gai文wen件jian描miao述shu代dai碼ma鏈lian接jie定ding位wei的de有you關guan信xin息xi,包bao括kuo代dai碼ma段duan,數shu據ju段duan,地di址zhi段duan等deng,鏈lian接jie器qi必bi須xu使shi用yong該gai文wen件jian對dui整zheng個ge係xi統tong的de代dai碼ma做zuo正zheng確que的de定ding位wei。在zaiSDRAM中調試程序、在FLASH中調試或固化後運行的鏈接腳本文件應加以區分。(在IDE開發環境中使用擴展名*.ld)
(2)命令腳本文件:在SDRAM中調試程序時起作用。在集成環境與目標連接時、軟件調試過程中以及目標板複位後,有時需要集成環境自動完成一些特定的操作,比如複位目標板、清除看門狗、屏蔽中斷寄存器、存儲區映射等。這些操作可以通過執行一組命令序列來完成,保存一組命令序列的文本文件稱為命令腳本文件(在 IDE開發環境中使用擴展名*.cs)。
(3)存儲區映像文件:在SDRAM中zhong調tiao試shi程cheng序xu時shi起qi作zuo用yong。在zai軟ruan件jian調tiao試shi過guo程cheng中zhong訪fang問wen非fei法fa存cun儲chu區qu在zai部bu分fen處chu理li器qi和he目mu標biao板ban上shang會hui產chan生sheng異yi常chang,如ru果guo異yi常chang沒mei有you處chu理li,則ze會hui導dao致zhi軟ruan件jian調tiao試shi過guo程cheng無wu法fa繼ji續xu,為wei了le防fang止zhi以yi上shang問wen題ti並bing調tiao整zheng仿真器訪問速度以達到最合適的水平,提供這樣一種用於描述各個存儲區性質的文件叫存儲區映像文件(在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])();// 調用具體某中斷處理程序}
caiyongdongtaidezhongduanchulifangfa,zaizhongduanyuanjiaoduodeqingkuangxia,zhongduanxiangyingshijianhechengxuxingnengdedaoyouhua。lingwai,zaitiaoshifangmian,cichulifangfajuyoubianyugenzongtiaoshideyoudian,bingqiegenjuxuyao,keyifangbianbianhuanzhongduanchulihanshu。
中斷調試
軟件調試可以在SDRAM中或FLASH中進行。在SDRAM中,讀寫方便,訪問速度快。一般軟件調試應在RAM中完成,但當RAM空間小於FLASH程序空間,程序隻能在FLASH運行和調試時,或者用戶希望了解程序在FLASH中實際運行情況時,就可以在FLASH中進行程序調試。
進行中斷調試時,應注意中斷入口位於SDRAM中或FLASH中0x18或0x1c地址,鏈接腳本文件必須使整個係統的代碼正確定位於0x0起始處,但SDRAM或FLASH對應的鏈接腳本文件及工程配置注意區別。
(1)程序在SDRAM中運行
在SDRAM中調試,使用SDRAM對應的鏈接腳本文件。調試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;下載程序(在IDE開發環境中使用擴展名*.elf);調試。
下(xia)載(zai)程(cheng)序(xu)前(qian)必(bi)須(xu)啟(qi)動(dong)命(ming)令(ling)腳(jiao)本(ben)文(wen)件(jian)完(wan)成(cheng)前(qian)述(shu)的(de)一(yi)些(xie)特(te)定(ding)的(de)操(cao)作(zuo),命(ming)令(ling)腳(jiao)本(ben)文(wen)件(jian)的(de)啟(qi)動(dong)在(zai)連(lian)接(jie)仿(fang)真(zhen)器(qi)時(shi)自(zi)動(dong)進(jin)行(xing),其(qi)中(zhong)存(cun)儲(chu)區(qu)映(ying)射(she)應(ying)與(yu)程(cheng)序(xu)在(zai)SDRAM中運行時相同,保證整個係統的代碼正確定位於0x0起始處。下載程序的起始地址也為0x0,下載成功後便可進行調試工作。
(2)程序在FLASH中運行
在FLASH中調試,使用FLASH對應的鏈接腳本文件。調試過程需要以下幾步:編譯、鏈接工程;連接仿真器和電路板;程序格式轉換(*.elf轉換為*.bin);固化*.bin程序;調試。
lianjiefangzhenqihoubuxuyaoxiazaichengxu,cunchuquyingsheyoubenshengongchengzhongqidongwenjianyunxingwancheng,buxuyaominglingjiaobenwenjian。zaibenhuanjingtiaoshiguochengzhong,keyishezhilianggeyingjianduandian。
(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可編程電源,賦能高端裝備製造
技術文章更多>>
- 三星上演罕見對峙:工會集會討薪,股東隔街抗議
- 摩爾線程實現DeepSeek-V4“Day-0”支持,國產GPU適配再提速
- 築牢安全防線:智能駕駛邁向規模化應用的關鍵挑戰與破局之道
- GPT-Image 2:99%文字準確率,AI生圖告別“鬼畫符”
- 機器人馬拉鬆的勝負手:藏在主板角落裏的“時鍾戰爭”
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
NFC
NFC芯片
NOR
ntc熱敏電阻
OGS
OLED
OLED麵板
OmniVision
Omron
OnSemi
PI
PLC
Premier Farnell
Recom
RF
RF/微波IC
RFID
rfid
RF連接器
RF模塊
RS
Rubycon
SATA連接器
SD連接器
SII
SIM卡連接器
SMT設備
SMU
SOC
SPANSION

