一、MDK5編譯例程
二、串口下載程序
- 2.1、串口下載程序須知
- 2.2、串口下載硬件連接
- 2.3、配置下載工具 (ATK-XISP.exe)
- 2.4、STM32啟動(dòng)模式(M3和M4)
三、DAP下載程序
- 3.1、DAP下載硬件連接
-
3.2、在MDK上配置DAP
- 不同開發(fā)板的下載算法有所不同
- Build構(gòu)建 F7、Download下載 F8
四、DAP調(diào)試程序
- 4.1、 JTAG/SWD調(diào)試原理概述
- 4.2、 在MDK配置DAP仿真調(diào)試
-
4.3、 基礎(chǔ)執(zhí)行控制按鈕介紹
- 斷點(diǎn)
- 復(fù)位、執(zhí)行控制
- 查看程序段/函數(shù)執(zhí)行時(shí)間
- 結(jié)束仿真報(bào)錯(cuò)解決方法
-
4.4、工具欄常用窗口按鈕介紹
- Call Stack 窗口(調(diào)用棧窗口):查看函數(shù)調(diào)用關(guān)系&局部變量
- Watch 窗口(監(jiān)視窗口):查看函數(shù)首地址&變量值
- Watch窗口:設(shè)置全局變量在被讀或?qū)懞笞詣?dòng)停止運(yùn)行
- Memory窗口(內(nèi)存窗口):內(nèi)存查看窗口
- Peripheral窗口(外設(shè)窗口):查看寄存器的值
- 4.5、仿真時(shí)要注意的點(diǎn)
五、總結(jié)
一、MDK5編譯例程
在嵌入式系統(tǒng)中,存儲(chǔ)器通常分為Flash和SRAM,而數(shù)據(jù)類型的存儲(chǔ)位置和特性也因此而有所不同。以下是常見的數(shù)據(jù)類型及其在Flash和SRAM中的存儲(chǔ)情況:
-
Code(代碼):
- 存儲(chǔ)位置: Flash
- 說明: 代碼段存儲(chǔ)程序的執(zhí)行指令,通常包括可執(zhí)行程序的機(jī)器指令。
- 特性: 只讀,不可修改。程序在運(yùn)行時(shí)從Flash中讀取指令執(zhí)行。
-
RO-Data(只讀數(shù)據(jù)):
- 存儲(chǔ)位置: Flash
-
說明: 只讀數(shù)據(jù),通常是由
const
修飾的常量數(shù)據(jù)。 - 特性: 只讀,不可修改。這些數(shù)據(jù)在程序運(yùn)行期間不會(huì)被修改。
-
RW-Data(可讀可寫數(shù)據(jù)):
- 存儲(chǔ)位置: Flash(用于存儲(chǔ)初始值)和SRAM(運(yùn)行時(shí)修改)
- 說明: 初值為非0的可讀可寫數(shù)據(jù)。包括全局變量等。
- 特性: 具有初始值,可以在程序運(yùn)行時(shí)被修改。初始值存儲(chǔ)在Flash中,而運(yùn)行時(shí)修改的數(shù)據(jù)存儲(chǔ)在SRAM中。
-
ZI-Data(初值為0的可讀可寫數(shù)據(jù)):
- 存儲(chǔ)位置: SRAM
- 說明: 初值為0的可讀可寫數(shù)據(jù)。通常是未顯式初始化的全局變量,它們?cè)诔绦蜷_始執(zhí)行時(shí)被初始化為0。
- 特性: 具有初始值(0),可以在程序運(yùn)行時(shí)被修改。這些數(shù)據(jù)只存在于SRAM中。
在典型的嵌入式系統(tǒng)中,F(xiàn)lash用于存儲(chǔ)程序的代碼和只讀數(shù)據(jù),而SRAM用于存儲(chǔ)可讀可寫數(shù)據(jù)。這種劃分有助于有效地利用系統(tǒng)資源。請(qǐng)注意,具體的存儲(chǔ)器分配可能會(huì)受到編譯器、鏈接器和目標(biāo)硬件平臺(tái)的影響。
二、串口下載程序
2.1、串口下載程序須知
- M3、M4、M7開發(fā)板支持串口下載程序, 但是ATK-XISP.exe軟件只支持下載到內(nèi)部FLASH
- STM32的ISP下載,常用串口1下載程序
- 因?yàn)槭褂肬SB虛擬串口,所以事先得安裝CH340 USB虛擬串口驅(qū)動(dòng)(搭建開發(fā)環(huán)境視頻)
通過串口進(jìn)行嵌入式系統(tǒng)的程序燒錄和調(diào)試
串口下載程序是通過串口進(jìn)行嵌入式系統(tǒng)的程序燒錄和調(diào)試的一種常見方式。
下面是關(guān)于串口下載程序的一些建議和須知:
-
支持內(nèi)部FLASH的開發(fā)板和下載工具:
- 串口下載通常涉及將程序燒錄到目標(biāo)設(shè)備的內(nèi)部FLASH存儲(chǔ)器中。確保你的開發(fā)板支持通過串口下載程序,并且你使用的下載工具(如ATK-XISP.exe)也支持將程序下載到內(nèi)部FLASH。
-
選擇正確的串口:
- 對(duì)于STM32的ISP(In-System Programming)下載,常用串口1(通常是USART1)進(jìn)行程序下載。確保在你的應(yīng)用程序中正確配置了串口,并將其連接到下載工具。
-
USB虛擬串口驅(qū)動(dòng)的安裝:
- 如果使用USB虛擬串口進(jìn)行通信,如CH340 USB虛擬串口芯片,確保在使用之前先安裝相應(yīng)的驅(qū)動(dòng)程序。這是因?yàn)橛?jì)算機(jī)通常需要正確的驅(qū)動(dòng)程序來與USB串口設(shè)備進(jìn)行通信。確保你的計(jì)算機(jī)上已經(jīng)安裝了CH340 USB虛擬串口驅(qū)動(dòng)。
-
了解下載工具的使用方法:
- 下載工具(如ATK-XISP.exe)通常有特定的使用方法,可能需要選擇正確的串口、波特率等參數(shù)。詳細(xì)了解下載工具的使用手冊(cè)或文檔,以確保正確地配置和操作。
-
確保目標(biāo)設(shè)備處于下載模式:
- 在進(jìn)行串口下載之前,確保目標(biāo)設(shè)備處于可以接受程序下載的狀態(tài)。有些開發(fā)板可能需要將設(shè)備連接到下載模式或引腳翻轉(zhuǎn)按鈕,確保設(shè)備處于可以接收程序的狀態(tài)。
-
觀察下載過程中的提示和錯(cuò)誤:
- 在進(jìn)行串口下載時(shí),注意觀察下載工具的提示信息。如果出現(xiàn)錯(cuò)誤,查看錯(cuò)誤信息以了解可能的問題,如串口連接問題、波特率不匹配等。
-
備份重要數(shù)據(jù):
- 在進(jìn)行程序下載之前,特別是對(duì)于對(duì)設(shè)備進(jìn)行擦寫操作的情況,建議在下載之前備份目標(biāo)設(shè)備上的重要數(shù)據(jù),以防止意外數(shù)據(jù)丟失。
確保在進(jìn)行串口下載程序之前詳細(xì)了解相關(guān)設(shè)備和工具的使用方法,以提高操作的準(zhǔn)確性和成功率。
2.2、串口下載硬件連接
2.3、配置下載工具 (ATK-XISP.exe)
ATK-XISP.exe下載工具配置內(nèi)容如下:
2.4、STM32啟動(dòng)模式(M3和M4)
ISP下載程序
ISP下載程序一般步驟:
1、BOOT0接高電平,BOOT1接低電平
2、按復(fù)位鍵
ISP(In-System Programming)下載程序通常是通過設(shè)備內(nèi)部的Bootloader來實(shí)現(xiàn)的,它允許通過特定的接口(如串口)向目標(biāo)設(shè)備燒錄程序。下面是一般的ISP下載程序的步驟:
一般步驟:
-
設(shè)置BOOT0和BOOT1引腳:
- 將目標(biāo)設(shè)備的BOOT0引腳設(shè)置為高電平,BOOT1引腳設(shè)置為低電平。這通常是通過外部硬件連接或在目標(biāo)設(shè)備上的跳線帽來實(shí)現(xiàn)的。
-
按復(fù)位鍵:
- 按下目標(biāo)設(shè)備上的復(fù)位按鈕,確保設(shè)備處于復(fù)位狀態(tài)。這有助于確保設(shè)備在啟動(dòng)時(shí)進(jìn)入Bootloader模式。
-
連接下載工具:
- 連接ISP下載工具(例如串口下載工具)到目標(biāo)設(shè)備的下載接口(通常是UART、USB等),確保正確的連接。
-
啟動(dòng)下載工具:
- 啟動(dòng)ISP下載工具,如ATK-XISP.exe等。
-
選擇目標(biāo)設(shè)備和端口:
- 在下載工具中選擇目標(biāo)設(shè)備型號(hào),并設(shè)置正確的串口或其他下載接口。
-
選擇燒錄文件:
- 選擇要燒錄到目標(biāo)設(shè)備的程序文件。這通常是一個(gè)二進(jìn)制文件(.bin)或其他格式的固件文件。
-
設(shè)置下載參數(shù):
- 設(shè)置下載參數(shù),例如波特率、數(shù)據(jù)位、停止位等,以確保下載工具和目標(biāo)設(shè)備之間的通信正常。
-
開始下載:
- 確認(rèn)所有設(shè)置正確后,啟動(dòng)下載過程。下載工具會(huì)嘗試連接到目標(biāo)設(shè)備的Bootloader,并將程序文件燒錄到設(shè)備內(nèi)部的Flash中。
-
觀察下載過程:
- 觀察下載工具的輸出信息,以檢查下載過程是否成功。如果有錯(cuò)誤,查看錯(cuò)誤信息以了解問題的原因。
-
復(fù)位設(shè)備:
- 當(dāng)下載完成后,按下設(shè)備上的復(fù)位按鈕,將設(shè)備從Bootloader模式切換回正常模式。這樣,設(shè)備將以新燒錄的程序啟動(dòng)。
這是一般的ISP下載程序的步驟,具體步驟可能會(huì)因不同的目標(biāo)設(shè)備、下載工具和Bootloader而有所不同。確保參考目標(biāo)設(shè)備和下載工具的文檔以獲取詳細(xì)的操作說明。
程序執(zhí)行
程序執(zhí)行一般步驟:
1、BOOT0接低電平,BOOT1接任意
2、按復(fù)位鍵
程序執(zhí)行的一般步驟通常包括將目標(biāo)設(shè)備從復(fù)位狀態(tài)切換到正常運(yùn)行狀態(tài)。以下是一般的程序執(zhí)行步驟:
一般步驟:
-
設(shè)置BOOT0和BOOT1引腳:
- 將目標(biāo)設(shè)備的BOOT0引腳設(shè)置為低電平,BOOT1引腳設(shè)置為任意電平。這通常是通過外部硬件連接或在目標(biāo)設(shè)備上的跳線帽來實(shí)現(xiàn)的。
-
按復(fù)位鍵:
- 按下目標(biāo)設(shè)備上的復(fù)位按鈕,確保設(shè)備處于復(fù)位狀態(tài)。這有助于確保設(shè)備在啟動(dòng)時(shí)從正確的地址開始執(zhí)行程序。
-
釋放復(fù)位:
- 釋放復(fù)位按鈕,允許目標(biāo)設(shè)備跳出復(fù)位狀態(tài)。設(shè)備開始執(zhí)行存儲(chǔ)在其Flash中的程序。
-
程序執(zhí)行:
- 目標(biāo)設(shè)備開始執(zhí)行存儲(chǔ)在Flash中的程序。這可能包括初始化步驟、配置外設(shè)、執(zhí)行主循環(huán)等,具體取決于程序的設(shè)計(jì)和功能。
-
觀察執(zhí)行過程:
- 觀察目標(biāo)設(shè)備的執(zhí)行過程,檢查是否有錯(cuò)誤或異常情況。這可以通過連接調(diào)試器、觀察輸出、使用日志等方式來進(jìn)行。
-
與外設(shè)交互:
- 根據(jù)程序的設(shè)計(jì),目標(biāo)設(shè)備可能與各種外設(shè)進(jìn)行交互,讀取傳感器數(shù)據(jù)、驅(qū)動(dòng)執(zhí)行器等。
-
監(jiān)測(cè)系統(tǒng)狀態(tài):
- 在程序執(zhí)行的過程中,可以監(jiān)測(cè)系統(tǒng)的狀態(tài),包括內(nèi)存使用情況、CPU占用率、外設(shè)狀態(tài)等,以確保系統(tǒng)正常運(yùn)行。
-
應(yīng)對(duì)錯(cuò)誤和異常:
- 如果在執(zhí)行過程中發(fā)現(xiàn)錯(cuò)誤或異常情況,系統(tǒng)應(yīng)該能夠適當(dāng)?shù)貞?yīng)對(duì),可能是通過錯(cuò)誤處理機(jī)制、記錄錯(cuò)誤日志等方式。
-
定期維護(hù)和更新:
- 對(duì)于長時(shí)間運(yùn)行的系統(tǒng),可能需要定期進(jìn)行維護(hù)和更新,以確保軟件和硬件的正常運(yùn)行。這可能包括固件更新、系統(tǒng)配置更改等。
總的來說,程序執(zhí)行的步驟會(huì)根據(jù)具體的目標(biāo)設(shè)備、應(yīng)用程序和設(shè)計(jì)的要求而有所不同。上述步驟提供了一般的執(zhí)行流程,但具體情況可能會(huì)因設(shè)備的用途和設(shè)計(jì)而有所不同。
串口一鍵下載電路原理
不使用一鍵下載的CH340C參考電路
三、DAP下載程序
3.1、DAP下載硬件連接
3.2、在MDK上配置DAP
Keil中的工程配置選項(xiàng)說明
Options for Target 目標(biāo)選項(xiàng)
Options for Target 目標(biāo)選項(xiàng) > Debug 調(diào)試
Load Application at Startup 啟動(dòng)時(shí)加載應(yīng)用程序
Run to main 運(yùn)行到主程序
Debug 調(diào)試 > Settings 設(shè)置
Options for Target 目標(biāo)選項(xiàng) > Utilities 公共選項(xiàng)
不同開發(fā)板的下載算法有所不同
Options for Target 目標(biāo)選項(xiàng) > Utilities 公共選項(xiàng) > Settings 設(shè)置 > Flash Download 閃存下載
CMSIS-DAP Cortex-M Target Driver Setup:CMSIS-DAP Cortex-M 目標(biāo)驅(qū)動(dòng)程序設(shè)置
- Flash Download:閃存下載
- Download Function:下載功能
- Erase Full Chip:擦除全芯片 Program:程序
- Erase Sectors:擦除扇區(qū) Verify:核實(shí)
- Do not Erase:請(qǐng)勿擦除 Reset and Run:重置并運(yùn)行
- RAM for Algorithm:算法RAM
- Programming Algorithm:編程算法
- Descroption:說明
- Download Function:下載功能
Build構(gòu)建 F7、Download下載 F8
“Build” 和 “Download” 是在嵌入式系統(tǒng)開發(fā)中常用的兩個(gè)步驟,通常與集成開發(fā)環(huán)境(IDE)一起使用。以下是這兩個(gè)步驟的一般含義:
-
Build(構(gòu)建):
- “Build” 操作是指編譯源代碼并生成可執(zhí)行文件或固件的過程。在嵌入式系統(tǒng)中,這通常包括將高級(jí)編程語言(如C、C++)的源代碼翻譯成目標(biāo)平臺(tái)上的機(jī)器代碼。構(gòu)建過程還可能包括鏈接階段,其中各個(gè)模塊的目標(biāo)代碼被組合成一個(gè)可執(zhí)行文件或固件。構(gòu)建的輸出通常是二進(jìn)制文件(如.hex、.bin等),該文件包含了將被燒錄到目標(biāo)設(shè)備上的程序。
-
Download(下載):
- “Download” 操作是指將已經(jīng)構(gòu)建好的可執(zhí)行文件或固件燒錄到目標(biāo)設(shè)備上的過程。這通常涉及到使用燒錄工具、調(diào)試器或下載器,通過連接到目標(biāo)設(shè)備的下載接口(如串口、SWD等),將構(gòu)建好的程序文件傳輸?shù)侥繕?biāo)設(shè)備的存儲(chǔ)器中(如Flash)。下載操作通常包括設(shè)定下載參數(shù)(如波特率、目標(biāo)設(shè)備類型等)以及觀察下載過程的輸出信息。
在嵌入式開發(fā)中,這兩個(gè)步驟通常會(huì)在開發(fā)環(huán)境(如Keil、IAR、STM32CubeIDE等)中執(zhí)行。通常的工作流程是先進(jìn)行構(gòu)建以生成程序文件,然后通過下載將程序文件燒錄到目標(biāo)設(shè)備上。這使得開發(fā)者能夠在目標(biāo)設(shè)備上測(cè)試和調(diào)試他們的應(yīng)用程序。
請(qǐng)注意,具體的操作細(xì)節(jié)可能因使用的開發(fā)環(huán)境和目標(biāo)設(shè)備而有所不同。建議查閱相關(guān)的開發(fā)環(huán)境文檔和目標(biāo)設(shè)備手冊(cè)以獲取詳細(xì)的操作說明。
四、DAP調(diào)試程序
4.1、 JTAG/SWD調(diào)試原理概述
JTAG(Joint Test Action Group)和SWD(Serial Wire Debug)是用于嵌入式系統(tǒng)調(diào)試的兩種常見的調(diào)試接口。
JTAG調(diào)試原理概述:
-
連接:
- JTAG是一種用于調(diào)試和測(cè)試的標(biāo)準(zhǔn)接口,通過將多個(gè)設(shè)備連接到一個(gè)鏈路上。每個(gè)設(shè)備都有一個(gè)JTAG接口,允許在整個(gè)鏈路上進(jìn)行調(diào)試和測(cè)試。
-
鏈路結(jié)構(gòu):
- JTAG鏈路由一個(gè)主設(shè)備(通常是調(diào)試器)和多個(gè)目標(biāo)設(shè)備組成。每個(gè)目標(biāo)設(shè)備都通過JTAG接口與鏈路連接。
-
調(diào)試器:
- 調(diào)試器通過JTAG鏈路連接到目標(biāo)設(shè)備。它可以控制鏈路上的各個(gè)設(shè)備,并執(zhí)行調(diào)試操作,如停止、單步執(zhí)行等。
-
停止和狀態(tài)查詢:
- 在調(diào)試過程中,調(diào)試器可以通過JTAG鏈路停止目標(biāo)設(shè)備的執(zhí)行。停止后,可以查詢目標(biāo)設(shè)備的內(nèi)部狀態(tài),包括寄存器值、存儲(chǔ)器內(nèi)容等。
-
斷點(diǎn):
- JTAG支持硬件斷點(diǎn)和軟件斷點(diǎn)。通過在目標(biāo)設(shè)備上設(shè)置斷點(diǎn),可以在特定條件下停止程序的執(zhí)行。
-
數(shù)據(jù)訪問:
- JTAG還允許對(duì)目標(biāo)設(shè)備的存儲(chǔ)器進(jìn)行讀寫操作。這使得可以查看和修改目標(biāo)設(shè)備的內(nèi)存內(nèi)容。
-
恢復(fù)執(zhí)行:
- 在完成調(diào)試操作后,調(diào)試器可以通過JTAG鏈路恢復(fù)目標(biāo)設(shè)備的執(zhí)行,使程序繼續(xù)運(yùn)行。
SWD調(diào)試原理概述:
-
簡化連接:
- SWD是一種更為簡化的調(diào)試接口,用于在硬件資源受限的系統(tǒng)中進(jìn)行調(diào)試。相較于JTAG,SWD只需要兩根線(SWDIO和SWCLK)。
-
鏈路結(jié)構(gòu):
- SWD鏈路包括一個(gè)調(diào)試器和一個(gè)目標(biāo)設(shè)備。SWD通過單一線路上的兩個(gè)引腳進(jìn)行通信。
-
停止和狀態(tài)查詢:
- 類似于JTAG,SWD也可以在目標(biāo)設(shè)備上停止程序的執(zhí)行,并查詢內(nèi)部狀態(tài)。
-
斷點(diǎn):
- SWD支持?jǐn)帱c(diǎn)功能,允許在特定條件下停止程序的執(zhí)行。
-
數(shù)據(jù)訪問:
- 通過SWD,可以對(duì)目標(biāo)設(shè)備的存儲(chǔ)器進(jìn)行讀寫操作,查看和修改內(nèi)存內(nèi)容。
-
恢復(fù)執(zhí)行:
- 完成調(diào)試操作后,可以通過SWD恢復(fù)目標(biāo)設(shè)備的執(zhí)行。
總體而言,JTAG和SWD都是用于嵌入式系統(tǒng)調(diào)試的強(qiáng)大接口。SWD在連接復(fù)雜性和硬件資源占用上相對(duì)更為輕量,適用于一些資源受限的系統(tǒng)。選擇使用哪種接口通常取決于目標(biāo)設(shè)備的支持和具體的調(diào)試需求。
4.2、 在MDK配置DAP仿真調(diào)試
Keil中的工程配置選項(xiàng)說明
詳細(xì)的看上面 3.2、在MDK上配置DAP
4.3、 基礎(chǔ)執(zhí)行控制按鈕介紹
斷點(diǎn)
Insert/Remove Breakpoint:插入/刪除斷點(diǎn)
Enable/Disable Breakpoint:啟用/禁用斷點(diǎn)
Didsable All Breakpoints in current Target:禁用當(dāng)前目標(biāo)中的所有斷點(diǎn)
Kill All Breakpoints in Current Target:殺死當(dāng)前目標(biāo)中的所有斷點(diǎn)
Keil μVision是一種流行的嵌入式系統(tǒng)開發(fā)工具,用于編寫、編譯和調(diào)試嵌入式程序。在Keil μVision中,你可以使用斷點(diǎn)來暫停程序執(zhí)行,觀察變量的值,以及進(jìn)行調(diào)試。
在Keil μVision中設(shè)置斷點(diǎn)的步驟:
-
在源代碼中選擇斷點(diǎn)位置:
- 打開你的源代碼文件,通過點(diǎn)擊左側(cè)的行號(hào)來選擇你想要設(shè)置斷點(diǎn)的位置。通常,你可以通過雙擊行號(hào)或者在行號(hào)左側(cè)點(diǎn)擊鼠標(biāo)右鍵來選擇設(shè)置斷點(diǎn)。
-
使用快捷鍵設(shè)置斷點(diǎn):
- 在Keil μVision中,你也可以使用快捷鍵來設(shè)置斷點(diǎn)。通常情況下,
F9
鍵是用于在光標(biāo)所在行設(shè)置斷點(diǎn)的快捷鍵。
- 在Keil μVision中,你也可以使用快捷鍵來設(shè)置斷點(diǎn)。通常情況下,
-
在菜單欄中設(shè)置斷點(diǎn):
- 你還可以通過菜單欄中的 “Debug” 或者 “View” 選項(xiàng)來設(shè)置斷點(diǎn)。在菜單中選擇 “Debug” -> “Toggle Breakpoint” 或 “View” -> “Toggle Breakpoint” 來設(shè)置或取消斷點(diǎn)。
-
觀察斷點(diǎn)狀態(tài):
- 設(shè)置斷點(diǎn)后,你會(huì)在源代碼行號(hào)前看到一個(gè)小紅點(diǎn),表示斷點(diǎn)已設(shè)置。此外,你還可以在 “Debug” -> “Breakpoints” 菜單中查看和管理所有的斷點(diǎn)。
-
啟動(dòng)調(diào)試:
- 在設(shè)置斷點(diǎn)后,通過 “Debug” 菜單中的 “Start/Stop Debug Session” 或者使用相應(yīng)的快捷鍵(通常是
F5
)啟動(dòng)調(diào)試會(huì)話。
- 在設(shè)置斷點(diǎn)后,通過 “Debug” 菜單中的 “Start/Stop Debug Session” 或者使用相應(yīng)的快捷鍵(通常是
-
在斷點(diǎn)處暫停程序:
- 當(dāng)程序執(zhí)行到設(shè)置的斷點(diǎn)位置時(shí),Keil μVision將暫停程序的執(zhí)行。此時(shí),你可以查看變量值、寄存器狀態(tài)等信息。
-
在調(diào)試過程中操作:
- 一旦程序暫停,你可以使用調(diào)試工具欄中的按鈕(繼續(xù)執(zhí)行、單步執(zhí)行等)來控制程序的執(zhí)行。你還可以在 “Debug” 菜單中選擇 “Step”、“Run to Cursor” 等選項(xiàng)。
-
取消斷點(diǎn):
- 若要取消斷點(diǎn),你可以再次點(diǎn)擊已設(shè)置的斷點(diǎn)行號(hào),或者在 “Debug” 菜單中選擇 “Clear All Breakpoints”。
通過這些步驟,你可以在Keil μVision中設(shè)置和使用斷點(diǎn),以方便調(diào)試你的嵌入式程序。請(qǐng)注意,具體的操作和菜單選項(xiàng)可能會(huì)因Keil版本而有所不同,上述步驟基于通用的Keil μVision使用經(jīng)驗(yàn)。
復(fù)位、執(zhí)行控制
在 Keil μVision 軟件中,有一些常用的調(diào)試操作,包括復(fù)位(Reset)和執(zhí)行控制(Run, Step, Go)等。以下是這些操作的一些基本步驟:
復(fù)位操作:
-
手動(dòng)復(fù)位:
- 在 Keil μVision 的調(diào)試工具欄中,通常有一個(gè) “Reset” 按鈕,點(diǎn)擊該按鈕將手動(dòng)執(zhí)行復(fù)位操作。
-
硬件復(fù)位:
- 有些目標(biāo)設(shè)備上有硬件復(fù)位按鈕或者引腳,你也可以通過點(diǎn)擊硬件按鈕或者拉低/拉高相應(yīng)的硬件引腳來執(zhí)行硬件復(fù)位。
-
軟件復(fù)位:
- 你可以在代碼中插入軟件復(fù)位的語句,通常是一條特定的匯編指令或函數(shù)調(diào)用。
執(zhí)行控制操作:
-
Run(運(yùn)行):
- 在 Keil μVision 的調(diào)試工具欄中,通常有一個(gè) “Run” 按鈕,點(diǎn)擊該按鈕將繼續(xù)執(zhí)行程序直到下一個(gè)斷點(diǎn)或程序結(jié)束。
-
Step Into(單步進(jìn)入):
- 在 Keil μVision 的調(diào)試工具欄中,通常有一個(gè) “Step” 按鈕,點(diǎn)擊該按鈕將執(zhí)行一條指令并進(jìn)入被調(diào)用的函數(shù)(如果有)。
-
Step Over(單步過去):
- 在 Keil μVision 的調(diào)試工具欄中,通常有一個(gè) “Step Over” 按鈕,點(diǎn)擊該按鈕將執(zhí)行一條指令但不會(huì)進(jìn)入被調(diào)用的函數(shù)。
-
Step Out(單步出去):
- 在 Keil μVision 的調(diào)試工具欄中,通常有一個(gè) “Step Out” 按鈕,點(diǎn)擊該按鈕將執(zhí)行程序直到當(dāng)前函數(shù)返回。
-
Go(繼續(xù)執(zhí)行):
- 在 Keil μVision 的調(diào)試工具欄中,通常有一個(gè) “Go” 按鈕,點(diǎn)擊該按鈕將繼續(xù)執(zhí)行程序直到下一個(gè)斷點(diǎn)或程序結(jié)束。
-
Run to Cursor(執(zhí)行到光標(biāo)處):
- 在源代碼中右鍵點(diǎn)擊想要執(zhí)行到的行,選擇 “Run to Cursor”,將執(zhí)行程序直到達(dá)到該行。
以上操作在調(diào)試過程中非常常用,它們可以幫助你逐步執(zhí)行程序,觀察變量的值,并檢查程序的行為。請(qǐng)注意,具體的操作和菜單選項(xiàng)可能會(huì)因 Keil 版本而有所不同。
查看程序段/函數(shù)執(zhí)行時(shí)間
在嵌入式系統(tǒng)開發(fā)中,要查看程序段或函數(shù)的執(zhí)行時(shí)間,可以使用一些調(diào)試工具和性能分析技術(shù)。以下是一些可能的方法:
-
使用嵌入式調(diào)試器:
- 大多數(shù)嵌入式開發(fā)工具都提供了調(diào)試功能,包括在程序執(zhí)行期間查看和分析代碼。通過在調(diào)試器中設(shè)置斷點(diǎn)、單步執(zhí)行和觀察寄存器狀態(tài),你可以粗略地評(píng)估程序段或函數(shù)的執(zhí)行時(shí)間。
-
使用性能分析工具:
- 一些嵌入式系統(tǒng)提供性能分析工具,這些工具可以更精確地測(cè)量代碼的執(zhí)行時(shí)間。這可能包括硬件性能計(jì)數(shù)器、時(shí)間戳計(jì)時(shí)器等。通過使用這些工具,你可以獲取函數(shù)或代碼塊的精確執(zhí)行時(shí)間。
-
添加時(shí)間戳:
- 在代碼中插入時(shí)間戳,記錄程序的開始和結(jié)束時(shí)間。這可以通過使用系統(tǒng)時(shí)鐘或硬件計(jì)時(shí)器來實(shí)現(xiàn)。在函數(shù)的開頭插入時(shí)間戳,然后在函數(shù)結(jié)束時(shí)記錄另一個(gè)時(shí)間戳,計(jì)算兩者之差即可得到函數(shù)的執(zhí)行時(shí)間。
-
使用外部性能分析工具:
- 一些外部性能分析工具專為嵌入式系統(tǒng)設(shè)計(jì),可以通過連接到目標(biāo)設(shè)備并收集性能數(shù)據(jù)來進(jìn)行代碼分析。這些工具通常提供更詳細(xì)的性能數(shù)據(jù),例如函數(shù)的執(zhí)行時(shí)間、函數(shù)調(diào)用關(guān)系等。
-
使用RTOS提供的工具:
- 如果你的嵌入式系統(tǒng)使用了實(shí)時(shí)操作系統(tǒng)(RTOS),某些RTOS提供了性能分析和跟蹤工具,可用于測(cè)量任務(wù)的執(zhí)行時(shí)間和系統(tǒng)調(diào)用的開銷。
請(qǐng)注意,每個(gè)方法都有其適用的場(chǎng)景和精度。在選擇方法時(shí),要考慮到目標(biāo)系統(tǒng)的性能要求和調(diào)試需求。對(duì)于一些嵌入式系統(tǒng),可能需要將性能分析工作集成到系統(tǒng)設(shè)計(jì)和調(diào)試的早期階段。
Options for Target 目標(biāo)選項(xiàng) > Utilities 公共選項(xiàng) > Settings 設(shè)置 > Trace 追蹤功能
Core Clock(核心時(shí)鐘)
Trace Clock(追蹤時(shí)鐘)
結(jié)束仿真報(bào)錯(cuò)解決方法
使用MDK(Keil μVision)進(jìn)行仿真時(shí),可能會(huì)遇到仿真結(jié)束報(bào)錯(cuò)的問題,給出了兩種解決方法。這種情況可能與Keil μVision的版本以及對(duì)路徑的支持有關(guān)。
解決方法:
-
清除所有斷點(diǎn):
- 在進(jìn)行仿真之前,確保將所有斷點(diǎn)清除。在 Keil μVision 的調(diào)試工具欄中,可以找到 “Clear All Breakpoints” 的選項(xiàng)。清除斷點(diǎn)可能有助于避免一些與仿真結(jié)束相關(guān)的問題。
-
修改工程路徑為全英文路徑:
- 將工程路徑改成全英文路徑可以是另一種解決方法。確保工程路徑中不包含中文字符,包括工程文件路徑、源代碼路徑等。有時(shí)候,一些工具在處理中文路徑時(shí)可能會(huì)引發(fā)一些問題,特別是在較新版本的軟件中。
-
檢查MDK版本:
- 如果您使用的是MDK5.23以后的版本,并且發(fā)現(xiàn)中文支持存在問題,可以考慮升級(jí)到最新的MDK版本,以獲取修復(fù)的可能性。
-
查看Keil發(fā)布說明:
- 在Keil的發(fā)布說明文檔中,通常會(huì)包含對(duì)已知問題的描述以及軟件版本的變更。檢查這些文檔可能有助于了解是否存在已知的與中文支持相關(guān)的問題,并查看是否有解決方案或補(bǔ)丁。
請(qǐng)記住,這些解決方法可能因軟件版本和具體環(huán)境而異。如果您仍然遇到問題,建議查閱Keil μVision的官方文檔、用戶手冊(cè)或聯(lián)系Keil支持團(tuán)隊(duì)以獲取更詳細(xì)的幫助。
4.4、工具欄常用窗口按鈕介紹
Call Stack 窗口(調(diào)用棧窗口):查看函數(shù)調(diào)用關(guān)系&局部變量
在 Keil μVision 中,“Call Stack”(調(diào)用棧)窗口是一個(gè)用于查看函數(shù)調(diào)用關(guān)系和局部變量的強(qiáng)大工具。通過這個(gè)窗口,你可以了解程序的執(zhí)行路徑、調(diào)用關(guān)系,以及每個(gè)函數(shù)的局部變量值。以下是在 Keil μVision 中使用 “Call Stack” 窗口的一般步驟:
查看函數(shù)調(diào)用關(guān)系:
-
打開 “Call Stack” 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Call Stack”,以打開 “Call Stack” 窗口。
-
觀察調(diào)用棧信息:
- “Call Stack” 窗口將顯示當(dāng)前程序執(zhí)行的調(diào)用棧信息。每個(gè)條目表示一個(gè)函數(shù)調(diào)用,包括函數(shù)的名稱、地址等信息。通常,調(diào)用棧的頂部是當(dāng)前正在執(zhí)行的函數(shù)。
-
切換到不同的調(diào)用幀:
- 你可以在 “Call Stack” 窗口中選擇不同的調(diào)用幀,以查看相應(yīng)函數(shù)的局部變量和調(diào)用關(guān)系。雙擊 “Call Stack” 窗口中的特定條目,或者通過右鍵菜單中的選項(xiàng)進(jìn)行切換。
查看局部變量:
-
選擇調(diào)用幀:
- 在 “Call Stack” 窗口中選擇一個(gè)特定的調(diào)用幀,即一個(gè)函數(shù)調(diào)用。這將會(huì)更新其他窗口,顯示該調(diào)用幀的相關(guān)信息。
-
打開 “Locals” 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Locals”,以打開 “Locals” 窗口。這個(gè)窗口將顯示當(dāng)前調(diào)用幀的局部變量。
-
觀察局部變量的值:
- “Locals” 窗口將列出當(dāng)前調(diào)用幀中的局部變量,并顯示它們的值。你可以通過檢查這些值來了解函數(shù)在執(zhí)行時(shí)局部變量的狀態(tài)。
通過以上步驟,你可以在 Keil μVision 中使用 “Call Stack” 窗口查看函數(shù)調(diào)用關(guān)系和局部變量。這對(duì)于程序調(diào)試和理解代碼的執(zhí)行流程非常有幫助。請(qǐng)注意,具體的操作步驟可能會(huì)因軟件版本而有所不同。
Watch 窗口(監(jiān)視窗口):查看函數(shù)首地址&變量值
在 Keil μVision 中,“Watch”(監(jiān)視)窗口是一個(gè)用于查看變量值和函數(shù)首地址的工具。通過這個(gè)窗口,你可以監(jiān)視程序執(zhí)行過程中的變量值,并且也可以查看函數(shù)的首地址。以下是在 Keil μVision 中使用 “Watch” 窗口的一般步驟:
查看函數(shù)首地址:
-
打開 “Watch” 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Watch”,以打開 “Watch” 窗口。
-
添加函數(shù)地址:
- 在 “Watch” 窗口中,你可以手動(dòng)添加要監(jiān)視的變量或表達(dá)式。為了查看函數(shù)的首地址,你可以在 “Watch” 窗口中輸入函數(shù)的名稱,然后按下回車鍵。
-
觀察函數(shù)地址:
- 如果函數(shù)名是有效的,“Watch” 窗口將顯示該函數(shù)的首地址。這對(duì)于了解函數(shù)在內(nèi)存中的位置非常有幫助。
查看變量值:
-
添加變量:
- 在 “Watch” 窗口中,你可以手動(dòng)添加要監(jiān)視的變量。為了查看變量的值,輸入變量的名稱,然后按下回車鍵。
-
觀察變量值:
- 如果變量名是有效的,“Watch” 窗口將顯示該變量的當(dāng)前值。你可以在程序執(zhí)行過程中觀察變量值的變化。
使用表達(dá)式:
除了直接輸入函數(shù)名或變量名外,你還可以使用表達(dá)式。例如,你可以輸入類似于 &myFunction
來查看函數(shù)地址,或者輸入 myVariable
來查看變量的值。
請(qǐng)注意,“Watch” 窗口還支持更復(fù)雜的表達(dá)式,這使得你可以監(jiān)視計(jì)算得出的值。
通過以上步驟,你可以在 Keil μVision 中使用 “Watch” 窗口查看函數(shù)首地址和變量值。這對(duì)于程序調(diào)試和監(jiān)視特定變量在執(zhí)行過程中的變化非常有用。具體的操作步驟可能會(huì)因軟件版本而有所不同。
Watch窗口:設(shè)置全局變量在被讀或?qū)懞笞詣?dòng)停止運(yùn)行
在 Keil μVision 的 “Watch” 窗口中,通常是沒有直接提供在全局變量被讀或?qū)懞笞詣?dòng)停止運(yùn)行的選項(xiàng)。然而,你可以使用條件斷點(diǎn)來實(shí)現(xiàn)類似的效果,以在特定的變量被讀或?qū)憰r(shí)觸發(fā)斷點(diǎn)并停止運(yùn)行。
以下是一般的步驟:
-
打開 “Watch” 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Watch”,以打開 “Watch” 窗口。
-
右鍵單擊變量并選擇 “Add Watch”:
- 在 “Watch” 窗口中,右鍵單擊你想要監(jiān)視的全局變量,并選擇 “Add Watch”。
-
打開 “Breakpoints” 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Breakpoints”,以打開 “Breakpoints” 窗口。
-
添加條件斷點(diǎn):
- 在 “Breakpoints” 窗口中,右鍵單擊,并選擇 “Add Breakpoint”。
- 在彈出的對(duì)話框中,將 “Type” 設(shè)置為 “Read” 或 “Write”,具體取決于你想要監(jiān)視的操作。
- 在 “Expression” 中輸入你要監(jiān)視的全局變量的名稱。
-
設(shè)置斷點(diǎn)條件:
- 在 “Condition” 中輸入條件,例如
myVariable == desiredValue
,這樣當(dāng)變量滿足條件時(shí),斷點(diǎn)才會(huì)觸發(fā)。
- 在 “Condition” 中輸入條件,例如
-
點(diǎn)擊 “OK”:
- 點(diǎn)擊 “OK” 來添加條件斷點(diǎn)。
現(xiàn)在,當(dāng)全局變量被讀或?qū)懖⑶覞M足你設(shè)置的條件時(shí),程序?qū)?huì)在該點(diǎn)停止運(yùn)行。請(qǐng)確保在條件斷點(diǎn)處設(shè)置了合適的條件,以便在滿足條件時(shí)才觸發(fā)斷點(diǎn)。
請(qǐng)注意,具體的操作步驟可能會(huì)因軟件版本而有所不同。如果有關(guān)特定版本的更多信息,請(qǐng)參考 Keil μVision 的文檔或在線幫助。
Memory窗口(內(nèi)存窗口):內(nèi)存查看窗口
在 Keil μVision 中,“Memory”(內(nèi)存)窗口是一個(gè)用于查看和修改目標(biāo)設(shè)備內(nèi)存內(nèi)容的工具。通過這個(gè)窗口,你可以查看程序和數(shù)據(jù)在內(nèi)存中的布局,監(jiān)視內(nèi)存的變化,并在需要時(shí)手動(dòng)修改內(nèi)存中的數(shù)據(jù)。以下是在 Keil μVision 中使用 “Memory” 窗口的一般步驟:
打開 Memory 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Memory”,以打開 “Memory” 窗口。
Memory 窗口的基本功能:
-
選擇 Memory Map:
- 在 “Memory” 窗口中,你可以選擇查看不同的 Memory Map,包括 Code、Data、和其他特定區(qū)域。
-
指定起始地址和長度:
- 你可以在 “Memory” 窗口的工具欄或右鍵菜單中指定要查看的內(nèi)存范圍的起始地址和長度。
-
查看內(nèi)存內(nèi)容:
- “Memory” 窗口會(huì)顯示所選內(nèi)存范圍的內(nèi)容,包括十六進(jìn)制和 ASCII 表示。你可以在窗口中上下滾動(dòng),查看不同地址的數(shù)據(jù)。
-
查看變量地址:
- 在 “Memory” 窗口中,你可以查找和查看程序中的特定變量的地址,以了解其在內(nèi)存中的位置。
-
修改內(nèi)存內(nèi)容:
- 你可以手動(dòng)修改內(nèi)存中的數(shù)據(jù)。在需要修改的位置雙擊,并輸入新的十六進(jìn)制值。
-
監(jiān)視變量地址的變化:
- 通過在 “Memory” 窗口中設(shè)置斷點(diǎn),你可以監(jiān)視特定變量地址的變化,以便在內(nèi)存發(fā)生變化時(shí)自動(dòng)停止運(yùn)行。
-
搜索特定值:
- “Memory” 窗口通常提供搜索功能,你可以使用搜索來找到特定的值或模式。
請(qǐng)注意,使用 “Memory” 窗口修改內(nèi)存數(shù)據(jù)可能對(duì)程序的行為產(chǎn)生影響,所以在進(jìn)行修改時(shí)要小心。此外,具體的操作步驟可能會(huì)因軟件版本而有所不同。如果有關(guān)特定版本的更多信息,請(qǐng)參考 Keil μVision 的文檔或在線幫助。
Peripheral窗口(外設(shè)窗口):查看寄存器的值
在 Keil μVision 中,“Peripheral”(外設(shè))窗口是一個(gè)用于查看和編輯目標(biāo)設(shè)備外設(shè)寄存器的工具。通過這個(gè)窗口,你可以輕松地瀏覽和修改芯片上與外設(shè)相關(guān)的寄存器值。以下是在 Keil μVision 中使用 “Peripheral” 窗口的一般步驟:
打開 Peripheral 窗口:
- 在 Keil μVision 的菜單欄中,選擇 “View” -> “Peripherals”,以打開 “Peripherals” 窗口。
Peripheral 窗口的基本功能:
-
選擇外設(shè):
- 在 “Peripherals” 窗口中,你可以選擇要查看和編輯的外設(shè)。通常,它會(huì)列出目標(biāo)設(shè)備上的各種外設(shè),如GPIO、USART、SPI等。
-
查看寄存器:
- “Peripherals” 窗口會(huì)顯示所選外設(shè)的相關(guān)寄存器及其當(dāng)前值。你可以在窗口中輕松瀏覽這些寄存器。
-
編輯寄存器值:
- 你可以手動(dòng)編輯寄存器的值,以修改外設(shè)的配置。在 “Peripherals” 窗口中,通??梢灾苯与p擊寄存器的值進(jìn)行編輯。
-
查看寄存器位(Bits):
- 對(duì)于每個(gè)寄存器,你可以查看其各個(gè)位(Bits)的值。這對(duì)于了解寄存器各個(gè)位的作用和配置非常有幫助。
-
查看寄存器描述:
- “Peripherals” 窗口通常還提供了寄存器的描述信息,幫助你理解寄存器的功能和作用。
-
查看外設(shè)的全局信息:
- 有些 “Peripherals” 窗口可能還提供了外設(shè)的全局信息,例如時(shí)鐘頻率、狀態(tài)等。
通過 “Peripheral” 窗口,你可以直觀地查看和編輯與目標(biāo)設(shè)備上的外設(shè)相關(guān)的寄存器值,這對(duì)于調(diào)試和配置外設(shè)非常有幫助。請(qǐng)注意,具體的操作步驟可能會(huì)因軟件版本和目標(biāo)設(shè)備而有所不同。如果有關(guān)特定版本的更多信息,請(qǐng)參考 Keil μVision 的文檔或在線幫助。
外設(shè)寄存器
這是一些常見的外設(shè),它們對(duì)應(yīng)了一些典型的嵌入式系統(tǒng)中常見的功能和模塊。以下是對(duì)每個(gè)外設(shè)的簡要說明:
-
ADC(模數(shù)轉(zhuǎn)換器):
- 用于將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。
-
AFIO(復(fù)用功能IO):
- 管理IO引腳的復(fù)用功能,允許配置引腳的不同功能。
-
BKP(后備寄存器):
- 提供用于存儲(chǔ)系統(tǒng)配置和狀態(tài)信息的后備存儲(chǔ)。
-
CAN(控制器局域網(wǎng)):
- 實(shí)現(xiàn)控制器局域網(wǎng)通信協(xié)議,用于在系統(tǒng)內(nèi)部或外部進(jìn)行高速通信。
-
CRC(循環(huán)冗余校驗(yàn)):
- 用于執(zhí)行循環(huán)冗余校驗(yàn),通常用于數(shù)據(jù)傳輸?shù)腻e(cuò)誤檢測(cè)。
-
DAC(數(shù)字模擬轉(zhuǎn)換器):
- 用于將數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)。
-
DBG(調(diào)試支持):
- 提供調(diào)試功能的支持,例如斷點(diǎn)、單步執(zhí)行等。
-
DMA(直接存儲(chǔ)器訪問):
- 用于實(shí)現(xiàn)高速數(shù)據(jù)傳輸,減輕處理器的負(fù)擔(dān)。
-
EXTI(外部中斷):
- 管理外部中斷引腳,用于檢測(cè)外部事件。
-
FLASH(閃存存儲(chǔ)):
- 用于存儲(chǔ)程序代碼和數(shù)據(jù)。
-
FSMC(靜態(tài)存儲(chǔ)器控制器):
- 用于連接外部存儲(chǔ)器,如SRAM、NOR Flash等。
-
GPIO(通用輸入輸出):
- 用于配置和管理IO引腳,實(shí)現(xiàn)通用輸入輸出功能。
-
I2C(Inter-Integrated Circuit):
- 實(shí)現(xiàn)I2C通信協(xié)議,用于連接各種外設(shè)。
-
IWDG(獨(dú)立看門狗):
- 提供系統(tǒng)復(fù)位功能,以確保系統(tǒng)在長時(shí)間無響應(yīng)時(shí)進(jìn)行復(fù)位。
-
NVIC(中斷控制器):
- 管理處理器的中斷。
-
PWR(電源控制):
- 管理系統(tǒng)的電源模式和低功耗模式。
-
RCC(時(shí)鐘控制):
- 用于配置系統(tǒng)時(shí)鐘。
-
RTC(實(shí)時(shí)時(shí)鐘):
- 提供實(shí)時(shí)時(shí)鐘和日歷功能。
-
SDIO(安全數(shù)字輸入輸出):
- 用于連接SD卡等設(shè)備。
-
SPI(串行外設(shè)接口):
- 實(shí)現(xiàn)SPI通信協(xié)議,用于連接外設(shè)。
-
TIM(定時(shí)器):
- 用于生成定時(shí)中斷或脈沖,執(zhí)行定時(shí)任務(wù)。
-
USART(通用同步異步收發(fā)器):
- 用于實(shí)現(xiàn)串口通信。
-
USB(通用串行總線):
- 實(shí)現(xiàn)USB通信協(xié)議,用于連接USB設(shè)備。
-
WWDG(窗口看門狗):
- 提供看門狗計(jì)時(shí)器功能,用于監(jiān)控系統(tǒng)運(yùn)行狀態(tài)。
這些外設(shè)在嵌入式系統(tǒng)中發(fā)揮著不同的作用,允許開發(fā)者通過它們來實(shí)現(xiàn)豐富的功能和應(yīng)用。每個(gè)外設(shè)都有一組相關(guān)的寄存器,通過配置和操作這些寄存器,可以控制外設(shè)的行為。在具體的芯片手冊(cè)或數(shù)據(jù)手冊(cè)中,會(huì)詳細(xì)描述每個(gè)外設(shè)的寄存器布局和功能。
內(nèi)核寄存器
在嵌入式系統(tǒng)中,有一些關(guān)鍵的內(nèi)核寄存器和模塊,包括 NVIC(中斷控制器)、System Control and Configuration(系統(tǒng)控制和配置)、System Tick Timer(系統(tǒng)滴答定時(shí)器)以及 Fault Reports(故障報(bào)告)等。以下是對(duì)這些模塊的簡要說明:
1. NVIC(中斷控制器):
NVIC(Nested Vector Interrupt Controller) 是一種用于管理和控制中斷的模塊。其主要功能包括:
-
中斷優(yōu)先級(jí)管理: 確定各個(gè)中斷的優(yōu)先級(jí),允許高優(yōu)先級(jí)中斷打斷低優(yōu)先級(jí)中斷。
-
中斷使能和禁用: 允許或禁用特定中斷。
-
中斷向量表: 存儲(chǔ)中斷服務(wù)程序的地址,用于確定中斷的處理函數(shù)。
2. System Control and Configuration(系統(tǒng)控制和配置):
這個(gè)模塊通常包括一系列寄存器,用于配置處理器的基本行為和系統(tǒng)特性。其功能包括:
-
處理器狀態(tài): 包括控制位、標(biāo)志位等,用于配置處理器狀態(tài)。
-
時(shí)鐘控制: 配置處理器時(shí)鐘的源、分頻等。
-
系統(tǒng)控制: 配置處理器的一些基本特性,如端序、對(duì)齊方式等。
3. System Tick Timer(系統(tǒng)滴答定時(shí)器):
System Tick Timer 是一個(gè)用于提供系統(tǒng)定時(shí)的模塊,通常用于操作系統(tǒng)的時(shí)間片輪轉(zhuǎn)等。其主要功能包括:
-
定時(shí)中斷: 提供定期中斷,可用于系統(tǒng)心跳、時(shí)間片輪轉(zhuǎn)等。
-
定時(shí)計(jì)數(shù)器: 提供一個(gè)可配置的計(jì)數(shù)器,用于測(cè)量時(shí)間間隔。
4. Fault Reports(故障報(bào)告):
這個(gè)模塊通常包括一系列寄存器,用于報(bào)告和處理處理器的故障條件。其功能包括:
-
故障狀態(tài)寄存器: 記錄處理器的故障狀態(tài),如硬件故障、內(nèi)存錯(cuò)誤等。
-
故障中斷使能: 允許或禁用對(duì)故障的中斷響應(yīng)。
這些內(nèi)核寄存器和模塊在處理器的正常運(yùn)行和異常處理中發(fā)揮著關(guān)鍵作用。程序員可以通過配置這些寄存器來實(shí)現(xiàn)對(duì)中斷的管理、系統(tǒng)的配置和定時(shí)等功能。詳細(xì)的信息通常包含在處理器的參考手冊(cè)或技術(shù)文檔中。
4.5、仿真時(shí)要注意的點(diǎn)
在嵌入式系統(tǒng)的仿真和調(diào)試過程中,確實(shí)需要考慮一些關(guān)鍵的點(diǎn)。你提到的一些注意事項(xiàng)是非常重要的,以下是一些常見的仿真時(shí)需要注意的點(diǎn):
-
優(yōu)化級(jí)別選擇:
- 在仿真過程中,選擇適當(dāng)?shù)木幾g優(yōu)化級(jí)別非常重要。有時(shí)候,為了更好地觀察代碼的執(zhí)行流程和變量的值,可以選擇較低的優(yōu)化級(jí)別。在MDK中,Level 0優(yōu)化通常會(huì)保留更多的源代碼結(jié)構(gòu),有助于調(diào)試。
-
調(diào)試停止的影響:
- 當(dāng)在斷點(diǎn)處停止時(shí),確實(shí)只是內(nèi)核停止執(zhí)行,而外設(shè)可能繼續(xù)運(yùn)行。這一點(diǎn)在與外部設(shè)備通信或執(zhí)行定時(shí)任務(wù)時(shí)尤其需要注意。在仿真期間,特別是在調(diào)試期間,要確保了解停止執(zhí)行對(duì)系統(tǒng)其他部分的影響。
-
斷點(diǎn)設(shè)置的時(shí)間觀念:
- 設(shè)置斷點(diǎn)時(shí),需要考慮是否會(huì)打斷正常的通信和定時(shí)操作。某些外設(shè)和通信協(xié)議對(duì)實(shí)時(shí)性要求較高,設(shè)置斷點(diǎn)可能導(dǎo)致系統(tǒng)無法按照預(yù)期執(zhí)行。在設(shè)置斷點(diǎn)時(shí),最好選擇在不影響關(guān)鍵操作的地方進(jìn)行。
-
時(shí)序和同步問題:
- 在仿真中,可能無法準(zhǔn)確模擬實(shí)際硬件上的時(shí)序和同步問題。某些實(shí)時(shí)系統(tǒng)和通信協(xié)議對(duì)時(shí)序要求較高,因此在仿真時(shí)要仔細(xì)驗(yàn)證這些方面的問題。
-
外設(shè)仿真模型的準(zhǔn)確性:
- 確保使用的仿真工具具有準(zhǔn)確的外設(shè)仿真模型。某些外設(shè)的行為可能受到實(shí)際硬件特性的影響,而仿真模型可能并不總是完全準(zhǔn)確。
-
觀察寄存器和變量值:
- 利用仿真工具中的觀察工具,關(guān)注關(guān)鍵寄存器和變量的值。這對(duì)于了解系統(tǒng)狀態(tài)和調(diào)試代碼非常有幫助。
在進(jìn)行仿真和調(diào)試時(shí),仔細(xì)考慮這些因素有助于更有效地發(fā)現(xiàn)和解決問題。此外,定期參考仿真工具和處理器的文檔以獲取更多有關(guān)仿真的最佳實(shí)踐和注意事項(xiàng)。文章來源:http://www.zghlxwxcb.cn/news/detail-829280.html
五、總結(jié)
文章來源地址http://www.zghlxwxcb.cn/news/detail-829280.html
到了這里,關(guān)于【正點(diǎn)原子STM32】STM32初體驗(yàn)(Keil MDK工具下載使用、DAP仿真器、MDK上配置DAP、Debug)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!