<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

不復位MCU繼續調試的方法

STM32單片機 ? 來源:STM32單片機 ? 2024-01-26 09:25 ? 次閱讀

01前言

產品開發時,經常會碰到在測試過程中或設備出廠后才發現程序異常,但當重新對設備仿真調試時卻復現不出現場的問題,或者只通過保存的日志信息艱難分析代碼運行到了何處而導致的異常。

遇到這種場景,也并非無路可循。原則上只要我們通過仿真器調試時,做到代碼不被重新下載覆蓋,MCU 不被復位,就可能保留當前程序運行的狀態,讓 Bug 無處藏身。

02實現方法

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

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

03MDK

1. 新建一個.ini 文件,在文件中寫入以下內容:LOAD %L INCREMENTAL,并加載到Initialization File,同時取消 Load Application at Startup 的選項。

8bd718d0-bb67-11ee-8b88-92fbcf53809c.jpg

8bec1ce4-bb67-11ee-8b88-92fbcf53809c.jpg

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

關于其語法說明,可參考 MDK 的 uVision User’s Guide。

8bf3991a-bb67-11ee-8b88-92fbcf53809c.jpg

2. 去掉 Reset after Connect 選項

8bfee34c-bb67-11ee-8b88-92fbcf53809c.jpg

3. 去掉 Update Target before Debugging

8c0a0902-bb67-11ee-8b88-92fbcf53809c.jpg

4. 完成上述配置后,就可以在 MCU 不復位的情況下,像正常調試一樣加斷點調試了。

04IAR

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

8c1d226c-bb67-11ee-8b88-92fbcf53809c.jpg

05STM32CubeIDE

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

8c302984-bb67-11ee-8b88-92fbcf53809c.jpg

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

8c3b3130-bb67-11ee-8b88-92fbcf53809c.jpg

2. 在 Debugger->Misc 中取消 Verify flash download 選項

8c4ff7aa-bb67-11ee-8b88-92fbcf53809c.jpg

3. 在 Startup->Load Image and Symbols 中編輯下載代碼時的操做方式。并取消Download 選項

8c5ab96a-bb67-11ee-8b88-92fbcf53809c.jpg

8c6e6ae6-bb67-11ee-8b88-92fbcf53809c.jpg

4. 在 Debug 時,用上述配置完的調試配置,即可同樣實現不復位的調試

8c7ec260-bb67-11ee-8b88-92fbcf53809c.jpg

06總結

利用上述不復位 MCU 繼續調試的方法,能夠保全現場的運行狀態,重新接上仿真器即可對程序進行斷點調試、單步執行等操作。對查找 Bug,發現并定位問題點,尤其對不易復現的偶發性故障十分有用。但是當 RDP Level≠0 時,因為已經開啟了讀保護,所以無法通過上述方法調試。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16130

    瀏覽量

    344854
  • 調試
    +關注

    關注

    7

    文章

    529

    瀏覽量

    33654
  • 編譯器
    +關注

    關注

    1

    文章

    1585

    瀏覽量

    48746
  • 燒錄
    +關注

    關注

    8

    文章

    229

    瀏覽量

    35245

原文標題:實戰經驗 | 調試小技巧之不復位調試

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    S32K1XX系列MCU復位問題的解決方法

    最近有朋友調試S32K1XX系列的一塊控制板,遇到了一個奇怪的問題,就是板子不斷復位,無法連接下載器,而且問題找不到,于是我協助他調試了一下,然后最后發現竟然是芯片內部的復位導致的,而
    發表于 08-23 13:03 ?1343次閱讀
    S32K1XX系列<b class='flag-5'>MCU</b><b class='flag-5'>復位</b>問題的解決<b class='flag-5'>方法</b>

    請問stm8l101p3u為什么進入halt之后看門狗不復位?

    在網上查了半天,很多人都是說halt之后不想讓看門狗運行卻停不下來,為什么到了我這我想halt之后看門狗繼續運行它反而不復位了呢?? 看門狗的代碼 RST_ClearFlag
    發表于 05-13 07:01

    cc2650 OAD結束后不復位,為什么?

    Device Monitor的OAD功能,看上去可以向cc2650傳輸OADbin.bin,但OAD結束后,cc2650不復位;3.在1基礎上,調試OADTarget工程的CC2640App
    發表于 03-28 16:17

    請問28033有可能出現死機但是不復位的情況嗎?

    鄙人做的是開關電源,在最惡劣工況加載時,DSP什么反應都沒有,也不復位,系統成了一塊磚,我之前的類似工況,DSP都是***擾的復位的,這次怎么不復位也不工作呢?有達人指點一下嗎?
    發表于 10-08 16:55

    IDE設置步驟有哪些

    使用場景:當MCU運行時出現Bug,但沒有在線調試;此時可以使用該方法,在不復位的情形下捕捉代碼當前運行到的位置,繼續在線
    發表于 11-01 07:09

    FS6500 MCU復位后有什么方法可以修復SBC復位?

    我正在使用 SBC FS6500 芯片。目前,SBC 會在 MCU復位后發生復位(軟復位:表示 SBC 無法關閉電源,因為 SBC 為 MCU
    發表于 03-29 06:24

    IAR調試中不同復位類型的介紹

    IAR調試中不同復位類型的介紹在IAR 環境下調試有不同的復位類型,其中一些只復位內核不復位
    發表于 10-19 07:54

    IAR退出調試時如何讓MCU繼續運行?

    RT,每次退出調試要給板子重新上電MCU才運行,如何在退出時繼續運行?
    發表于 10-20 06:53

    哪些因素會導致MCU復位

    調試MCU時,經常會遇到復位的情況。要找到復位的原因,我們就需要了解到有哪些因素會導致MCU復位
    的頭像 發表于 11-10 16:32 ?9277次閱讀
    哪些因素會導致<b class='flag-5'>MCU</b><b class='flag-5'>復位</b>

    KEIL/MDK中使用JLINK調試器掛載正在運行中的MCU

    使用場景:當MCU運行時出現Bug,但沒有在線調試;此時可以使用該方法,在不復位的情形下捕捉代碼當前運行到的位置,繼續在線
    發表于 10-25 18:36 ?13次下載
    KEIL/MDK中使用JLINK<b class='flag-5'>調試</b>器掛載正在運行中的<b class='flag-5'>MCU</b>

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

    調試MCU時,經常會遇到復位的情況。要找到復位的原因,我們就需要了解到有哪些因素會導致MCU復位
    發表于 12-05 10:36 ?6次下載
    初始化<b class='flag-5'>mcu</b>程序選用32k_<b class='flag-5'>MCU</b>有多少種<b class='flag-5'>復位</b>因素

    不復位MCU直接調試運行程序

    此時此刻有一種調試需求是朋友們非常想要的:一旦程序出了問題,我只需要插上仿真器,目標硬件不會復位,而是與我當前所調試的程序同步,類似于仿真程序的時候的“全速運行”,然而通過添加斷點,便可查看程序具體的運行狀態,內存等等信息,讓b
    的頭像 發表于 05-12 15:43 ?1077次閱讀

    MCU復位電路知多少?

    MCU復位電路知多少?
    的頭像 發表于 10-17 18:02 ?802次閱讀
    <b class='flag-5'>MCU</b><b class='flag-5'>復位</b>電路知多少?

    MCU不復位調試的小技巧

    場景,也并非無路可循。原則上只要我們通過仿真器調試時,做到代碼不被重新下載覆蓋,MCU 不被復位,就可能保留當前程序運行的狀態,讓 Bug 無處藏身。 02 實現方法 首先,我們將編譯
    發表于 02-26 11:30 ?309次閱讀
    <b class='flag-5'>MCU</b><b class='flag-5'>不復位</b><b class='flag-5'>調試</b>的小技巧

    MCU復位RAM會保持嗎,如何實現復位時變量數據保持

    在使用MCU時,通常大家默認MCU復位時RAM會被復位清零,那實際MCU復位時RAM是什么狀態?
    的頭像 發表于 03-01 09:32 ?1030次閱讀
    <b class='flag-5'>MCU</b><b class='flag-5'>復位</b>RAM會保持嗎,如何實現<b class='flag-5'>復位</b>時變量數據保持
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>