新聞中心

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

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

作者: 時(shí)間:2024-03-07 來源:STM32單片機(jī) 收藏

01 前言

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

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

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

02 實(shí)現(xiàn)方法

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

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

03 MDK

1. 新建一個(gè).ini 文件,在文件中寫入以下內(nèi)容:LOAD %L INCREMENTAL,并加載到Initialization File,同時(shí)取消 Load Application at Startup 的選項(xiàng)。

圖片

圖片

這個(gè)腳本的目的是加載編譯生成的.axf 文件到 MDK 中,該文件包含 bin 代碼和調(diào)試相關(guān)的各種符號(hào)信息,以定位我們的 C 源碼。 

關(guān)于其語法說明,可參考 MDK 的 uVision User’s Guide。

圖片

2. 去掉 Reset after Connect 選項(xiàng)

圖片

3. 去掉 Update Target before Debugging

圖片

4. 完成上述配置后,就可以在 MCU 不的情況下,像正常調(diào)試一樣加斷點(diǎn)調(diào)試了。

04 IAR

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

圖片

05 STM32CubeIDE

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

圖片

1. 配置 Debugger->Reset behaviour Type 為 None

圖片

2. 在 Debugger->Misc 中取消 Verify flash download 選項(xiàng)

圖片

3. 在 Startup->Load Image and Symbols 中編輯下載代碼時(shí)的操作方式。并取消Download 選項(xiàng)

圖片

圖片

4. 在 Debug 時(shí),用上述配置好的調(diào)試配置,即可同樣實(shí)現(xiàn)不復(fù)位的調(diào)試

圖片

06 總結(jié)

利用上述不復(fù)位 MCU 繼續(xù)調(diào)試的方法,能夠保全現(xiàn)場(chǎng)的運(yùn)行狀態(tài),重新接上即可對(duì)程序進(jìn)行斷點(diǎn)調(diào)試、單步執(zhí)行等操作。對(duì)查找 Bug,發(fā)現(xiàn)并定位問題點(diǎn),尤其對(duì)不易復(fù)現(xiàn)的偶發(fā)性故障十分有用。但是當(dāng) RDP Level≠0 時(shí),因?yàn)橐呀?jīng)開啟了讀保護(hù),所以無法通過上述方法調(diào)試



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

評(píng)論


相關(guān)推薦

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

關(guān)閉