汇编语言笔记-keil5软件仿真及调试
目錄
- keil5調(diào)試功能
- 軟件仿真設(shè)置
- 硬件調(diào)試設(shè)置
- 調(diào)試方法
- 調(diào)試選項(xiàng)及介紹
- 調(diào)試窗口
- Command
- Disassembly
- Symbols
- Registers
- Call Stack(+Locals)
- Watch
- Memory
- Serial
- Logic Analyzer
- 外設(shè)寄存器查看
- 軟件仿真限制
keil5調(diào)試功能
???????keil5的Debug選項(xiàng)分為軟件仿真和硬件調(diào)試。兩種方式的區(qū)別在于,前者不需要硬件平臺(tái),而是通過軟件模擬芯片的運(yùn)行,此時(shí)可以通過邏輯分析儀等查看(模擬)芯片輸出(當(dāng)然硬件調(diào)試也可以使用邏輯分析儀等功能)。
軟件仿真設(shè)置
(1)勾選Use Simulator設(shè)置使用軟件仿真。
(2)勾選Run to main()使調(diào)試時(shí),程序自動(dòng)運(yùn)行到main函數(shù)。
(3)Restore Debug Session Setting一般默認(rèn)即可,該部分為復(fù)位調(diào)試窗口的組件,勾選后,調(diào)試時(shí)對(duì)應(yīng)的窗口或狀態(tài)恢復(fù)默認(rèn)值。
(4)設(shè)置Dialog DLL為DARMSTM.DLL以及設(shè)置Parameter為-pSTM32F103ZE(芯片參數(shù)按使用的芯片相應(yīng)修改即可,當(dāng)然,部分芯片無法仿真),這部分為DLL文件及芯片參數(shù)設(shè)置區(qū)。
Dialog DLL和Parameter不修改的話,后面運(yùn)行時(shí)可能會(huì)報(bào)錯(cuò)。
硬件調(diào)試設(shè)置
調(diào)試方法
???????設(shè)置結(jié)束后,點(diǎn)擊“Debug”-“Start/Stop Debug Session”開始Debug。
???????此時(shí),一般界面如下所示,在代碼編輯區(qū)的左側(cè),會(huì)出現(xiàn)灰色區(qū)域、藍(lán)色和黃色箭頭,黃色三角形代表將要執(zhí)行的代碼,藍(lán)色的三角形表示當(dāng)前光標(biāo)所在代碼,點(diǎn)擊灰色區(qū)域可添加斷點(diǎn)。通過調(diào)試選項(xiàng)或調(diào)試窗口即可對(duì)代碼進(jìn)行Debug。
斷點(diǎn)是調(diào)試器的功能之一,可以讓程序停止在設(shè)置斷點(diǎn)的語句。在調(diào)試過程中,可在程序的某一處設(shè)置斷點(diǎn)再點(diǎn)擊Run運(yùn)行,此時(shí)當(dāng)程序運(yùn)行至該位置時(shí)自動(dòng)停止。
調(diào)試選項(xiàng)及介紹
調(diào)試窗口
???????通過“View”或調(diào)試選項(xiàng)旁的圖標(biāo)可以打開相應(yīng)的調(diào)試窗口:
Command
???????命令顯示窗口,如下圖所示,在該窗口“命令輸入?yún)^(qū)”輸入相應(yīng)調(diào)試命令即可完成相應(yīng)功能,調(diào)試命令參考調(diào)試命令文檔。
注意文檔的第2句話:例如,BreakAccess 必須輸入為 BA 或 ba。即文檔的表格中第一列展示的命令不能直接輸入到命令輸入?yún)^(qū),可以點(diǎn)擊以查看真正的命令。
Disassembly
???????反匯編窗口,如下圖所示,該窗口將原代碼(即代碼編輯區(qū)的代碼)、機(jī)器碼和反匯編代碼比對(duì)顯示,其中,紅色字體為原代碼,原代碼前是對(duì)應(yīng)語句的行號(hào)。紅色字體下面的黑色字體為對(duì)應(yīng)的機(jī)器碼和反匯編代碼,黑色字體可以分為三個(gè)部分。
???????此時(shí),點(diǎn)擊Disassembly窗口,代碼編輯窗口的藍(lán)色箭頭會(huì)指向?qū)?yīng)的代碼。
根據(jù)《ARM Cortex-M3與Cortex-M4權(quán)威指南》一書的圖2.5,反匯編代碼由機(jī)器代碼生成,而不是由編譯器將C語言代碼直接編譯而成(這樣好像反匯編的“反”更說得通)。
Symbols
???????模塊窗口,如下圖所示,該窗口用于顯示了工程下各個(gè)文件中的函數(shù)(名稱、地址、類型)以及函數(shù)內(nèi)的變量(名稱、地址、類型),在函數(shù)位置右鍵點(diǎn)擊可以進(jìn)行跳轉(zhuǎn)或復(fù)制函數(shù)的位置,在變量位置右鍵點(diǎn)擊可以將其添加至watch、memory或復(fù)制位置。
Registers
???????寄存器窗口,如下圖所示,該窗口用于顯示R0~R15、xPSR等內(nèi)核寄存器的值(不是外設(shè)寄存器),如下圖所示,關(guān)于內(nèi)核寄存器的介紹可以查看ARM架構(gòu)基本寄存器。
Call Stack(+Locals)
???????調(diào)用關(guān)系和局部變量窗口,如下圖所示,該窗口用于展示當(dāng)前函數(shù)調(diào)用關(guān)系及函數(shù)的局部變量(包括參數(shù)和內(nèi)部變量),如下圖所示,調(diào)用關(guān)系為main函數(shù)調(diào)用SetTimeVal函數(shù),SetTimeVal函數(shù)中包括type和timeVal兩個(gè)參數(shù)。
Watch
???????如下圖所示,該窗口用于查看變量,包括變量名、值以及變量類型,可以點(diǎn)擊Value一欄對(duì)變量的值修改。
???????將變量添加至Watch窗口有多種方法,除了從其他窗口添加外,還可以從代碼編輯區(qū)添加,如下圖所示,點(diǎn)擊變量再鼠標(biāo)右鍵,選擇“Add ‘type’ to”-“Watch1”即可,Watch1和Watch2沒有區(qū)別,估計(jì)只是為了方便用戶多個(gè)窗口同時(shí)查看。
Memory
???????內(nèi)存窗口,如下圖所示,該窗口用于顯示存儲(chǔ)器中的數(shù)據(jù),上方Address區(qū)用于輸入變量名或地址值,此時(shí)下面的顯示欄會(huì)移動(dòng)到對(duì)應(yīng)地址存儲(chǔ)的數(shù)據(jù)。
Serial
???????串口模擬窗口,該窗口用于模擬串口輸出數(shù)據(jù),UART #1對(duì)應(yīng)UART1,UART #2對(duì)應(yīng)UART2。將鼠標(biāo)移至顯示區(qū)并點(diǎn)擊右鍵,選擇相應(yīng)選項(xiàng)后可清空串口、復(fù)制到剪貼板或切換顯示模式(切換成ASCII、HEX等)
Logic Analyzer
???????邏輯分析儀窗口,如下圖所示,該窗口作用類似邏輯分析儀。使用前需要點(diǎn)擊左上角的“Setup…”后在彈出窗口內(nèi)添加引腳,確定后點(diǎn)擊運(yùn)行即可查看引腳的輸出波形。(添加方法和文件路徑添加方法類似,以添加PB5引腳為例,在彈出窗口點(diǎn)擊右上角的虛線框并輸入PORTB.5即可),引腳添加后,在“Setup…”下的灰色區(qū)域鼠標(biāo)右鍵可設(shè)置輸出類型(Analog、bit、state)
注意,如果前面調(diào)試選項(xiàng)的Dialog DLL和Parameter沒有相應(yīng)設(shè)置的話,添加引腳可能會(huì)報(bào)錯(cuò)。
???????添加完畢后并修改輸出類型為bit后,點(diǎn)擊Run即可查看該引腳的輸出電平(這里使用了PWM輸出實(shí)驗(yàn)作為示例)
外設(shè)寄存器查看
???????上述的Register窗口查看的是處理器使用的工作寄存器,一般只有匯編語言會(huì)用到,通過固件庫或寄存器開發(fā)單片機(jī)時(shí),都是通過C語言設(shè)置單片機(jī)的各個(gè)寄存器,而通過keil5的軟件仿真或硬件調(diào)試可以對(duì)芯片的外設(shè)寄存器查看及修改。
???????如下圖所示,通過“View”-“System Viewer”-“GPIO”-“GPIOA”查看相應(yīng)的寄存器。
???????點(diǎn)擊后,彈出如下圖所示的GPIOA窗口,點(diǎn)擊對(duì)應(yīng)的Value值即可對(duì)其修改。
???????當(dāng)然,像上面那樣修改比較麻煩,還需要查閱對(duì)應(yīng)的手冊(cè),通過“Peripherals”-“General Purpose I/O”可打開其它形式的寄存器窗口。
???????點(diǎn)擊GPIOA后,彈出如下圖所示的General Purpose I/O A窗口,選中相應(yīng)引腳即可在Selected Port Pin Configuration設(shè)置其模式,也可以在下方勾選某個(gè)寄存器的某個(gè)位,達(dá)到引腳輸入/輸出高/低電平的設(shè)置。
軟件仿真限制
???????軟件仿真不是所有芯片都可以,部分芯片(如stm32F4以及GD各款)是無法軟件仿真,會(huì)報(bào)錯(cuò),好像聽說要修改DLL文件或修改讀寫權(quán)限,但感覺可能性不大,文檔中包含了可進(jìn)行軟件模擬的芯片,如其中的表所示。
總結(jié)
以上是生活随笔為你收集整理的汇编语言笔记-keil5软件仿真及调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 班级静态网站设计
- 下一篇: untiy UI的坐标转为屏幕坐标