在大多數固件開發過程中,需要有某種形式的診斷日志/跟蹤。如果在傳統串口上使用簡單的“printf”調用實現日志,每次日志調用的開銷通常是多個毫秒,這種時間消耗將干擾應用程序的行為,在異常處理程序或快速控制循環等時間關鍵代碼中是不可接受的。
為了解決這個問題,很多MCU,如ARM Cortex-M3, M4或M7內核的MCU,已經在處理器中內置了解決方案,即ITM - Instrumentation Trace Macrocell。
ITM是一個硬件單元,可以傳輸兩種類型的診斷數據:
1、由DWT單元生成的調試事件,例如異常事件和數據觀察點事件。
2、軟件插裝(SWIT)事件,即代碼記錄的自定義數據。
使用ITM,只需將數據寫入相應的內存映射寄存器,用戶即可將任何類型的數據作為SWIT事件傳輸到主機PC。通過相應的調試器,傳輸只需幾個時鐘周期,ITM還支持硬件完成的時間戳。許多IDE允許用戶在調試窗口中查看這些數據,或者將數據寫入文件供以后分析。數據可以是字符形式的文本數據(來自printf輸出),但也可以發送二進制數據,ITM每次寫入最多支持32位數據。
ITM單元為SWIT事件提供了32個邏輯通道,每個通道都有一個相應的stimulus寄存器,用于接受輸入。這些通道將診斷數據分成不同的類別。例如,ARM推薦通道0用于文本數據,通道31用于RTOS事件,而其他通道可以用于任何目的。所有ITM通道共享一個公共FIFO緩沖區,該緩沖區依次連接到一個或兩個輸出端口。如果使用完整跟蹤端口和跟蹤調試器,則ITM數據包含在指令跟蹤(ETM)結果中,但也可以通過調試端口中常用的串行線輸出(SWO)接口獲得。大多數針對ARM MCU的調試器都支持SWO接口。
ITM FIFO緩沖區非常小,只有10個字節,因此如果使用低速的調試器,如果過于頻繁地向ITM端口寫入數據,可能會造成數據丟失。這可以在寫入之前通過檢查ITM FIFO是否有空閑空間來防止,在沒有空間的情況下延遲寫入(參見下面的“fputc”代碼示例)。但是,如果調試器接收數據太慢,這種方式可能會對系統的時間產生重大影響。
避免數據丟失和阻塞的更好方法是使用快速調試器,如SEGGER J-Link,Keil ULINK等允許60-100 MHz的SWO采樣率。
在代碼中使用ITM
ITM stimulus寄存器位于地址0xE0000000(端口0)到0xE000007C(端口31)。要寫入數據,需要做的就是在IDE中啟用ITM跟蹤,并將數據寫入相應的寄存器。
如果使用的板級支持包包含ARM的CMSIS API,那么寫入數據很簡單:
#include"myMCU.h" // Includes CMSIS
…
ITM->PORT[0].u32 = mydata;
如果系統中沒有使用CMSIS API,可以直接為ITM stimulus寄存器定義宏,如下所示:
#defineITM_PORT(n) (*((volatile unsigned long *)(0xE0000000+4*n)))
…
ITM_PORT(0) = mydata;
在使用ITM跟蹤之前,需要使能ITM跟蹤。基于Keil μVision的示例如下,該系統已配置為在所有32個ITM stimulus端口啟用ITM跟蹤。如果可能的話,在“Trace port”中選擇Manchester模式,它允許比UART/NRZ模式更高的SWO時鐘頻率。
為了讓你的“printf”調用寫入ITM端口0,需要像這樣定義“fputc”函數:
struct __FILE { int handle; /* Add whatever needed */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f)
{
if(DEMCR & TRCENA) // Only ifITM isavailable
{
while(ITM_PORT(0) == 0); // Blockuntil room inITM FIFO
ITM_PORT(0) = ch; // Writethe data
}
return(ch);
}
ITM是大多數ARM開發工具支持的重要調試技術,它在調試中有許多應用,并且易于入門!
Percepio Tracealyzer利用ITM的性能,實現RTOS實時數據跟蹤。Tracealyzer允許用戶跟蹤和可視化RTOS任務,異常(ISR)和其他軟件事件的執行,提供超過30個相互關聯的視圖,為基于RTOS的固件的運行時世界提供驚人的視覺洞察,加速開發,驗證和調試。
Tracealyzer支持ARM Cortex-M3, M4和M7 MCU的ITM跟蹤,實現FreeRTOS,μC/OS-III和SafeRTOS等RTOS的可視化分析。
審核編輯:劉清
-
處理器
+關注
關注
68文章
19313瀏覽量
230052 -
ITM
+關注
關注
0文章
6瀏覽量
8938 -
RTOS
+關注
關注
22文章
815瀏覽量
119698 -
Cortex-M3
+關注
關注
9文章
270瀏覽量
59500 -
調試器
+關注
關注
1文章
305瀏覽量
23759
原文標題:如何利用ITM實現更快的跟蹤?
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論