日韩中文在线观看-欧美性综合-伊人视频在线观看-亚洲免费在线视频观看-国产偷人视频-人妻丰满熟妇岳av无码区hd-国产一级淫片a视频免费观看-国产精品交换-国产精品1区2区3区4区-美女日批视频在线观看-欧美日韩一区二区三区自拍

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

1、 文檔目標

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

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


2、 問題場景

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

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

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

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

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

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


3、軟硬件環(huán)境

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

2)、電腦環(huán)境: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窗口是不會進行更新的,只有觸發(fā)斷點或者程序暫停運行后,才會顯示出當前情況下處于堆棧中的函數與對象。(如圖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


主站蜘蛛池模板: 湖口县| 陈巴尔虎旗| 平远县| 通榆县| 岚皋县| 遂宁市| 涿州市| 华池县| 蛟河市| 五台县| 泸溪县| 永康市| 柘荣县| 东阳市| 普格县| 泌阳县| 石渠县| 甘洛县| 汉阴县| 三原县| 咸丰县| 米林县| 邵阳县| 枣强县| 中西区| 托克托县| 镇沅| 唐海县| 白银市| 胶州市| 德庆县| 闵行区| 巴林右旗| 阳朔县| 广灵县| 蒲城县| 马鞍山市| 紫阳县| 江都市| 兰溪市| 吉木萨尔县|