在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2022-05-12 15:43 ? 次閱讀

1

調試窘境

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

2

配置過程

軟硬件環境:

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

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

MCU型號:STM32F429

展示方法:

直接采用全局變量進行累加然后進行串口輸出,如果重新連接目標平臺,串口輸出的全局變量還是順著之前的計數進行累計,便可以證明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中正在運行的程序與所要仿真的工程同步,這樣調試器通過調試接口獲取的程序運行位置信息才能與工程代碼中的位置一一對應。

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

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

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

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

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

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

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

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

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

3

驗證結果

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

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

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

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

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

4

思考

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

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

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

審核編輯 :李倩


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

    關注

    146

    文章

    17347

    瀏覽量

    352708
  • 仿真
    +關注

    關注

    50

    文章

    4125

    瀏覽量

    134020

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

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

收藏 人收藏

    評論

    相關推薦

    是否可以用msp430f5529的開發板直接進行程序調試

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

    變頻器調試的前期準備和試運行

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

    廣西柳州的思必馳智能制造基地正式投入試運行

    近日,隨著一臺臺智能智造設備的陸續進廠和調試完成,位于廣西柳州的思必馳智能制造基地正式投入試運行
    的頭像 發表于 05-29 10:32 ?540次閱讀

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

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

    STM32F4 Keil程序在RAM中調試運行的問題求解

    用Keil,設置好向量表在ram中,然后修改程序位置,調試載入時設置pc,sp等,能正常調試。我的程序僅僅就是進入main后,初始化串口,開啟systick,然后循環不停打印systi
    發表于 05-13 06:51

    用Keil上下載按鈕下載執行程序直接斷電執行程序,有什么不一樣?

    在連接上J-Link或者ST-Link的時候,可以直接在Keil上點擊下面的按鈕下載程序并執行程序(當然要勾選下載復位后自動執行) 想問的是,這樣下載
    發表于 05-06 06:43

    關于STM32F207VET6運行的疑問求解

    STOP后發現運行在如下圖(1)區域,這個地址不在rom也不在ram中。硬件復位也沒有任何反應。 (2)斷電后馬上上電也不能正常工作,硬件復位芯片也不能正常運行,斷電一會(不固定時間)
    發表于 04-22 06:56

    stm32g431vet6使用cubemax生成的代碼,在keil5進入debug時會直接運行程序跑飛怎么解決?

    使用stm32g431vrt6時,不是開發板,用cubemax生成的源代碼,沒改動,在進入debug時,會直接運行程序不知道跑飛哪里去了。進入debug之后就是直接運行,停止,復位
    發表于 04-11 07:55

    在stm32的運行程序中,初始函數明明沒有在while函數里面,為什么能反復運行

    在stm32的運行程序中,好多初始函數明明沒有在while函數里面,但是,他卻能反復的,不斷地去運行,這是為什么呢? 就像是這個程序,對于設置獨立按鍵能不能連續按,這個初始化獨立按鍵的程序
    發表于 04-08 08:15

    STM32H750如何使用IAR調試運行在外部SDRAM的程序?

    (.mac file)腳本,在程序下載前,運行腳本初始化外部SDRAM,然后直接下載程序到外部SDRAM。 然后就要像在內存中調試代碼一樣
    發表于 04-01 07:40

    STM32H在IAR中如何實現從FLASH加載到SRAM中運行程序

    如題,STM32H 在IAR中如何實現從FLASH加載到SRAM中運行程序 有沒有相關的例程可供參考
    發表于 03-28 07:46

    KEIL調試STM32在運行在打斷點位置后芯片復位是什么原因導致的呢?

    如題,在用Keil仿真時,在斷點滿足的地方,芯片復位,有可能是什么原因導致的呢?現象是這樣:我運行程序,在某個條件中設下斷點,然后等外面條件成立后,按理說程序會停在斷點位置,但是實際上芯片被
    發表于 03-18 08:05

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

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

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

    在使用MCU時,通常大家默認MCU復位時RAM會被復位清零,那實際MCU復位時RAM是什么狀態?
    的頭像 發表于 03-01 09:32 ?2630次閱讀
    <b class='flag-5'>MCU</b><b class='flag-5'>復位</b>RAM會保持嗎,如何實現<b class='flag-5'>復位</b>時變量數據保持

    MCU不復位調試的小技巧

    場景,也并非無路可循。原則上只要我們通過仿真器調試時,做到代碼不被重新下載覆蓋,MCU 不被復位,就可能保留當前程序運行的狀態,讓 Bug
    發表于 02-26 11:30 ?1397次閱讀
    <b class='flag-5'>MCU</b><b class='flag-5'>不復位</b><b class='flag-5'>調試</b>的小技巧
    主站蜘蛛池模板: 亚洲午夜一区 | 亚洲免费mv | 欧美极品在线播放 | 2021久久精品免费观看 | 亚洲性色成人 | 国产一级特黄高清在线大片 | 狠狠干夜夜爽 | 岬奈奈美在线 国产一区 | 欧美人交性视频在线香蕉 | 欧美午夜影视 | 热re99久久国产精品 | 美女黄18以下禁止观看 | 婷婷久操 | 国产做a爰片久久毛片 | 三级国产| 午夜视频一区 | 四虎影院在线观看网站 | 亚洲jjzzjjzz在线观看 | 国产毛片久久久久久国产毛片 | 成在线人永久免费播放视频 | 看久久 | 人人做天天爱夜夜爽中字 | 大色综合色综合资源站 | 亚洲国产成人va在线观看 | 精品国产污网站在线观看15 | 欧美特级午夜一区二区三区 | 亚洲啪啪 | 亚洲天天做日日做天天欢毛片 | 在线观看视频网站 | 天天干天天干天天天天天天爽 | 亚洲综合在线最大成人 | 一级特一级特色生活片 | 欧美综合国产精品日韩一 | 欧美色国 | 亚洲天堂手机在线 | 日本加勒比黑人 | 欧美在线伊人 | 有码日韩 | 久久综合一 | 1024视频在线观看国产成人 | 日本一卡精品视频免费 |