久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

STM32 使用 Keil MDK 中的軟件邏輯分析儀參與硬件調(diào)試

 LMBIO 2018-08-09

這篇文章翻譯自 ARM Keil Application Note 230 (1.2版)的前半部分,。其中包括 STM32F4 處理器在 Keil MDK 中進(jìn)行斷點(diǎn)調(diào)試、變量實(shí)時(shí)觀察,,及邏輯分析儀參與硬件調(diào)試的實(shí)驗(yàn),。

原文使用的是 STM32F4-Discovery 開發(fā)板,我這里都改用 NUCLEO-F401RE 實(shí)現(xiàn)了,。Discovery 板卡在新版本的 Pack Installer 中已沒(méi)有 Blinky 例程支持,,可以用 CMSIS-RTOS Blinky 來(lái)做,變量定義的位置等會(huì)有變化,。

1) Keil 評(píng)估軟件:MDK 4.7x 和 MDK 5

MDK 5 以 Software Pack 的形式分發(fā)特定于處理器的軟件,、例程和中間件(middleware)。安裝 MDK 5 之后,,需要從網(wǎng)絡(luò)上下載這些 Pack,。這些 Pack 也可以手動(dòng)導(dǎo)入。

MDK 4.7x 目前也是可用的,。這個(gè)版本的 MDK 會(huì)包含程序運(yùn)行所需要的所有文件,,不使用 MDK 5 的 Software Pack。這篇文檔的 MDK 4 版本可以在這個(gè)鏈接找到:http://www./appnotes/docs/apnt_261.asp,。

Keil 網(wǎng)站上有 MDK 5 的 Legacy 支持軟件,,安裝之后可以在 MDK 5 中使用 MDK 4 的工程,,而不需要任何的 Software Pack。

我們建議使用 MDK 5.10 Software Pack,,本文會(huì)持續(xù)跟進(jìn)新的版本(譯者注:并沒(méi)有>_<,,我在用5.17,如有區(qū)別會(huì)注明),。

Keil 針對(duì)各種 STM32 處理器有許多類似的實(shí)驗(yàn)手冊(cè),,比如 CAN 的使用。詳見(jiàn)www./st,。

這篇文檔針對(duì) MDK 5.10 及更新版本。

2) 下載和安裝 Keil 軟件

  1. 從 Keil 網(wǎng)站上下載 MDK 5.10 或更新的版本:www./mdk5/install Download MDK-Core

  2. 將 MDK 安裝到默認(rèn)路徑,。安裝到其他路徑也是可以的,,本教程會(huì)以默認(rèn)路徑為例:C:\Keil_v5

  3. 本教程使用C:\MDK\做為例程目錄,,建議同樣使用這個(gè)默認(rèn)路徑,。

  4. 如果 MDK 安裝在其他路徑,實(shí)驗(yàn)中需要做對(duì)應(yīng)的路徑修改,。

  5. (譯者注:原文沒(méi)有5,,P.S. 上面這一段真貧)

  6. Keil 網(wǎng)站上可以找到 DSP5 例程。

  7. 這個(gè)實(shí)驗(yàn)可以用評(píng)估版本(MDK-Lite)來(lái)完成,,不需要購(gòu)買授權(quán),。

  8. 不需要額外的調(diào)試器,只需準(zhǔn)備 NUCLEO-F401RE 開發(fā)板,、USB 線,,以及在電腦上安裝 MDK 5.10 就可以了(譯者注:原文使用的是 STM32F4-Discovery 開發(fā)板)。

3) 板載 ST-Link V2 調(diào)試器

這篇教程僅適用于板載的 ST-Link V2 調(diào)試器,,后文將給出 ST-Link V2 的配置說(shuō)明,,及 ST-Link V2 驅(qū)動(dòng)程序的測(cè)試。

4) 例程

MDK 5 Software Pack 里面有 Blinky 和 RTX_Blinky 例程,,我們會(huì)用到其中的 Blinky,。另外在本文最新版的網(wǎng)站上可以找到增強(qiáng)版的 RTX_Blinky5 和 DSP 例程(DSP5):http://www./appnotes/docs/apnt_230.asp

5) MDK 5 入門

《Getting Started MDK 5》是一部很有用的手冊(cè),,可以在 Keil 網(wǎng)站上找到:http://www./mdk5/,。

6) μVision Software Pack 的下載和安裝步驟

1) 啟動(dòng) μVision 并打開 Pack Installer

在 MDK 剛安裝完成的時(shí)候,如果電腦連接到了外網(wǎng)上,,μVision 和 Software Pack 會(huì)自動(dòng)啟動(dòng),。其他情況下,需要按照這里的步驟1)和2)來(lái)做,。

(譯者注:由于軟件版本和板卡的區(qū)別,,這一部分和原文略有不同。)

  1. 將電腦連接到外網(wǎng)上,下載 Software Pack 需要外網(wǎng)連接,。

  2. 點(diǎn)擊桌面上的圖標(biāo) Keil圖標(biāo) 啟動(dòng) μVision,。

  3. 點(diǎn)擊工具欄上的按鈕 Pack Installer 按鈕 打開 Pack Installer。如果出現(xiàn) Pack Installer 歡迎界面,,閱讀之后關(guān)閉它,。

  4. 這里應(yīng)該出現(xiàn)下面這個(gè)窗口。在 Board 選項(xiàng)卡中,,選擇 NUCLEO-F401RE,,右側(cè) Packs 選項(xiàng)卡中的列表會(huì)自動(dòng)篩選。
    Pack Installer

  5. 也可以在 Search 欄輸入 NUCLEO 進(jìn)行篩選,。

  6. 注意:窗口右下角應(yīng)該顯示“ONLINE”,。如果顯示的是“OFFLINE”,請(qǐng)檢查外網(wǎng)連接之后再繼續(xù)下面的步驟,。

  7. 如果在 Pack Installer 啟動(dòng)的時(shí)候沒(méi)有連接到外網(wǎng),,列表中將不會(huì)顯示內(nèi)容。這時(shí)候需要在連接到網(wǎng)絡(luò)后,,點(diǎn)擊菜單 Packs/Check for Updates 或者工具欄中的 Check for Updates 刷新一下,。

2) 安裝 STM32F4 Software Pack

  1. 點(diǎn)擊 Packs 選項(xiàng)卡,可以看到 ARM::CMSIS Software Pack 是默認(rèn)安裝好的,。

  2. 選擇 Keil::STM32F4xx_DFP 和 Keil::STM32NUCLEO_BSP 并點(diǎn)擊 Install,,這兩個(gè) Software Pack 會(huì)下載并安裝在默認(rèn)文件夾 C:\Keil_v5\ARM\Pack\Keil 中。下載估計(jì)需要兩三分鐘的時(shí)間,。

  3. 下載完成后,,應(yīng)顯示“Up to date”狀態(tài):Up to Date

3) 安裝 Blinky MDK 例程

  1. 選擇 Examples 選項(xiàng)卡,,出現(xiàn)如下窗口:
    Examples

  2. 選擇 Blinky (NUCLEO-F401RE),。

  3. 點(diǎn)擊 Copy Copy

  4. Copy Example 窗口如圖所示,。選擇 Use Pack Folder Structure,,取消選擇 Launch μVision。
    Copy Example

  5. 輸入 C:\MDK,,點(diǎn)擊 OK 完成 Blinky 工程的復(fù)制,。

  6. Blinky 工程已經(jīng)復(fù)制到 C:\MDK\Boards\ST\NUCLEO-F401RE 了。

  7. 不需要復(fù)制 CMSIS-RTOS Blinky 程序,,我們會(huì)有一個(gè)更有意思的4線程版本,。

    提示:復(fù)制例程時(shí),一開始的默認(rèn)路徑是 C:\Users\< user >\Documents,,這篇教程使用 C:\MDK\ 做為默認(rèn)路徑,。實(shí)際上可以選擇任意路徑,。

  8. 關(guān)閉 Pack Installer。以后隨時(shí)可以通過(guò)點(diǎn)擊圖標(biāo) Pack Installer 按鈕 來(lái)打開,。

提示:Update 按鈕說(shuō)明 Software Pack 有更新可以下載 Update,。

提示:如果找到目錄 C:\Keil_v5\ARM\Pack\Keil\STM32NUCLEO_BSP\1.4.0\Boards\ST\NUCLEO-F401RE,可以發(fā)現(xiàn)里面也有一個(gè) Blinky,。這個(gè)版本是只讀的,,做為備份用。請(qǐng)使用從 Pack Installer 的 Examples 選項(xiàng)卡復(fù)制出來(lái)的工程,,本教程中存放在 C:\MDK,。

4) 從 Keil.com 上安裝 RTX_Blinky5 和 DSP5 例程

  1. http://www./appnotes/docs/apnt_230.asp 上獲得例程的 zip 文件。

  2. 解壓縮到 C:\MDK\Boards\ST\STM32F4-Discovery\,。(譯者注:這個(gè)程序是對(duì) Discovery 開發(fā)板的,。)

7) 測(cè)試 ST-Link V2 的連接

  1. 用 USB 線將 NUCLEO 開發(fā)板連接到電腦上。

  2. 如果 ST-Link USB 驅(qū)動(dòng)程序安裝正確,,應(yīng)該可以聽(tīng)到正常的 USB 設(shè)備連接的系統(tǒng)聲音。否則需要根據(jù)下一章的指示,,手動(dòng)安裝驅(qū)動(dòng)程序,。

  3. 兩個(gè)紅色 LED 應(yīng)該點(diǎn)亮:LD1 (COM)和 LD3(PWR)。

  4. 啟動(dòng) μVision Keil圖標(biāo) 并選擇 Project/Open Project,。

  5. 選擇 Blinky 工程 C:\MDK\Boards\ST\NUCLEO-F401RE\Blinky\Blinky.uvprojx,。

  6. 在這個(gè)地方選擇 STM32F401 Flash:Project Option

  7. 點(diǎn)擊 Target Options Target Options 或者按 ALT+F7,,并選擇 Debug 選項(xiàng)卡:
    Debugger Selection

  8. 點(diǎn)擊 Settings,,會(huì)出現(xiàn)下面所示的窗口。如果顯示出了 IDCODE 和 Device Name,,說(shuō)明 ST-Link 工作良好,,可以繼續(xù)下面的教程。點(diǎn)擊兩次 OK 返回 μVision 主界面,。
    Target Setup

  9. 上圖中 Serial Number 框里出現(xiàn)一串?dāng)?shù)字說(shuō)明 ST-Link 調(diào)試器已經(jīng)連接到了 μVision,。

  10. 如果 SW Device 框中沒(méi)有顯示,或者顯示 error,,這個(gè)問(wèn)題在繼續(xù)本教程之前必須要解決,。請(qǐng)參照下一節(jié)內(nèi)容:安裝 ST-Link USB 驅(qū)動(dòng)程序。

  11. 如果已經(jīng)顯示正常,,ST-Link USB 驅(qū)動(dòng)程序安裝良好,。點(diǎn)擊兩次 OK 退出 Target Options 窗口并從第9章繼續(xù)。

提示:在上圖 Port 框中選擇 JTAG,,然后在選回 SW,,可以刷新 SW Device 框的顯示,。也可以關(guān)閉再重新打開這個(gè)窗口。

提示:ST-Link V2 和 ST-Link 的主要區(qū)別是添加了 Serial Wire Viewer (SWV) 跟蹤功能,。

8) 安裝 ST-Link USB 驅(qū)動(dòng)程序

如果上面的測(cè)試沒(méi)有問(wèn)題,,則不需要進(jìn)行這一步。

安裝 ST-Link USB 驅(qū)動(dòng)程序:(當(dāng)上面的測(cè)試沒(méi)有通過(guò)時(shí))

  1. 先斷開 NUCLEO 開發(fā)板和電腦之間的 USB 連接,。

  2. 需要手動(dòng)運(yùn)行 stlink_winusb_install.bat 來(lái)安裝 USB 驅(qū)動(dòng),,這個(gè)文件存放在 C:\Keil_v5\ARM\STLink\USBDriver 中。找到這個(gè)文件并雙擊來(lái)安裝驅(qū)動(dòng)程序,。

  3. 連接 NUCLEO 的 USB,,USB 驅(qū)動(dòng)程序應(yīng)該會(huì)以正常的方式安裝完畢。

重要提示:ST-Link V2 固件升級(jí)程序 ST-LinkUpgrade.exe 存放在 C:\Keil_v5\ARM\STLink,。如果要更新 ST-Link 固件,,找到并雙擊這個(gè)程序,操作還是比較簡(jiǎn)單的,,程序會(huì)檢查并報(bào)告當(dāng)前的固件版本,。請(qǐng)注意我們需要使用 V2.J16.S0 或更高的版本來(lái)支持 SWV 操作。另外不要使用 V2.J19.S0,,這一版本與最新版驅(qū)動(dòng)程序不兼容,。
(譯者注:V2.J19.S0 不兼容估計(jì)是個(gè)歷史問(wèn)題,我已經(jīng)在用 MDK 5.17 和 V2.J24.M11 版本了,。)

COM LED LD1 的含義:

LED 紅色閃爍:電腦開始 USB 枚舉,,但還未完成。
LED 紅色:電腦和 ST-LINK/V2 之間已經(jīng)建立連接(枚舉結(jié)束),,但 μVision 還沒(méi)有連接到 ST-Link (比如 Debug 模式),。
LED 綠色:μVision 以 Debug 模式連接到 ST-Link,上一個(gè)通信是成功的,。
LED 紅色,、綠色間隔閃爍:μVision 和目標(biāo)之間正在交換數(shù)據(jù)。
LED 熄滅,,但當(dāng)進(jìn)入 Debug 模式或點(diǎn)擊 RUN 時(shí)閃爍一下:μVision 的 SWV 跟蹤已啟動(dòng),。
LED 熄滅:ST-LINK/V2 與目標(biāo) MCU 或 μVision 之間的連接失敗,需要重新連接電源以重啟開發(fā)板,。

9) 使用 NUCLEO 開發(fā)板運(yùn)行 Blinky 例程

我們將使用板載 ST-Link V2 調(diào)試器連接 Keil MDK 開發(fā)平臺(tái)和真實(shí)的目標(biāo)硬件,。

  1. 點(diǎn)擊桌面圖標(biāo) Keil圖標(biāo) 啟動(dòng) μVision,用 USB 線將 NUCLEO 開發(fā)板的 CN1 連接到電腦上,。

  2. 選擇 Project/Open Project,,打開文件 C:\MDK\Boards\ST\NUCLEO-F401RE\Blinky\Blinky.uvprojx

  3. ST-Link 會(huì)默認(rèn)被選擇,。第一次運(yùn)行 μVision 和 NUCLEO 開發(fā)板的時(shí)候,,可能需要安裝 USB 驅(qū)動(dòng)程序,,詳見(jiàn)上面章節(jié)。

  4. 點(diǎn)擊 Rebuild 圖標(biāo) Rebuild 編譯源文件,。也可以用旁邊的 Build 圖標(biāo) Build,。

  5. 點(diǎn)擊 Load 圖標(biāo) Load 對(duì) STM32 的 flash 進(jìn)行編程。Output 窗口中會(huì)顯示這個(gè)過(guò)程,。

  6. 點(diǎn)擊 Debug 圖標(biāo) Debug 進(jìn)入 Debug 模式,,如果出現(xiàn) Evaluation Mode 對(duì)話框,點(diǎn)擊 OK,。
    注意: 當(dāng)下載到 flash 時(shí)才需要使用 Load 圖標(biāo),,如果選擇的是 RAM 運(yùn)行則不需要。

  7. 點(diǎn)擊 RUN 圖標(biāo) RUN,。注意:點(diǎn)擊 STOP 圖標(biāo) STOP 可以停止程序運(yùn)行,。

NUCLEO 開發(fā)板上的綠色 LED 會(huì)開始閃爍。
按下開發(fā)板上藍(lán)色的 USER 按鍵會(huì)暫停閃爍,。

至此你已經(jīng)了解如何編譯工程,、下載到 STM32 處理器的 flash 中、運(yùn)行并停止程序,!

注意: Blinky 程序已經(jīng)永久的燒寫到 flash 中了,,開發(fā)板可以獨(dú)立運(yùn)行這個(gè)程序,直到下一次被燒寫,。

10) 硬件斷點(diǎn)

STM32F4 共有六個(gè)硬件斷點(diǎn),可以在程序運(yùn)行過(guò)程中隨時(shí)設(shè)置或取消,。

  1. 在 Blinky 程序運(yùn)行過(guò)程中,,打開 Blinky.c 文件,點(diǎn)擊 main() 函數(shù)中 for 循環(huán)里的某一行左側(cè)邊緣深灰色區(qū)域,。

  2. 會(huì)出現(xiàn)一個(gè)紅色的圓形標(biāo)志,,程序會(huì)停止運(yùn)行。

  3. 請(qǐng)注意斷點(diǎn)同時(shí)顯示在源代碼窗口和反匯編窗口,,如下圖,。
    斷點(diǎn)

  4. 不論是反匯編窗口還是源代碼窗口,左側(cè)邊緣顯示深灰色方形的區(qū)域表示這些代碼行存在匯編指令,,可以在這里設(shè)置斷點(diǎn),。

  5. 每次點(diǎn)擊 RUN 圖標(biāo) RUN,程序會(huì)運(yùn)行到下一次遇到斷點(diǎn),。

  6. 可以嘗試點(diǎn)擊 Single Step(Step In)Step In ,、Step OverStep Over 和 Step OutStep Out

提示: 如果單步調(diào)試(Step In)不工作,,點(diǎn)擊 Disassembly 窗口使它成為焦點(diǎn),,可能需要點(diǎn)擊一行反匯編代碼,。這樣操作表示想要匯編級(jí)別的單步運(yùn)行,而不是 C 語(yǔ)言代碼級(jí)別,。

提示: ARM CoreSight 的斷點(diǎn)是 no-skid 的,,硬件斷點(diǎn)發(fā)生在被設(shè)置斷點(diǎn)的指令執(zhí)行之前(譯者注:有 skid 的斷點(diǎn)的意思是,程序停止在斷點(diǎn)設(shè)置的指令甚至后面幾個(gè)指令執(zhí)行之后),。另外 flash 中燒寫的指令不會(huì)被替代或修改,,這的特性對(duì)于高效率軟件開發(fā)有重要意義。

完成這個(gè)實(shí)驗(yàn)后,,再次點(diǎn)擊這些斷點(diǎn)以刪除它們,,為后面的實(shí)驗(yàn)做準(zhǔn)備。

提示: 可以通過(guò)點(diǎn)擊斷點(diǎn),,或者選擇 Debug/Breakpoints(或按 Ctrl+B)并選擇 Kill All 來(lái)刪除,。

提示: 可以通過(guò)選擇 Debug/Breakpoints 或按 Ctrl+B 來(lái)查看所有斷點(diǎn)的設(shè)置。

11) Call Stack + Locals 窗口

局部變量

Call Stack + Locals 窗口被合并在一個(gè)集成窗口中,,每當(dāng)程序停止時(shí)會(huì)顯示調(diào)用棧和當(dāng)前函數(shù)的所有局部變量,。

如果可能,局部變量的值會(huì)顯示,,否則顯示 < not in scope >,。菜單中的 View/Call Stack Window 用來(lái)切換 Call Stack + Locals 窗口顯示或隱藏。

  1. 運(yùn)行并停止 Blinky,,點(diǎn)擊 Call Stack + Locals 選項(xiàng)卡,。

  2. 下圖展示了Call Stack + Locals 窗口。
    Call Stack + Locals
    窗口中顯示了當(dāng)前活動(dòng)函數(shù)的名稱和局部變量列表,。隨同每個(gè)函數(shù)的名字會(huì)顯示它被哪個(gè)函數(shù)或中斷/異常調(diào)用,。
    當(dāng)函數(shù)退出時(shí),會(huì)從列表上移除,。
    最早調(diào)用的函數(shù)會(huì)出現(xiàn)在列表的底端,。
    這個(gè)列表只有在程序停止運(yùn)行時(shí)有效。

  3. 點(diǎn)擊 Step In 圖標(biāo) Step In 或按 F11 鍵,。

  4. 當(dāng)單步運(yùn)行到不同的函數(shù)時(shí),,觀察它們?cè)诖翱谏巷@示的變化。如果陷入到 Delay 函數(shù)的循環(huán)當(dāng)中,,可以用 Step Out Step Out 或 Ctrl+F11 鍵快速退出,。

  5. 點(diǎn)擊幾次 Step In,觀察其他函數(shù),。

  6. 右鍵點(diǎn)擊一個(gè)函數(shù)名,,嘗試 Show Callee Code 和 Show Caller Code 選項(xiàng)。
    Right Click Function Name

  7. 點(diǎn)擊 Step Out 圖標(biāo) Step Out 退出所有函數(shù),,返回 main(),。

提示: 如果單步調(diào)試(Step In)不工作,,點(diǎn)擊 Disassembly 窗口使它成為焦點(diǎn),可能需要點(diǎn)擊一行反匯編代碼來(lái)執(zhí)行匯編級(jí)別的單步運(yùn)行,。如果焦點(diǎn)在源代碼窗口上,,則是執(zhí)行 C 語(yǔ)言代碼級(jí)別的單步運(yùn)行。

提示: 可以在程序停止運(yùn)行時(shí),,通過(guò) Call Stack + Locals 窗口來(lái)修改變量的值,。

提示: 上述是標(biāo)準(zhǔn)的“Stop and Go”調(diào)試過(guò)程。ARM Coresight 調(diào)試技術(shù)還可以做很多更強(qiáng)大的事情,,比如在程序運(yùn)行中顯示并實(shí)時(shí)更新全局或靜態(tài)變量,,而不需要修改程序。由于局部變量通常存儲(chǔ)在 CPU 寄存器中,,不能在程序運(yùn)行時(shí)實(shí)時(shí)顯示,,需要轉(zhuǎn)換成全局或靜態(tài)變量使得作用域不會(huì)消失。

如果借助 ULINK pro 和 ETM 跟蹤,,可以記錄所有指令的執(zhí)行情況,。Disassambly 和 Source 窗口是按編寫的順序顯示代碼的,而 ETM 跟蹤可以按執(zhí)行的順序顯示,。另外 ETM 還提供 Code Coverage,、Performance Analysis 及 Execution Profiling 等功能。

把局部變量轉(zhuǎn)換成全局或靜態(tài)變量通常意味著把它從 CPU 寄存器移動(dòng)到 RAM 上,,CoreSight 在程序運(yùn)行中可以觀察 RAM,,但不能觀察 CPU 寄存器。

調(diào)用棧

如上面可以看到的,,當(dāng)程序停止運(yùn)行時(shí),,函數(shù)按棧的方式顯示在列表中。當(dāng)想要了解棧中有哪些函數(shù)被調(diào)用,、存儲(chǔ)的返回值是什么的時(shí)候,這個(gè)功能就很有用,。

提示: 可以在程序停止運(yùn)行時(shí),,通修改局部變量的值。

提示: 點(diǎn)擊菜單 Debug/Breakpoints 或按 Ctrl+B 鍵可以查看 Hardware Breakpoint 列表,,同時(shí)這也是配置 Watchpoint (觀察點(diǎn),,也叫 Access Point)的地方。在這個(gè)列表里可以臨時(shí)屏蔽某些項(xiàng)目,。點(diǎn)擊 Debug/Kill All Breakpoints 會(huì)刪除斷點(diǎn),,但不會(huì)刪除觀察點(diǎn)。

12) Watch 和 Memory 窗口及其使用方法

Watch 和 Memory 窗口實(shí)時(shí)顯示變量的值,,這是通過(guò) ARM CoreSight 調(diào)試技術(shù)實(shí)現(xiàn)的,,這項(xiàng)技術(shù)是包含在 Cortex-M 處理器中的一部分,。同時(shí),也可以在這些存儲(chǔ)器地址上實(shí)時(shí)地“put”或插入數(shù)值,。這兩個(gè)窗口都可以通過(guò)拖拽變量名,,或者手動(dòng)輸入來(lái)添加變量。

Watch 窗口

添加全局變量: 除非程序停止在局部變量所在的函數(shù),,否則 Watch 和 Memory 窗口不能觀察局部變量,。

  1. 停止運(yùn)行處理器 STOP 并退出 Debug 模式 Debug

  2. Blinky.c 的第24行左右,,聲明一個(gè)全局變量(這里變量名叫做 value):unsigned int value = 0;,。

  3. 在第104行左右添加語(yǔ)句 value++;if (value > 0x10) value = 0;,如圖:
    value Codes

  4. 選擇菜單 File/Save All 或點(diǎn)擊 Save All ,。

  5. 點(diǎn)擊 Rebuild Rebuild ,,點(diǎn)擊 Load Load 下載到 flash。

  6. 進(jìn)入 Debug 模式 Debug ,,點(diǎn)擊 RUN RUN ,,提示:可以在程序運(yùn)行中設(shè)置 Watch 和 Memory 窗口。

  7. 在 Blinky.c 中,,右鍵點(diǎn)擊變量 value 并選擇 Add value to … 及 Watch 1,,Watch 1 窗口會(huì)打開并顯示 value 如下圖。

  8. value會(huì)實(shí)時(shí)增加到0x10,。
    Watch 1
    提示: 也可以框選 value,,單擊并拖拽到 Watch 或 Memory 窗口。
    提示: 請(qǐng)確認(rèn)菜單 View/Periodic Window Update 在選中狀態(tài),。

  9. 也可以在 Name 下面區(qū)域雙擊或按 F2,,再手動(dòng)輸入或復(fù)制粘貼變量名?;蚴谴蜷_菜單 View/Symbols Window 來(lái)輸入變量,。
    提示: 如果要拖拽到一個(gè)非活動(dòng)的選項(xiàng)卡,選中變量按住鼠標(biāo)并移動(dòng)至希望打開的選項(xiàng)卡名字上,,等待其打開并拖拽鼠標(biāo)到窗口內(nèi)釋放,。

Memory 窗口

  1. 右鍵點(diǎn)擊 value 并選擇添加到 Memory 1,或手動(dòng)添加 value 到 Memory 1,。如果需要的話,,選擇菜單 View/Memory 來(lái)打開 Memory 1 窗口。

  2. 注意 value 被當(dāng)作了一個(gè)指針,,其值做為地址顯示在了 Memory 1 上,。這個(gè)操作在想要看一個(gè)指針指向的地址的時(shí)候很有用,但不是我們現(xiàn)在想看到的。

  3. 在變量名前面加一個(gè)“&”符號(hào)并按回車鍵,,改為顯示變量的物理地址(0x2000000C),。

  4. 右鍵點(diǎn)擊 Memory 1 窗口并選擇 Unsigned/Int。

  5. value 的值現(xiàn)在以32位的形式顯示了,。

  6. Watch 和 Memory 窗口都是實(shí)時(shí)更新的,。

  7. 在 Memory 窗口中,鼠標(biāo)移動(dòng)到數(shù)據(jù)區(qū)域右鍵點(diǎn)擊,,選擇 Modify Memory,,可以修改對(duì)應(yīng)地址的值。
    Memory

提示: 這些操作通常不會(huì)占用 CPU 周期,。關(guān)于 DAP 是如何運(yùn)行的,,詳見(jiàn)下一章“原理”。

提示: 在 Debug 模式中選擇菜單 View/Symbol Window,,可以打開 Symbol 窗口查看變量和各自的位置,。

上面展示的 Memory 和 Watch 窗口的操作并不需要配置 Serial Wire Viewer (SWV),這些機(jī)制使用的是 SWV 之外的另一個(gè) CoreSight 特性,。CoreSight Debug Access Port (DAP)通過(guò) Serial Wire Debug (SWD)或 JTAG 連接來(lái)處理讀寫操作,,從而實(shí)現(xiàn)實(shí)時(shí)在線的存儲(chǔ)器訪問(wèn)。

13) 如何在 Watch 和 Memory 窗口中觀察局部變量

(譯者注:由于板卡的區(qū)別,,這一部分和原文略有不同,。)

  1. 運(yùn)行 Blinky.c 程序。我們將使用 main() 中的局部變量 num,。

  2. Blinky.c 的第87行附近,,main 函數(shù)的開頭,找到聲明這個(gè)局部變量的地方,。

  3. 右鍵點(diǎn)擊這個(gè)變量,,把它輸入到 Watch 1 窗口中。注意由于局部變量的值可能存放在 CPU 寄存器內(nèi),,μVision 不能在程序運(yùn)行時(shí)訪問(wèn),,因此會(huì)顯示 < not in scope >。如果 μVision 顯示無(wú)法添加變量,,請(qǐng)嘗試停止再開始 Blinky 程序,。
    Watch Local Variables

  4. Blinky.c 的主循環(huán)里添加一個(gè)斷點(diǎn),會(huì)使程序停止,,這時(shí)會(huì)出現(xiàn)當(dāng)前變量的值,。

  5. 刪除這個(gè)斷點(diǎn),。

  6. 局部變量或自動(dòng)變量可能存放在 CPU 寄存器內(nèi),,μVision 不能在程序運(yùn)行時(shí)訪問(wèn)。局部變量 num 只有在 main 函數(shù)運(yùn)行時(shí)才會(huì)存在,在其他函數(shù)或中斷/異常處理程序中是不存在的,,因此 μVision 無(wú)法確定這個(gè)變量的值,。

  7. 停止運(yùn)行處理器 STOP 并退出 Debug 模式 Debug

如何實(shí)時(shí)更新局部變量:

只需把 num 改為全局變量定義在 Blinky.c 中,。

  1. num 的聲明移動(dòng)到 main() 的外面,、Blinky.c 的最前面,把它改為全局變量:
unsigned int value = 0;
int32_t num = 0;
  • 1
  • 2

提示: 也可以定義成靜態(tài)變量,,如: static int32_t num = 0; ,。
提示: 在編輯模式和 Debug 模式都可以編輯文件,但編譯只能在編輯模式進(jìn)行,。

  1. 點(diǎn)擊 Rebuild 按鈕編譯源文件,,確認(rèn)沒(méi)有 error 和 warning。

  2. 點(diǎn)擊 Load 按鈕 Load 下載到 flash,,窗口的左下角會(huì)顯示進(jìn)度條,。

  3. 進(jìn)入 Debug Debug 模式并點(diǎn)擊 RUN RUN

  4. 這時(shí) num 變量已經(jīng)可以實(shí)時(shí)更新了,。

  5. 可以讀(寫)全局或靜態(tài)的變量,、結(jié)構(gòu)體,以及其他以變量形式放在函數(shù)與函數(shù)之間的東西,,包括外設(shè)的讀寫,。(譯者注:這一句我沒(méi)翻好:You can read (and write) global, static variables and structures. Anything that stays around in a variable from function to function. This include reads and writes to peripherals.)

  6. 停止運(yùn)行處理器 STOP 并退出 Debug 模式 Debug ,準(zhǔn)備下一個(gè)練習(xí),。

提示: 菜單中的 View/Periodic Window Update 需要選中,,否則變量只在程序停止時(shí)更新。

原理

μVision 使用 ARM CoreSight 技術(shù)實(shí)現(xiàn)不竊取 CPU 周期的情況下對(duì)存儲(chǔ)器位置進(jìn)行讀寫,。這種操作幾乎是完全非侵入的,,不影響程序本身運(yùn)行時(shí)序。我們知道 Cortex-M4 是哈弗架構(gòu)的,,具有分離的指令總線和數(shù)據(jù)總線,。當(dāng) CPU 以最大速度取指令時(shí),CoreSight 調(diào)試模塊有大量的時(shí)間讀寫數(shù)值,,并不影響 CPU 周期,。

有一種罕見(jiàn)情況,當(dāng) CPU 和 μVision 恰好同時(shí)讀寫相同的內(nèi)存地址時(shí),,CPU 會(huì)暫停一個(gè)時(shí)鐘周期,,表現(xiàn)出輕微的侵入性。實(shí)際上可以認(rèn)為這種竊取周期的情況不會(huì)發(fā)生,。

14) 使用 Logic Analyzer 圖形化觀察變量

這一章將在 Logic Analyzer 中顯示全局變量的值,。這個(gè)功能使用 Serial Wire Viewer,,因此不會(huì)竊取 CPU 周期,用戶代碼中也不需要加入任何代碼片段,。

配置 Serial Wire Viewer (SWV):

  1. 停止運(yùn)行處理器 STOP 并退出 Debug 模式 Debug ,。

  2. 點(diǎn)擊 Target Options Target Options 或者按 ALT+F7,并選擇 Debug 選項(xiàng)卡,,點(diǎn)擊窗口右側(cè)的 Settings,,確認(rèn)選擇的是 SW 模式。ST-Link中,,SWV 強(qiáng)制使用 SW 模式,。

  3. 選擇 Trace 選項(xiàng)卡,選擇 Trace Enable,,取消選擇 Periodic 和 EXCTRC,,設(shè)置 Core Clock 為 48 MHz。其他選項(xiàng)如圖所示,。

    譯者注:CPU 時(shí)鐘頻率很重要,,請(qǐng)務(wù)必按照實(shí)際值設(shè)置。Blinky 工程的時(shí)鐘頻率在 Abstract.txt 中可以找到,。如果使用的是其他板卡,,請(qǐng)自行檢查時(shí)鐘頻率。

  4. 點(diǎn)擊 OK 返回 Target Options,。

  5. 再次點(diǎn)擊 OK 返回主界面,。
    Trace Setup

配置 Logic Analyzer:

  1. 進(jìn)入 Debug 模式 Debug。打開菜單 View/Analysis Windows 并選擇 Logic Analyzer,,或者選擇工具欄上的 LA 按鈕 LA 按鈕 ,。
    提示: 可以在程序運(yùn)行中配置LA。

  2. 點(diǎn)擊 Blinky.c 選項(xiàng)卡,,右鍵點(diǎn)擊 value 變量并選擇 Add value to… 及 Logic Analyzer,。也可以手動(dòng)拖拽來(lái)添加。

  3. 點(diǎn)擊 LA 左上角的 Setup… 按鈕進(jìn)入 LA 設(shè)置窗口,。

  4. 選擇 value,,設(shè)置 Display Range Max 為 0x15。

  5. 點(diǎn)擊 Close,。
    LA Setup

運(yùn)行程序: 注意: 可以在程序運(yùn)行中配置LA,。

  1. 點(diǎn)擊 RUN RUN。點(diǎn)擊 Zoom Out 使圖形中網(wǎng)格大小是5秒左右,。

  2. 變量 value 的值將增加到 0x10(十進(jìn)制16)再重新設(shè)為 0,。
    提示: 如果沒(méi)有看到波形,請(qǐng)退出并重新進(jìn)入 Debug 模式以刷新 LA,??赡苓€需要重新上電 NUCLEO 板卡,。請(qǐng)確認(rèn) Core Clock 的數(shù)值正確。
    提示: Logic Analyzer 中最多可以顯示4個(gè)變量,,必須是全局變量、靜態(tài)變量或原始地址如 *((unsigned long*)0x20000000),。

  3. 請(qǐng)注意當(dāng) USER 按鈕按下時(shí),,變量的值會(huì)隨之停止增加。當(dāng)然也請(qǐng)注意觀察這個(gè)現(xiàn)象是如此直觀,。

  4. 選擇 Signal Info,、Show Cycles、Amplitude 及 Cursor,,觀察 LA 的測(cè)量功能,。點(diǎn)擊 Update Screen 欄的 Stop 按鈕可以停止 LA。

  5. 停止運(yùn)行處理器 STOP ,。
    LA波形

15) 觀察點(diǎn):條件斷點(diǎn)

不需要使用 Serial Wire Viewer

STM32 處理器有6個(gè)硬件斷點(diǎn),,可以不停止 CPU 運(yùn)行而在線設(shè)置。STM32 還有四個(gè)觀察點(diǎn),。觀察點(diǎn)可以認(rèn)為是有條件的斷點(diǎn),。觀察點(diǎn)和邏輯分析儀共用比較器,因此要使用觀察點(diǎn),,需要在邏輯分析儀中保證至少兩個(gè)變量空位置,。觀察點(diǎn)也被稱作 Access Breakpoint。

  1. 使用與前一練習(xí)相同的 Blinky 設(shè)置,,停止程序運(yùn)行,,保持在 Debug 模式。

  2. 在 Blinky.c 中創(chuàng)建的全局變量 value 將用于觀察點(diǎn)的探究,。

  3. 配置觀察點(diǎn)不需要 SWV Trace,,但在這個(gè)練習(xí)中我們會(huì)用到邏輯分析儀。

  4. 延續(xù)上一個(gè)聯(lián)系,,變量 value 應(yīng)保持在邏輯分析儀中,。

  5. 在 μVision 菜單中選擇 Debug 并點(diǎn)擊 Breakpoints,或者按 Ctrl+B 鍵,。

  6. 將 Read 和 Write 兩個(gè) Access 都選中,,在 Expression 框中輸入“value == 0x5”,不含引號(hào),。

  7. 點(diǎn)擊 Define,,應(yīng)出現(xiàn)圖中所示的一行。點(diǎn)擊 Close,。
    Watchpoint Setup

  8. 如果 Watch 1 中沒(méi)有 value 變量,,添加一個(gè)進(jìn)去,。

  9. 打開菜單 Debug/Debug Settings 并選擇 Trace 選項(xiàng)卡,選擇“on Data R/W sample”,,并保持 EXCTRC 不選中,。

  10. 點(diǎn)擊兩次 OK 回到主界面。打開 Trace Records 窗口,。
    Trace Records 按鈕

  11. 點(diǎn)擊 RUN RUN ,。

  12. 在邏輯分析儀和 Watch 窗口中可以看到 value 在變化。

  13. 當(dāng) value 等于 0x5 時(shí),,Watchpoint 會(huì)停止運(yùn)行程序,。

  14. 注意如下圖所示的 Trace Records 窗口中的 data write 記錄:0x5 在 Data 列的最后一行,另外還有寫入數(shù)據(jù)的地址和寫入指令對(duì)應(yīng)的 PC 指針,。當(dāng)前使用的是 ST-Link,,如果用 ULINK2 會(huì)顯示相同的窗口,但如果是 ULINK pro 或 J-Link(黑盒子)顯示的窗口會(huì)略有區(qū)別,。
    Trace Records

  15. 查看 Breakpoints 窗口中的 Help 按鈕可以了解另一種可用的表達(dá)式格式,,有些目前沒(méi)有在 μVision 中實(shí)現(xiàn)。

  16. 點(diǎn)擊 RUN 可以重復(fù)本次練習(xí),。

  17. 練習(xí)結(jié)束后,,停止程序運(yùn)行,點(diǎn)擊 Debug 并選擇 Breakpoints(或按 Ctrl+B),,刪除所有斷點(diǎn),。

  18. 退出 Debug 模式。

提示: 觀察點(diǎn)不能像硬件斷點(diǎn)那樣在程序運(yùn)行中設(shè)置,。

提示: 在 Breakpoints 窗口中雙擊觀察點(diǎn),,它的信息會(huì)放在下面的配置區(qū)域供編輯。點(diǎn)擊 Define 會(huì)創(chuàng)建另一個(gè)觀察點(diǎn),。如要?jiǎng)h除舊的觀察點(diǎn),,需要選中它并點(diǎn)擊 Kill Selected,或者嘗試下一條提示:

提示: 表達(dá)式旁邊的選框可以用來(lái)臨時(shí)屏蔽觀察點(diǎn),。

提示: 邏輯分析儀中也可以輸入原始地址,,如:*((unsigned long*)0x20000000)

圖中顯示了變量 value 的觸發(fā)點(diǎn)為 0x5 時(shí),,邏輯分析儀的顯示情況,。這里運(yùn)行了三次。

LA with watchpoint

16) 基于 Keil RTX RTOS 的 RTX_Blinky 例程

Keil 提供了一個(gè)全功能的 RTOS —— RTX,,做為 Keil MDK including 源代碼的一部分,。本章的例子將探索 RTX RTOS 工程。MDK 可以和任何 RTOS 配合使用,,實(shí)際上 RTOS 只是和你的工程一同編譯的一組 C 語(yǔ)言函數(shù),。RTX 包含在所有版本的 MDK 中,,以 BSD 開源協(xié)議的形式提供。

譯者注:原文附帶提供了一個(gè)專門的 RTX_Blinky 程序,,是四個(gè)任務(wù)控制 Discovery 開發(fā)板上的四個(gè) LED,。這個(gè)工程使用了 STM32F4xx_DFP 2.1.0 軟件包,在新版本的 Keil MDK 中是不提供的(Keil 網(wǎng)站上也沒(méi)有這個(gè)版本的下載鏈接),,難以完成這個(gè)實(shí)驗(yàn),。
這一章翻譯版中,將用新版本的 pack 中包含的 RTX_Blinky 程序替代,。其他操作與原文相同。
原文的四任務(wù)程序確實(shí)更能夠體現(xiàn) Keil MDK 調(diào)試模式在觀察 RTX 工程上的便利性,,有興趣的話可以參考閱讀,。

RTX 及其所有組件放在:C:\Keil_v5\ARM\Pack\ARM\CMSIS\3.20.4\CMSIS_RTX

按照第6章的指示,,安裝并復(fù)制 RTX_Blinky 工程到 C:\MDK\Boards\ST\NUCLEO-F401RE\,。

  1. 在 μVision 的編輯模式(非 debug 模式)中選擇 Project/Open Project。

  2. 打開文件 C:\MDK\Boards\ST\NUCLEO-F401RE\RTX_Blinky\RTX_Blinky.uvprojx,。

  3. 如果出現(xiàn) Update Configuration Files 窗口,,選擇 Cancel。

  4. 這個(gè)工程已經(jīng)為 ST-Link V2 調(diào)試器設(shè)置好了,。

  5. 點(diǎn)擊 Rebuild 圖標(biāo) Rebuild 編譯源文件,,應(yīng)該不會(huì)出現(xiàn) error 或 warning。

  6. 點(diǎn)擊 Load 圖標(biāo) Load 手動(dòng)編程 flash,。左下角的進(jìn)度條會(huì)顯示這個(gè)過(guò)程,。

  7. 點(diǎn)擊 Debug 圖標(biāo) Debug 進(jìn)入 Debug 模式。點(diǎn)擊 RUN 圖標(biāo) RUN,。

  8. NUCLEO 開發(fā)板上的綠色 LED 會(huì)開始閃爍,。

  9. 點(diǎn)擊 STOP 圖標(biāo) STOP

我們將借助 Kernel Awareness 窗口來(lái)探索 RTX 的運(yùn)行,。

17) 使用 Serial Wire Viewer (SWV)的 RTX Kernel Awareness

用戶經(jīng)常需要了解當(dāng)前執(zhí)行的任務(wù)的編號(hào)和其他任務(wù)的狀態(tài),,這些信息一般被 RTOS 存儲(chǔ)在一個(gè)結(jié)構(gòu)體或內(nèi)存空間中。Keil 為 RTX 提供了 Task Aware 窗口,,其他 RTOS 公司同樣也提供 μVision 中的對(duì)應(yīng)的 awareness 插件,。

  1. 點(diǎn)擊 RUN 圖標(biāo) RUN 運(yùn)行 RTX_Blinky。

  2. 打開菜單 Debug/OS Support 并選擇 System and Thread Viewer,,圖中所示的窗口將打開,。可以拖住這個(gè)窗口并移動(dòng)至屏幕中間,。窗口中的數(shù)值是實(shí)時(shí)更新的,,使用的讀寫技術(shù)與 Watch 和 Memory 窗口相同,。
    重要提示: 需要選中菜單中的 View/Periodic Window Update。

  3. 打開菜單 Debug/OS Support 并選擇 Event Viewer,。由于還沒(méi)有配置 SWV,,估計(jì)不會(huì)有數(shù)據(jù)顯示。

System and Thread Viewer

**RTX Viewer:配置 Serial Wire Viewer (SWV):

需要激活 Serial Wire Viewer 來(lái)使 Event Viewer 運(yùn)行,。

  1. 停止運(yùn)行處理器 STOP 并退出 Debug 模式 Debug ,。

  2. 點(diǎn)擊 Target 選擇框旁邊的 Target Options Target Options ,選擇 Debug 選項(xiàng)卡,。

  3. 選擇 ST-Link Debugger 旁邊的 Settings,。

  4. 在 Debug 窗口中,確認(rèn)選擇的是 SW 模式而不是 JTAG,。SWV 只能運(yùn)行在 SW 模式,。

  5. 點(diǎn)擊 Trace 選項(xiàng)卡。

  6. 設(shè)置 Core Clock 為 48 MHz,,并選中 Trace Enable,。

  7. 取消選擇 Periodic 和 EXCTRC,如圖所示,。

    譯者注:CPU 時(shí)鐘頻率很重要,,請(qǐng)務(wù)必按照實(shí)際值設(shè)置。Blinky 工程的時(shí)鐘頻率在 Abstract.txt 中可以找到,。如果使用的是其他板卡,,請(qǐng)自行檢查時(shí)鐘頻率。

  8. 需要選中 ITM Stimulus Port 31,,RTX Viewer 使用這個(gè)方法獲得內(nèi)核 awareness 信息并顯示在 Event Viewer 中,。這個(gè)功能有輕微的侵入性。

  9. 點(diǎn)擊兩個(gè) OK 返回主界面,。
    Trace Setup
    Serial Wire Viewer 配置完成,!

  10. 進(jìn)入 Debug 模式并點(diǎn)擊 RUN。

  11. 選擇 Task and System 選項(xiàng)卡,,顯示應(yīng)該在更新,。

  12. 點(diǎn)擊 Event Viewer 選項(xiàng)卡。

  13. 如圖所示,,窗口中以圖形的形式顯示任務(wù)事件,。可以嘗試點(diǎn)擊 Zoom 欄的 ALL,、+ 和 - 來(lái)調(diào)整 Grid 到 1 秒左右,,或調(diào)整到 20us 左右查看每次 LED 狀態(tài)變化時(shí)的任務(wù)切換細(xì)節(jié)。
    Event Viewer
    Event Viewer

提示: 如果 Event Viewer 不工作,打開 Trace Records 并確認(rèn) ITM 31 幀顯示正常,。Core Clock 是否正確,?這個(gè)工程運(yùn)行在 48 MHz(NUCLEO-F401RE)。

Cortex-M3 警告: 利用上面提到的讀,、寫方式,,μVision 會(huì)實(shí)時(shí)更新目標(biāo)板卡的所有 RTX 信息。Event Viewer 使用 ITM,,有輕微的侵入性,。

數(shù)據(jù)在程序運(yùn)行的時(shí)候更新,并不需要在源代碼中插入專門的觀察代碼,。你會(huì)發(fā)現(xiàn)這個(gè)特點(diǎn)非常好,!記住,所有版本的 MDK 中都提供 RTX 的源代碼,。

提示: 這些 RTX Kernel Awareness 窗口中的功能可以使用 ULINK2,、ULINK-ME、ULINK pro,、ST-Link V2 及 J-Link,。

18) Logic Analyzer 窗口:圖形化地實(shí)時(shí)觀察變量

μVision 包含圖形化 Logic Analyzer 窗口,,在 STM32 中可以利用 Serial Wire Viewer 實(shí)時(shí)顯示多達(dá)四個(gè)變量,。RTX_Blinky 使用一個(gè)任務(wù)來(lái)生成 LED 的閃爍,我們可以畫出這個(gè)波形的圖像,。

  1. 關(guān)閉 RTX Viewer 窗口,,停止運(yùn)行處理器 STOP 并退出 Debug 模式 Debug

  2. 如圖,,在 RTX_Blinky.c 中添加一個(gè)全局變量 unsigned int led_status,。

  3. 如圖,在 RTX_Blinky.cblinkLED 任務(wù)中添加 2 行:led_status = 1;led_status = 0;,,大約在第 70 行左右的位置(在 LED_OnLED_Off 函數(shù)調(diào)用的前面),。
    RTX_Blinky.c

  4. 選擇菜單 File/Save All 或點(diǎn)擊 Save All

  5. Rebuild 工程 Rebuild ,,燒寫 flash Load ,。

  6. 進(jìn)入 Debug 模式 Debug

  7. 現(xiàn)在可以運(yùn)行程序了 RUN ,。

  8. 打開菜單 View/Analysis Windows 并選擇 Logic Analyzer,,或者選擇工具欄上的 LA 按鈕 LA 按鈕

  9. 點(diǎn)擊 RTX_Blinky.c 選項(xiàng)卡,,右鍵點(diǎn)擊 led_status 變量并選擇 Add value to… 及 Logic Analyzer,,led_status 變量將添加到 LA。
    提示: 如果不能添加變量到 LA,,請(qǐng)確認(rèn) Trace Config 設(shè)置正確,。要添加變量到 LA 必須開啟 Serial Wire Viewer,。
    Logic Analyzer 可以顯示靜態(tài)或全局的變量、結(jié)構(gòu)體和數(shù)組,。
    不能顯示局部變量:請(qǐng)轉(zhuǎn)換為靜態(tài)或全局變量,。如果要觀察外設(shè)寄存器,請(qǐng)使用變量讀取或?qū)懭?,然后把變量添加進(jìn) LA,。

  10. 點(diǎn)擊 LA 左上角的 Setup… 按鈕,設(shè)置 Display Range Max 為 0x3,。

  11. 點(diǎn)擊 Close 回到 LA 窗口,。

  12. 使用 All、Out 和 In 按鈕使圖形中網(wǎng)格大小是 0.5 秒左右,。如果需要的話,,移動(dòng)滾動(dòng)條到最右邊。

  13. 選擇 Signal Info 和 Show Cycles,,點(diǎn)擊以標(biāo)記一個(gè)位置,,移動(dòng)光標(biāo)得到時(shí)序信息。在波形上放置光標(biāo)以獲得時(shí)序和其他信息,,如圖,。

  14. 點(diǎn)擊 Update Screen 欄的 Stop 按鈕可以停止數(shù)據(jù)采集。

RTX Logic Analyzer

提示: 也可以在 Watch 和 Memory 窗口中添加變量,,實(shí)時(shí)顯示或修改,。

提示: 可以顯示表示變量的數(shù)學(xué)運(yùn)算的信號(hào),這在物理世界中是無(wú)法測(cè)量的,。

21) Serial Wire Viewer(SWV)配置窗口(供參考)

跟蹤功能的配置主要是在圖中所示的 Trace 選項(xiàng)卡中完成的,。μVision 中沒(méi)有全局的 SWV 選項(xiàng),對(duì)每個(gè)工程,、以及工程中的每個(gè) target 設(shè)置,,都需要單獨(dú)配置 SWV,配置信息存儲(chǔ)在工程中,。這個(gè)窗口有兩種方法進(jìn)入:

A. 在編輯模式中: 選擇 Target Options Target Options 或者按 ALT+F7,,并選擇 Debug 選項(xiàng)卡。點(diǎn)擊窗口右側(cè)的 Settings,,再選擇 Trace 選項(xiàng)卡,。啟動(dòng) μVision 時(shí)默認(rèn)是編輯模式。
B. 在 Debug 模式中: 選擇菜單中的 Debug/Debug Settings,,再選擇 Trace 選項(xiàng)卡,。Debug 模式用 Debug 按鈕進(jìn)入。

SWV 配置窗口

1) Core Clock: SWV 的 CPU 時(shí)鐘頻率。在工程的啟動(dòng)代碼或者 Abstract.txt 中可以找到 CPU 時(shí)鐘頻率,,通常叫 SYSCLK 或主時(shí)鐘頻率,。除非使用的是 ULINK pro 調(diào)試器,否則這個(gè)選項(xiàng)必須填寫正確,。

2) Trace Enable: 使能 SWV 和 ITM,。這個(gè)選項(xiàng)只能在編輯模式修改。不會(huì)影響 Watch 和 Memory 窗口的更新,。

3) Trace Port: 使用 ST-Link 時(shí),,這個(gè)選項(xiàng)是不可更改的。

4) Timestamps: 使能時(shí)間戳,,選擇預(yù)分頻器,。預(yù)分頻器默認(rèn)是1。

5) PC Sampling: 對(duì) PC 指針的采樣:
   a. Prescaler: 1024*16(默認(rèn)值)指的是每 16,384 個(gè) PC 指針會(huì)顯示 1 個(gè),,其他的不會(huì)采集,。
   b. Periodic: 使能 PC 指針采樣。
   c. On Data R/W Sample: 顯示造成邏輯分析儀中所列的變量的讀寫對(duì)應(yīng)的指令地址,。這個(gè)功能與數(shù)據(jù)跟蹤有關(guān),,但與 PC 采樣無(wú)關(guān)。

6) ITM Stimulus Ports: 使能用于在 μVision 中輸出數(shù)據(jù)的類似 printf 的語(yǔ)句的 32 位寄存器,。端口 31(a)用于 Keil RTX Viewer,,實(shí)時(shí)內(nèi)核識(shí)別(awareness)窗口;端口 0(b)用于 Debug (printf) Viewer,;其他位在 μVision 中沒(méi)有使用,。
   Enable: 顯示 32 位十六進(jìn)制數(shù),,代表哪些端口是使能的,。
   Privilege: Privilege 用于 RTOS 指定哪些 ITM 端口可以在用戶程序中使用。

7) Trace Events: 使能各種 CPU 計(jì)數(shù)器,。除了 EXCTRC 之外,,其他的都是 8 位計(jì)數(shù)器。每個(gè)計(jì)數(shù)器是累積的,,每 256 周期產(chǎn)生計(jì)數(shù)器溢出事件,。Counter 窗口顯示計(jì)數(shù)器的值,Instruction Trace 窗口顯示計(jì)數(shù)器溢出并重新計(jì)數(shù)產(chǎn)生的事件,。
   a. CPI: 從第一個(gè)指令到每個(gè)指令所用的額外周期數(shù),,其中包括指令取指拖延(instruction fetch stall)。
   b. EXC: CPU 的異常(exception)開銷的累積周期數(shù),,包括入棧和返回操作,,不包括花費(fèi)在異常處理程序的時(shí)間。
   c. Sleep: CPU 在睡眠模式的累積周期數(shù),使用 FCLK 時(shí)鐘,。
   d. LSU: 從第一個(gè)周期開始,,花費(fèi)在 load/store 上的累積周期數(shù)。
   e. Fold: Folded 指令的累積數(shù)量,。這個(gè)結(jié)果來(lái)自那些已經(jīng)從流水線上移除(flush)了無(wú)用指令,,從而導(dǎo)致零執(zhí)行周期的預(yù)測(cè)分支指令。(譯者注:我架構(gòu)學(xué)的爛,,這句不太會(huì)翻:These results from a predicted branch instruction where usused instructions are removed (flushed) from the pipeline giving a zero cycle execution time.)
   f. EXCTRC: 異常跟蹤,。這一項(xiàng)與上面其他項(xiàng)有所不同,不是一個(gè)計(jì)數(shù)器,。這個(gè)選項(xiàng)使能 Trace Exceptions 窗口中異常的顯示,。這個(gè)功能通常在調(diào)試中使用,用來(lái)顯示異常,。

提示: 計(jì)數(shù)器在單步執(zhí)行是也會(huì)累加,,這提供了很有用的信息。計(jì)數(shù)器是映射在存儲(chǔ)器上的,,可以在程序中讀取,。

(未完待續(xù))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多