終極調試工具 EventRecorder 使用方法,各種 Link 通吃

Event Recorder 簡介

之前使用過SEGGER 的 RTT 功能來替代串口打印,比較方便。只是這種方 法限制用戶必須使用 JLINK 才可以。而使用 Event Recorder 的話,無此限制,各種 LINK 通吃。只要是 MDK 支持的即可。

Event Recorder 是 MDK 在 5.22 版本的時增加的功能,到了 5.25 版本後,這個功能就更加完善了, 增加了時間測量和功耗測量的功能。

此調試組件不需要用到 SWO 引腳,使用標準的下載接口即可。用到 VCC,GND, SWDIO,SWCLK 和 NRST。大家使用三線 JLINK-OB 也是沒問題的,僅需用到 GND,SWDIO 和 SWCLK。

JTAG 接口和 SWD 接口區別 下圖分別是 20pin 的標準 JTAG 引腳和 SWD( Serial Wire Debug)引腳,一般 SWD 接口僅需要 Vref, SWDIO,SWCLK,RESET 和 GND 五個引腳即可,SWO(Serial Wire Output)引腳是可選的。有了 SWO 引腳才可以實現數據從芯片到電腦端的數據發送。


終極調試工具 EventRecorder 使用方法,各種 Link 通吃


JTAG 接口 SWD 接口 是由儀器化跟蹤宏單元 ITM(Instrumentation Trace Macrocell)和 SWO 構成的。SWV 實現了一種 從 MCU 內部獲取信息的低成本方案,SWO 接口支持輸出兩種格式的跟蹤數據,但是任意時刻只能使用 一種。

兩種格式的數據編碼分別是 UART(串行)和 Manchester(曼徹斯特)。當前 JLINK 僅支持 UART 編碼,SWO 引腳可以根據不同的信息發送不同的數據包。當前 M3/M4 可以通過 SWO 引腳輸出以下三種 信息:

1. ITM 支持 printf 函數的 debug 調用(工程需要做一下接口重定向即可)。ITM 有 32 個通道,如果 使用 MDK 的話,通道 0 用於輸出調試字符或者實現 printf 函數,通道 31 用於 Event Viewer,這 就是為什麼實現 Event Viewer 需要配置 SWV 的原因。

2. 數據觀察點和跟蹤 DWT(Data Watchpoint and Trace)可用於變量的實時監測和 PC 程序計數器採 樣。

3. ITM 還附帶了一個時間戳的功能:當一個新的跟蹤數據包進入了 ITM 的 FIFO 時, ITM 就會把 一個差分的時間戳數據包插入到跟蹤數據流中。跟蹤捕獲設備在得到了這些時間戳後,就可以找 出各跟蹤數據之間的時間相關信息。另外,在時間戳計數器溢出時也會發送時間戳數據包。

Event Recorder 的特色

Event Recorder 的特色主要有以下幾點:

1. 提升應用程序動態執行期間的檢測能力。

2. 支持的事件類型濾除機制,比如運行錯誤,API 調用,內部操作和操作信息的區分。

3. 可以在任務中,RTOS 內核中和中斷服務程序中任意調用。

4. 對於帶 ITM 功能的 Cortex-M3/M4/M7/M33 內核芯片,執行記錄期間,全程無需開關中斷操作。 對於不帶 ITM 功能的 Cortex-M0/M0+/M23,是需要開關中斷的。

5. 支持 printf 重定向。

6. 各種 link 通吃,支持 SWD 接口或者 JTAG 接口方式的 JLINK、STLINK、ULINK 和 CMSIS-DAP。 7. 對於帶 DWT 時鐘週期計數器功能的 Cortex-M3/M4/M7/M33 內核芯片,創建時間戳時,可以有效 降低系統負擔,無需專用定時器來實現。

8. Event Recorder 執行時間具有時間確定性,即執行的時間是確定的,而且執行速度超快,因此,實 際產品中的代碼依然可以帶有這部分,無需創建 debug 和 release 兩種版本。 9. RTX5 及其所有中間件都支持 Event Recorder 調試。

Event Recorder 是如何工作的

首先來看下面這張圖:


終極調試工具 EventRecorder 使用方法,各種 Link 通吃

在截圖的左下角有個 Memory 內存區,在這個內存區裡面有一個緩衝 Event Buffer,其實就是一個大數組。MDK 通過訪問這個數組實現消息的圖形化展示。為了正確的圖形化展示,數組緩衝裡面的數據 就得有一定的數據格式。而這個數據格式就是通過左側截圖裡面的 Event Recorder 和 Event Filter 來實 現的。Event Recorder 的 API 實現數據記錄和整理,Event Filter 的 API 實現數據的篩選,從而可以選擇 哪些數據可以在 MDK 的 Event Recorder 調試組件裡面展示出來。 這就是 Event Recorder 的基本工作流程。

接下來會介紹Event Recorder的各種功能測試使用方法,歡迎關注


分享到:


相關文章: