嵌入式技巧:深度理解三種中斷調試方法
發布時間: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)和(he)Cyuyanyuanchengxu,haiyougongchengbianyishixuyaobianxiedelianjiejiaobenwenjian,tiaoshiguochengzhongxuyaobianxiecunchuquyingxiangwenjianheminglingjiaobenwenjian,yijishangdianfuweishidechengxuyunxingrukoudeqidongchengxuwenjian。
對後四種文件的理解很重要,其作用解釋如下。
(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])();// 調用具體某中斷處理程序}
采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);調試。
下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在zaiSDRAM中運行時相同,保證整個係統的代碼正確定位於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可編程電源,賦能高端裝備製造
技術文章更多>>
- 貿澤EIT係列新一期,探索AI如何重塑日常科技與用戶體驗
- 算力爆發遇上電源革新,大聯大世平集團攜手晶豐明源線上研討會解鎖應用落地
- 創新不止,創芯不已:第六屆ICDIA創芯展8月南京盛大啟幕!
- AI時代,為什麼存儲基礎設施的可靠性決定數據中心的經濟效益
- 矽典微ONELAB開發係列:為毫米波算法開發者打造的全棧工具鏈
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
微波功率管
微波開關
微波連接器
微波器件
微波三極管
微波振蕩器
微電機
微調電容
微動開關
微蜂窩
位置傳感器
溫度保險絲
溫度傳感器
溫控開關
溫控可控矽
聞泰
穩壓電源
穩壓二極管
穩壓管
無焊端子
無線充電
無線監控
無源濾波器
五金工具
物聯網
顯示模塊
顯微鏡結構
線圈
線繞電位器
線繞電阻



