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