通過JLINK實現串列埠顯示除錯

Airbnb發表於2014-11-27
首先宣告,這個技巧是從網上找到的,並非本人原創。
我們在除錯的時候,經常會需要使用到printf指令,通過串列埠除錯工具來檢視變數的值,如果是單步或線上除錯時,就需要連線JLINK和串列埠線,對於筆記本,現在都是需要USB轉串列埠,使用起來比較麻煩。
經過在網上搜尋,發現一個好的方法,就是隻用JLINK一根線,就可以既線上除錯程式,同時也可以檢視printf顯示的資料,方法如下:
首先,建立一個.c 的檔案,內容如下:
 
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))        
#define TRCENA          0x01000000
 
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
 
int fputc(int ch, FILE *f)
{
    if (DEMCR & TRCENA)
    {
        while (ITM_Port32(0) == 0);
        ITM_Port8(0) = ch;
    }
    return ch;
}
然後在配置裡面(Options for Target)選擇除錯工具為J-LINK/J-TRACE Cortex,點選Settings,選擇Trace選項,使能Trace,時鐘選擇實際時鐘,比如我是72MHz,在ITM Stimulus Ports只勾選Port0,。
最後,點選模擬,選擇View---serial windows----debug viewer就可以像在串列埠除錯工具裡面一樣顯示了。

相關文章