01前言
在產(chǎn)品開發(fā)時,經(jīng)常會碰到在測試過程中或設(shè)備出廠后才發(fā)現(xiàn)程序異常,但當(dāng)重新對設(shè)備仿真調(diào)試時卻復(fù)現(xiàn)不出現(xiàn)場的問題,或者只通過保存的日志信息艱難分析代碼運(yùn)行到了何處而導(dǎo)致的異常。
遇到這種場景,也并非無路可循。原則上只要我們通過仿真器調(diào)試時,做到代碼不被重新下載覆蓋,MCU 不被復(fù)位,就可能保留當(dāng)前程序運(yùn)行的狀態(tài),讓 Bug 無處藏身。
02實現(xiàn)方法
首先,我們將編譯完成的工程燒錄到 MCU,保證 MCU 中所運(yùn)行的代碼與要仿真的工程代碼一致,這樣從 MCU 獲取的程序位置才能與調(diào)試符號信息一致。
不同的編譯器可以通過不同的方法進(jìn)行設(shè)置,但其目的和最終能達(dá)到的效果是一致的。我們就對常用的 MDK、IAR、STM32CubeIDE 三種不同編譯器分別進(jìn)行設(shè)置,使 MCU 在不復(fù)位的狀態(tài)下繼續(xù)調(diào)試。
03MDK
1. 新建一個.ini 文件,在文件中寫入以下內(nèi)容:LOAD %L INCREMENTAL,并加載到Initialization File,同時取消 Load Application at Startup 的選項。
這個腳本的目的是加載編譯生成的.axf 文件到 MDK 中,該文件包含 bin 代碼和調(diào)試相關(guān)的各種符號信息,以定位我們的 C 源碼。
關(guān)于其語法說明,可參考 MDK 的 uVision User’s Guide。
2. 去掉 Reset after Connect 選項
3. 去掉 Update Target before Debugging
4. 完成上述配置后,就可以在 MCU 不復(fù)位的情況下,像正常調(diào)試一樣加斷點調(diào)試了。
04IAR
使用 IAR 時,無需額外設(shè)置,直接使用其自帶的功能“Attach to Running Target”即可實現(xiàn)。
05STM32CubeIDE
在 STM32CubeIDE 中,配置比較靈活,可以復(fù)制一個 Debug 的配置,并在這個基礎(chǔ)上進(jìn)行修改。
1. 配置 Debugger->Reset behaviour Type 為 None
2. 在 Debugger->Misc 中取消 Verify flash download 選項
3. 在 Startup->Load Image and Symbols 中編輯下載代碼時的操做方式。并取消Download 選項
4. 在 Debug 時,用上述配置完的調(diào)試配置,即可同樣實現(xiàn)不復(fù)位的調(diào)試
06總結(jié)
利用上述不復(fù)位 MCU 繼續(xù)調(diào)試的方法,能夠保全現(xiàn)場的運(yùn)行狀態(tài),重新接上仿真器即可對程序進(jìn)行斷點調(diào)試、單步執(zhí)行等操作。對查找 Bug,發(fā)現(xiàn)并定位問題點,尤其對不易復(fù)現(xiàn)的偶發(fā)性故障十分有用。但是當(dāng) RDP Level≠0 時,因為已經(jīng)開啟了讀保護(hù),所以無法通過上述方法調(diào)試。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17751瀏覽量
358812 -
調(diào)試
+關(guān)注
關(guān)注
7文章
603瀏覽量
34451 -
編譯器
+關(guān)注
關(guān)注
1文章
1653瀏覽量
49771 -
燒錄
+關(guān)注
關(guān)注
8文章
282瀏覽量
36107
原文標(biāo)題:實戰(zhàn)經(jīng)驗 | 調(diào)試小技巧之不復(fù)位調(diào)試
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問stm8l101p3u為什么進(jìn)入halt之后看門狗不復(fù)位?
cc2650 OAD結(jié)束后不復(fù)位,為什么?
請問28033有可能出現(xiàn)死機(jī)但是不復(fù)位的情況嗎?
IDE設(shè)置步驟有哪些
IAR調(diào)試中不同復(fù)位類型的介紹
IAR退出調(diào)試時如何讓MCU繼續(xù)運(yùn)行?
哪些因素會導(dǎo)致MCU復(fù)位
華大MCU如何實現(xiàn)軟件復(fù)位
KEIL/MDK中使用JLINK調(diào)試器掛載正在運(yùn)行中的MCU

初始化mcu程序選用32k_MCU有多少種復(fù)位因素

不復(fù)位MCU直接調(diào)試運(yùn)行程序
如何排查GD32 MCU復(fù)位是由哪個復(fù)位源導(dǎo)致的?

MCU不復(fù)位調(diào)試的小技巧

MCU復(fù)位RAM會保持嗎,如何實現(xiàn)復(fù)位時變量數(shù)據(jù)保持

評論