青青av-亚洲激情一区二区-欧洲色综合-看片网址国产福利av中文字幕-成人精品毛片-亚洲黄色免费观看-国产夫妻在线观看-69av电影-久久性片-中文字幕av影片-色综合久久久久无码专区

【ARM】Keil MDK在調試模式下查看當前在堆棧上的函數、變量

1、 文檔目標

本文旨在為使用Keil MDK(Microcontroller Development Kit)進行嵌入式開發的工程師提供一種詳細的指導方法,幫助其在調試過程中確認當前程序運行狀態下的函數調用鏈和局部變量信息。特別是在實時操作系統(RTOS)環境下,開發者需要明確當前任務的執行上下文以及堆棧中的變量分布情況,以快速定位問題并優化代碼。

通過本文所述的方法,開發者可以更高效地利用MDK調試工具的功能,提升調試效率,減少因堆棧溢出或函數調用異常導致的系統崩潰風險。


2、 問題場景

在嵌入式開發中,復雜的應用程序通常包含多個函數調用層級,尤其是在引入實時操作系統(如RTX RTOS)后,任務切換和多線程機制使得程序執行流程更加復雜。傳統的單步調試方式雖然能夠逐步跟蹤代碼執行,但難以直觀地展示當前任務的函數調用關系以及局部變量的狀態。

例如,當程序運行到某一點時,開發者可能需要確認以下信息:

● 當前任務的函數調用鏈是什么?

● 哪些局部變量已被加載到堆棧中?

● 局部變量的值是否符合預期?

這些問題在調試過程中尤為關鍵,因為它們直接關系到程序的正確性和性能優化。然而,手動分析堆棧信息不僅耗時,還容易出錯。因此,如何利用Keil MDK提供的工具快速獲取這些信息成為亟待解決的問題。


3、軟硬件環境

1)、軟件版本:Keil MDK 5.38a

2)、電腦環境:Windows 11

3)、外設硬件:無


4、解決方法

1)、在MDK Debug模式下,有一個Call Stack + Locals窗口,該窗口就是用于顯示當前位于堆棧上的對象。對于使用RTX-RTOS的應用程序,會顯示任務。每個對象都與其位置或值以及類型相關聯。當前函數位于列表頂部,被調用函數位于其下方,并且還會顯示當前函數的所有局部變量的信息。(如圖4-1)

圖4-1

2)、Call Stack + Locals窗口可以通過菜單欄View->Call Stack WIndows打開(如圖4-2-1)或者直接在工具欄中點擊Call Stack Windows的按鈕打開(如圖4-2-2)。

圖4-2-1

圖4-2-2


3)、在程序運行過程中Call Stack + Locals窗口是不會進行更新的,只有觸發斷點或者程序暫停運行后,才會顯示出當前情況下處于堆棧中的函數與對象。(如圖4-3)

圖4-3


4)、在Call Stack + Locals窗口中一共包含以下的三欄數據(如圖4-4):

(1)、Name:顯示符號名稱。當前活動的功能或任務以綠色突出顯示。

(2)、Location/Value:顯示該項的內存地址或值,或具有解釋性文本。對于unsigned char類型的項,該字段顯示值和字符。

(3)、Type:顯示對象類型。函數與其返回類型和參數類型相關聯。

圖4-4


5)、還在通過右鍵選中對應的函數或者變量,跳轉到對應函數的位置或者被調用的位置。(如圖4-5)

圖4-5


主站蜘蛛池模板: 榆林市| 日照市| 台山市| 凤山市| 靖宇县| 永顺县| 喜德县| 兴宁市| 增城市| 茂名市| 应城市| 吉木乃县| 西乡县| 茶陵县| 遵义县| 浙江省| 广河县| 隆化县| 乌什县| 祁门县| 航空| 河源市| 神农架林区| 逊克县| 平利县| 房山区| 中牟县| 靖江市| 浠水县| 丰台区| 南漳县| 伊春市| 宝应县| 浦东新区| 华蓥市| 鄂托克前旗| 萍乡市| 岐山县| 河池市| 山东省| 邵东县|