新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 不復(fù)位調(diào)試的小技巧

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

作者: 時間:2024-03-07 來源:STM32單片機 收藏

01 前言

本文引用地址:http://www.2s4d.com/article/202403/456110.htm

在產(chǎn)品開發(fā)時,經(jīng)常會碰到在測試過程中或設(shè)備出廠后才發(fā)現(xiàn)程序異常,但當(dāng)重新對設(shè)備仿真調(diào)試時卻復(fù)現(xiàn)不出現(xiàn)場的問題,或者只能通過保存的日志信息艱難分析代碼運行到了何處而導(dǎo)致的異常。 

遇到這種場景,也并非無路可循。原則上只要我們通過調(diào)試時,做到代碼不被重新下載覆蓋, 不被,就可能保留當(dāng)前程序運行的狀態(tài),讓 Bug 無處藏身。

02 實現(xiàn)方法

首先,我們將編譯完成的工程燒錄到 ,保證 中所運行的代碼與要仿真的工程代碼一致,這樣從 MCU 獲取的程序位置才能與調(diào)試符號信息一致。 

不同的編譯器可以通過不同的方法進行設(shè)置,但其目的和最終能達到的效果是一致的。我們就對常用的 MDK、IAR、STM32CubeIDE 三種不同編譯器分別進行設(shè)置,使 MCU 在不的狀態(tài)下繼續(xù)調(diào)試。

03 MDK

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 不的情況下,像正常調(diào)試一樣加斷點調(diào)試了。

04 IAR

使用 IAR 時,無需額外設(shè)置,直接使用其自帶的功能“Attach to Running Target”即可實現(xiàn)。

圖片

05 STM32CubeIDE

在 STM32CubeIDE 中,配置比較靈活,可以復(fù)制一個 Debug 的配置,并在這個基礎(chǔ)上進行修改。

圖片

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)場的運行狀態(tài),重新接上即可對程序進行斷點調(diào)試、單步執(zhí)行等操作。對查找 Bug,發(fā)現(xiàn)并定位問題點,尤其對不易復(fù)現(xiàn)的偶發(fā)性故障十分有用。但是當(dāng) RDP Level≠0 時,因為已經(jīng)開啟了讀保護,所以無法通過上述方法調(diào)試



關(guān)鍵詞: MCU 復(fù)位 仿真器

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉