上期我們介紹了在IAR Embedded Workbench中程序連上仿真器調試時正常但是斷開仿真器單獨運行時不正常的情況。
在嵌入式軟件開發(fā)中,有時會遇到程序斷開仿真器單獨運行時正常,但是連上仿真器調試時不正常。本文主要介紹在IAR Embedded Workbench中程序斷開仿真器單獨運行時正常但是連上仿真器調試時不正常的情況。
程序仿真調試和單獨運行的區(qū)別
原因分析及對應策略
1. 程序連上仿真器調試時Flash loader及mac宏會設置對應的寄存器和程序開始運行是通過軟復位(Software Reset),而斷開仿真器單獨運行時需要程序設置對應的寄存器和程序開始運行是通過硬復位 (Hardware Reset)。由于程序斷開仿真器單獨運行時正常,連上仿真器調試的時候不需要像之前那樣不使用Flash loader,只需要在調試開始之前進行一次硬復位 (Hardware Reset)(硬復位讓程序在連上仿真器調試時的初始狀態(tài)與斷開仿真器單獨運行時硬復位之后的初始狀態(tài)時一致的)。
下面主要介紹如何在IAR Embedded Workbench中連上仿真器調試時進行硬復位 (Hardware Reset):
下載完成之后讓程序停在復位向量而不是main函數
在IAR Embedded Workbench工程選項Options > Debugger > Setup >Run to選項:默認情況下會選中Run to main,調試器下載完成之后,程序會停在main函數。如果不勾選Run to,調試器下載完成之后,程序會停在復位向量,這樣就可以從復位向量開始調試。
下載完成之后通過調試器進行Hardware Reset
如果對應的硬件仿真器支持Hardware Reset并且對應的硬件仿真器的nRESET引腳連接到MCU的復位引腳nRESET, 將Reset類型改成Hardware,然后Reset(模擬程序單獨運行時硬復位,并從復位向量開始調試)。
下載完成之后通過外部Reset進行Hardware Reset
如果對應的硬件仿真器不支持Hardware Reset或者并且對應的硬件仿真器的nRESET引腳沒有連接到MCU的復位引腳nRESET, 可以通過外部Reset對MCU進行Hardware Reset。但是外部Reset之后,程序需要停在復位向量,然后就可以通過調試器調試。 如果對應的MCU和硬件仿真器支持CORERESET選項 (Options > I-jet > Breakpoints > Catch exceptions > CORERESET),勾選CORERESET之后,調試時如果有外部Reset, 程序會停在復位向量。
注:Vector catch是arm支持的調試特性,更多信息請參考arm相關文檔。
如果對應的MCU或者硬件仿真器不支持CORERESET選項,則需要在復位向量打斷點,調試時如果有外部Reset, 程序會停在復位向量。
2. 如果Library low-level interface implementation是通過semihosting (Options > General Options > Library low-level interface implementation > Semihosted > Via semihosting)實現:
而semihosting又是通過SVC指令來實現(非Cortex-M的32位arm內核):
如果程序里面也使用了SVC,那么連上仿真器調試的時候程序會停在SVC Handler:
可以通過將Library low-level interface implementation 設置為None (Options > General Options > Library low-level interface implementation > None):
3. 為了提高系統的健壯性,越來越多的MCU內部集成了Watchdog, 可以讓MCU在軟件出錯的時候復位MCU。MCU內部Watchdog控制寄存器一般會有選項可以配置Watchdog在調試模式是否使能:
當Watchdog配置為調試模式不使能時,Watchdog在調試模式暫停時會停止,不會導致MCU復位。反之,當Watchdog配置為調試模式使能時,Watchdog在調試模式暫停時會繼續(xù)運行,從而可能會導致MCU復位(因為暫停的時候Watchdog得不到正常的刷新)。在單獨運行時,當軟件運行正常時,Watchdog會正常的刷新,所以不會復位。
將MCU內部Watchdog配置成在調試模式不使能,這樣在調試時,暫停的時候Watchdog會停止,不會復位MCU。
總結
本文主要介紹了在IAR Embedded Workbench中程序斷開仿真器單獨運行時正常但是連上仿真器調試時不正常的情況。通過分析可能的原因及對應的策略,可以解決斷開仿真器單獨運行時正常正常但是連上仿真器調試時不正常的問題。
審核編輯:劉清
-
寄存器
+關注
關注
31文章
5363瀏覽量
121010 -
仿真器
+關注
關注
14文章
1019瀏覽量
83895 -
IAR
+關注
關注
5文章
354瀏覽量
36753 -
調試器
+關注
關注
1文章
306瀏覽量
23814
原文標題:程序單獨運行正常但是仿真調試不正常
文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論