之前使用過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 引腳才可以實現數據從芯片到電腦端的數據發送。
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 是如何工作的首先來看下面這張圖:
在截圖的左下角有個 Memory 内存區,在這個内存區裡面有一個緩沖 Event Buffer,其實就是一個大數組。MDK 通過訪問這個數組實現消息的圖形化展示。為了正确的圖形化展示,數組緩沖裡面的數據 就得有一定的數據格式。而這個數據格式就是通過左側截圖裡面的 Event Recorder 和 Event Filter 來實 現的。Event Recorder 的 API 實現數據記錄和整理,Event Filter 的 API 實現數據的篩選,從而可以選擇 哪些數據可以在 MDK 的 Event Recorder 調試組件裡面展示出來。 這就是 Event Recorder 的基本工作流程。
接下來會介紹Event Recorder的各種功能測試使用方法,歡迎關注,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!