一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

不復位MCU直接調(diào)試運行程序

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2022-05-12 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1

調(diào)試窘境

經(jīng)常有朋友在開發(fā)中遇到這樣的窘境,當單片機程序運行異常以后,由于調(diào)試信息做得并不是很全面,導致相應(yīng)的問題場景非常難分析。當時的你肯定會嘆息道:"要是我一直插著仿真器就好了,這個bug還不是分分鐘的事~",每個人都想有顆“后悔藥”可吃,然而遇到這種場景也并非絕路。主要是因為大部分朋友插上仿真以后,調(diào)試器在啟動時會發(fā)出硬件重置信號,應(yīng)用程序當前的狀態(tài)都會丟失,包括內(nèi)存變量、狀態(tài)等等,對于一些長時間的偶發(fā)故障調(diào)試更不太友好。此時此刻有一種調(diào)試需求是朋友們非常想要的:一旦程序出了問題,我只需要插上仿真器,目標硬件不會復位,而是與我當前所調(diào)試的程序同步,類似于仿真程序的時候的“全速運行”,然而通過添加斷點,便可查看程序具體的運行狀態(tài),內(nèi)存等等信息,讓bug聞風喪膽。很多朋友可能也只是想想,畢竟大家都比較專注程序中的應(yīng)用邏輯,而忽略了調(diào)試器這塊的功能研究,自己就定義這種調(diào)試方式比較難吧或者沒有這種功能而不了了之。大家調(diào)試的需求也是一種用戶需求,相應(yīng)工具的開發(fā)廠家會根據(jù)相應(yīng)的需求進行開發(fā),所以該功能在大部分主流的開發(fā)工具中都已具備,下面我們就驗證一下這個功能的可行性:

2

配置過程

軟硬件環(huán)境:

IDE版本: Keil V5.36.0.0 (IAR等主流IDE工具均可)

調(diào)試工具版本: jlinkV9 (目前主流調(diào)試器基本都已具備)

MCU型號:STM32F429

展示方法:

直接采用全局變量進行累加然后進行串口輸出,如果重新連接目標平臺,串口輸出的全局變量還是順著之前的計數(shù)進行累計,便可以證明MCU沒有復位而是從程序運行處開始仿真。

代碼實例如下:


		1#include"led.h"  2#include"delay.h"  3#include"key.h"  4#include"sys.h"  5#include"usart.h"  6  7uint32_tCnt=0;  8  9/****************************** 10*** Function:測試程序 11*** Author :公眾號:最后一個bug 12******************************/ 13 14intmain(void) 15{ 16 17u16times=0; 18delay_init(); 19NVIC_Configuration(); 20uart_init(9600); 21while(1) 22{ 23times++; 24if(times%30==0) 25{ 26printf("golobaldata: ",Cnt++); 27} 28delay_ms(10); 29} 30}

步驟如下:

1、首先編譯好工程,把將要實驗的程序完整的燒錄一次,必須要保證MCU中正在運行的程序與所要仿真的工程同步,這樣調(diào)試器通過調(diào)試接口獲取的程序運行位置信息才能與工程代碼中的位置一一對應(yīng)。

2、去掉啟動時加載應(yīng)用程序,并加入Loader.ini文件,主要用于加載已經(jīng)編譯生成的.axf文件到Keil中,從而進行調(diào)試。

a97f9d62-d1b2-11ec-bce3-dac502259ad0.png

a9d8577c-d1b2-11ec-bce3-dac502259ad0.png

可能你該問了.axf文件是什么?

其實axf全稱為:ARM Executable File,該文件包含bin代碼和大量的調(diào)試信息,這些調(diào)試信息可以被調(diào)試器使用,從而定位到我們的C代碼。

3、在調(diào)試器Setting選項中,去掉"Reset after Connect",為了調(diào)試器鏈接以后不進行復位動作,從而破壞現(xiàn)場。

aa50abbe-d1b2-11ec-bce3-dac502259ad0.png

4、接下來Update Target Before Debugging選擇需要去掉,直接調(diào)試運行目標不需要勾選,也就不會更新Flash。

aa624e28-d1b2-11ec-bce3-dac502259ad0.png

3

驗證結(jié)果

直接在全局變量打印輸出的地方放置斷點,程序運行到斷點處正常停止。

aa73309e-d1b2-11ec-bce3-dac502259ad0.png

然后我們看一下輸出的串口信息數(shù)據(jù)是否連續(xù),如果打印的數(shù)據(jù)連續(xù)說明程序沒有復位,接著反正前正在運行的程序往下執(zhí)行。

aa9b3c06-d1b2-11ec-bce3-dac502259ad0.png

通過串口接收數(shù)據(jù)時間戳可以區(qū)分斷點和調(diào)試運行數(shù)據(jù),并且數(shù)據(jù)都是連續(xù)的,說明此調(diào)試過程在無需硬件重置即可連接到正在運行的目標。

4

思考

以前我了解到很多朋友覺得仿真程序是把運行程序通過加工調(diào)試信息,然后全部下載到MCU,然后進行仿真調(diào)試。

這種想法在目前的在線調(diào)試中是不太正確的,只需要知道程序運行到哪里,并且查看內(nèi)部信息、控制程序的運行等,便可以反推定位程序當前所運行的位置和狀態(tài),這也是本文開頭的前提條件,燒錄到Flash上的固件與你即將要仿真的代碼工程要保持同步,否則接下來的調(diào)試當然就是牛頭不對馬嘴。

仿真并不是什么神秘的東西,你可以認為就是與MCU內(nèi)部仿真模塊進行通信,從而完成調(diào)試信息的交互和控制。

審核編輯 :李倩


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

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367059
  • 仿真
    +關(guān)注

    關(guān)注

    52

    文章

    4289

    瀏覽量

    135876

原文標題:不復位MCU直接調(diào)試運行程序,讓bug聞風喪膽

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    keil調(diào)試階段無法進行仿真,能進到仿真界面,但是無法執(zhí)行程序怎么解決?

    keil調(diào)試階段無法進行仿真,能進到仿真界面,但是無法執(zhí)行程序,這個怎么解決?燒錄器用的是jlink
    發(fā)表于 07-18 06:08

    MTB如何在運行時介入Jlink調(diào)試器?

    目前我們的應(yīng)用程序運行時會偶發(fā)死機現(xiàn)象,有沒有辦法能夠在CYW43907芯片不復位的情況下介入調(diào)試器,查看導致死機的問題
    發(fā)表于 07-08 07:46

    STM32U585CIU6移植touchgfx之后stm32不運行程序怎么解決?

    畫了一個ui,燒寫到單片機之后,軟件復位和硬件復位了不運行LED亮,然后進入debug一直是卡著的,找遍了全網(wǎng)都沒有看到有類似的問題。各位救救孩子undefined,已經(jīng)卡了好幾天了,不知道怎么辦了。
    發(fā)表于 06-10 07:05

    移植touchgfx之后stm32不運行程序怎么解決?

    畫了一個ui,燒寫到單片機之后,軟件復位和硬件復位了不運行LED亮,然后進入debug一直是卡著的,找遍了全網(wǎng)都沒有看到有類似的問題。各位救救孩子undefined,已經(jīng)卡了好幾天了,不知道怎么辦了。
    發(fā)表于 06-06 07:43

    為什么無法運行程序“make”(在目錄“C:\\?

    FX2LP Build,得到了 14:26:46 **** 為項目 Fx2Test 構(gòu)建配置調(diào)試 **** 全部制作 無法運行程序“make”(在目錄“C
    發(fā)表于 05-15 08:26

    S32G399A調(diào)用Mcu_PerformReset()接口執(zhí)行功能復位,復位后使用Mcu_GetResetReason()讀取不到了,為什么?

    MCU_NO_REST_REASON,請問是什么原因呢? 而且直接上電讀取的復位源也是MCU_NO_REST_REASON,而不是MCU_P
    發(fā)表于 04-04 07:57

    stm32g030j6m6串口如何燒錄程序,NRST引腳能否在作為輸入IO使用時不復位?

    ; 2.使用SWD下載,NRST引腳必須作為輸入,但外部輸入低電平時,MCU復位。 問:串口如何燒錄程序,NRST引腳能否在作為輸入IO使用時不復位。
    發(fā)表于 03-10 07:35

    用stsw-link004這個軟件配合仿真器寫程序后,直接運行程序,程序運行不正常是什么原因?

    用stsw-link004這個軟件配合仿真器寫程序后,直接運行程序,程序運行不正常,必須對電路板進行完全重新上電,程序才能正常
    發(fā)表于 03-07 07:00

    是否可以用msp430f5529的開發(fā)板直接進行程序調(diào)試

    1.ldc1000的Vio是否可以接5v的電壓,如果接了,會影響芯片的使用或者損壞芯片嗎? 2.是否可以用msp430f5529的開發(fā)板直接進行程序調(diào)試? 3.附件中的文檔講得是LDC1000
    發(fā)表于 01-13 06:07

    基于飛騰平臺的國內(nèi)首家全棧信創(chuàng)安檢管理系統(tǒng)投入試運行

    基于飛騰平臺的國內(nèi)首家全棧信創(chuàng)安檢管理系統(tǒng)在哈爾濱太平國際機場初步建設(shè)完畢,進入試運行驗證階段,測試通道已面向旅客開放,期間運行穩(wěn)定,標志著全國首個全棧信創(chuàng)安檢管理系統(tǒng)已初具雛形。
    的頭像 發(fā)表于 12-04 16:23 ?862次閱讀

    行程開關(guān)的工作原理 行程開關(guān)的應(yīng)用領(lǐng)域

    物體的位置。 觸點系統(tǒng) :觸點系統(tǒng)包括常開觸點和常閉觸點。當操作頭移動到特定位置時,會觸發(fā)觸點的閉合或斷開。 觸發(fā)機制 :行程開關(guān)的觸發(fā)機制可以是機械式的,也可以是電子式的。機械式的行程開關(guān)通過操作頭的移動直接觸發(fā)觸
    的頭像 發(fā)表于 11-26 09:12 ?2595次閱讀

    C2000? MCU在有器件復位時的實時固件更新

    電子發(fā)燒友網(wǎng)站提供《C2000? MCU在有器件復位時的實時固件更新.pdf》資料免費下載
    發(fā)表于 11-25 14:16 ?0次下載
    C2000? <b class='flag-5'>MCU</b>在有器件<b class='flag-5'>復位</b>時的實時固件更新

    數(shù)字電源的低壓調(diào)試和高壓調(diào)試

    數(shù)字電源的低壓調(diào)試和高壓調(diào)試是電力系統(tǒng)中非常關(guān)鍵的部分,它們直接關(guān)系到設(shè)備的穩(wěn)定運行和電能供應(yīng)的質(zhì)量。以下是對這兩種調(diào)試方法的詳細解析:
    的頭像 發(fā)表于 09-15 11:39 ?1125次閱讀

    變頻器調(diào)試的前期準備和試運行

    一、前期準備 1. 確定調(diào)試目標 在開始調(diào)試之前,首先需要明確調(diào)試的目標。這包括確定所需的輸出頻率范圍、電壓范圍、額定電流等關(guān)鍵參數(shù)。這些參數(shù)將直接影響變頻器的設(shè)定和后續(xù)的
    的頭像 發(fā)表于 09-09 15:28 ?992次閱讀

    C2000 MCU JTAG 連接調(diào)試

    電子發(fā)燒友網(wǎng)站提供《C2000 MCU JTAG 連接調(diào)試.pdf》資料免費下載
    發(fā)表于 09-09 09:30 ?0次下載
    C2000 <b class='flag-5'>MCU</b> JTAG 連接<b class='flag-5'>調(diào)試</b>