1 調(diào)試窘境 2 配置過程 軟硬件環(huán)境: IDE版本: Keil V5.36.0.0 (IAR等主流IDE工具均可) 調(diào)試工具版本: jlinkV9 (目前主流調(diào)試器基本都已具備) MCU型號:STM32F429 展示方法: 直接采用全局變量進行累加然后進行串口輸出,如果重新連接目標平臺,串口輸出的全局變量還是順著之前的計數(shù)進行累計,便可以證明MCU沒有復位而是從程序運行處開始仿真。 代碼實例如下: 2#include 'delay.h' 3#include 'key.h' 4#include 'sys.h' 5#include 'usart.h' 6 7uint32_t Cnt = 0; 8 9/****************************** 10*** Function:測試程序 11*** Author :公眾號:最后一個bug 12******************************/ 13 14int main(void) 15{ 16 17 u16 times=0; 18 delay_init(); 19 NVIC_Configuration(); 20 uart_init(9600); 21 while(1) 22 { 23 times++; 24 if(times%30==0) 25 { 26 printf('golobal data :\r\n',Cnt++); 27 } 28 delay_ms(10); 29 } 30} 步驟如下: 1、首先編譯好工程,把將要實驗的程序完整的燒錄一次,必須要保證MCU中正在運行的程序與所要仿真的工程同步,這樣調(diào)試器通過調(diào)試接口獲取的程序運行位置信息才能與工程代碼中的位置一一對應。 2、去掉啟動時加載應用程序,并加入Loader.ini文件,主要用于加載已經(jīng)編譯生成的.axf文件到Keil中,從而進行調(diào)試。 ![]() 可能你該問了.axf文件是什么? 其實axf全稱為:ARM Executable File,該文件包含bin代碼和大量的調(diào)試信息,這些調(diào)試信息可以被調(diào)試器使用,從而定位到我們的C代碼。 3、在調(diào)試器Setting選項中,去掉'Reset after Connect',為了調(diào)試器鏈接以后不進行復位動作,從而破壞現(xiàn)場。 4、接下來Update Target Before Debugging選擇需要去掉,直接調(diào)試運行目標不需要勾選,也就不會更新Flash。 3 驗證結(jié)果 直接在全局變量打印輸出的地方放置斷點,程序運行到斷點處正常停止。 ![]() 然后我們看一下輸出的串口信息數(shù)據(jù)是否連續(xù),如果打印的數(shù)據(jù)連續(xù)說明程序沒有復位,接著反正前正在運行的程序往下執(zhí)行。 4 思考 以前我了解到很多朋友覺得仿真程序是把運行程序通過加工調(diào)試信息,然后全部下載到MCU,然后進行仿真調(diào)試。 這種想法在目前的在線調(diào)試中是不太正確的,只需要知道程序運行到哪里,并且查看內(nèi)部信息、控制程序的運行等,便可以反推定位程序當前所運行的位置和狀態(tài),這也是本文開頭的前提條件,燒錄到Flash上的固件與你即將要仿真的代碼工程要保持同步,否則接下來的調(diào)試當然就是牛頭不對馬嘴。 仿真并不是什么神秘的東西,你可以認為就是與MCU內(nèi)部仿真模塊進行通信,從而完成調(diào)試信息的交互和控制。 最后 好了,今天就跟大家分享這么多了,如果你覺得有所收獲,一定記得點個贊~ |
|
來自: 新用戶0118F7lQ > 《文件夾1》