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

首頁 > 資源中心 > FAQ
