為什么要使用RTT輸出打印信息?有很多打印技術 例如 :UART的重定向輸出,SWO引腳輸出,Semihosting在控制台輸出等
RTT具有更快的打印速度和實時性看一張圖:
J-Link RTT -實時傳輸的特性
•SEGGER的實時傳輸(RTT)是嵌入式應用中系統監控和交互用戶I/O的成熟技術。它結合了SWO和半主機的優點,具有非常高的性能。
•與目標應用程序進行雙向通信
•非常高的傳輸速度,不影響實時行為
•使用調試通道進行通信
•不需要額外的硬件或引腳
•任何J-Link型號均支持
•支持ARM Cortex-M0/M0+/M1/M3/M4/M7/M23/M33和Renesas RX100/200/600
•提供完整的實現代碼
1首先你要安裝好J-LINK驅動
目前的SW4STM32不支持J-LINK調試。需要安裝J-LINK插件
2.首先安裝J-LINK插件
輸入地址: http://gnu-mcu-eclipse.netlify.com/v4-neon-updates
我們只需要選擇安裝GDB SEGGER J-Link Debugging,安裝完成后選擇Debug Configuration
在Debug Configuration界面會發現新的選項 GDB SEGGER J-LINK Debugging,點擊添加新的配置后,修改該Name ,然后懸着Tab選項中的Debugger
3 完成配置后RTT代碼移植
安裝好J-LINK驅動后,將RTT的代碼位置如下復制並解壓
移植到自己的工程
添加頭文件路徑
標准庫重定向實現
1 int printf(const char *fmt,...) { 2 3 char buffer[128]; 4 va_list args; 5 va_start (args, fmt); 6 int n = vsnprintf(buffer, sizeof(buffer), fmt, args); 7 SEGGER_RTT_Write(0, buffer, n); 8 va_end(args); 9 return n; 10 }
或者
1 void Debug(const char * sFormat, ...) 2 { 3 va_list ParamList; 4 va_start(ParamList, sFormat); 5 SEGGER_RTT_vprintf(0, sFormat, &ParamList); 6 va_end(ParamList); 7 }
參考 使用J-Link打印日志 | SEGGER Real-Time Transfer(RTT)工具的移植使用 - 雲+社區 - 騰訊雲 (tencent.com)