http://blog.csdn.net/gyb510/article/details/52954622
http://blog.csdn.net/gyb510/article/details/52954622
單片機開發過程中,除了debug調試之外,很多人都是通過列印資訊進行調試,一般都會配置設定出來一個調試的序列槽,如果你的單片機使用jlink燒錄器,那麼可以使用調試工具-RTT來代替序列槽進行資訊的互動。
RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式應用中與使用者進行互動的實時終端。J-Link驅動4.90之後的版本都支援RTT。
RTT既可以從MCU上輸出資訊、也可以向應用程式發送資訊,由于其高速的特性,是以不影響MCU的實時性。
實作原理就是J-link與MCU共享記憶體
本以應用為主。RTT的工作框圖如圖 1所示。MCU通過J-link與電腦連接配接并将列印資訊輸出到電腦上,電腦同時可以通過鍵盤等向MCU發送資料。
如果你想使用它,操作也非常簡單,首先從官網下載下傳RTT代碼,然後把如圖 2所示的4個檔案添加到你的工程中。并且在主函數檔案的起始處添加SEGGER_RTT.h檔案。如下所示。
#include "SEGGER_RTT.h"
然後我們就可以直接在主函數中調用SEGGER_RTT_printf函數來列印調試資訊了,該函數用法和printf函數類似,隻是多了一個參數用來指定RTT通道。其中通道0,就是我們在調試時使用的通道。在主函數中添加如下代碼。
SEGGER_RTT_printf(0,"Times %d\r\n",++u32Counter);
u32Counter 這個變量每次列印完之後都會遞增。我們把程式編譯,然後進入調試模式,在開始菜單下打開J-link RTT
Client,可以看到如圖 3所示的資訊。
如果已經正常連接配接,就會列印出入紅色框内的資訊,标明RTT版本号和J-link固件版本号等,如果沒有這些資訊則表示連接配接異常。點選全速運作之後,列印出的資訊如圖 3所示。
是不是感覺很酷?隻需要簡單的添加幾個檔案,就可以直接調用SEGGER_RTT_printf函數列印輸出了。沒有複雜的工程配置,沒有MCU核心的限制,并且列印字元還非常的流暢,好像回到了用VC6.0編寫Win32控制台程式的時代一樣。
注意:
- Segger官網關于RTT功能的說明以及庫檔案的下載下傳可以從這裡找到(https://www.segger.com/jlink-rtt.html);
- 最簡單易用的兩個函數是
-
:非必要的初始化(不知有什麼用?)。它是官方例程SEGGER_RTT_ConfigUpBuffer(0,NULL,NULL,0,SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL)
的第一句RTT_Implementation_141217-Examples-Main_RTT_PrintfTest.c
-
:直接輸出字元串SEGGER_RTT_WriteString(0,"字元串")
-
:相當于printf,可以輸出各種資料類型SEGGER_RTT_printf(0,"字元串",輸出格式)
-
- 檢視RTT輸出的工具有三個:
- RTTViewer:不支援中文。至少要進入一次Debugger才能正常顯示輸出。建議進入Debugger之後再打開,否則經常不能正常顯示輸出
- RTTLogger:支援中文,并且可以儲存為log檔案。使用具體的正确使用方法不清楚。根據手冊說明,log隻接收RTT通道1的輸出,即
。但是實測,隻能輸出RTT通道0的資訊,并且要求代碼中要有使用到通道1的語句。否則收不到資料。SEGGER_RTT_printf(1,"字元串",輸出格式)
- RTTClient:必須配合RTTLogger或者keil的Debugger來使用,而RTTLogger也必須配合Debugger使用。Client、Logger和Debugger三個視窗都打開的時候,Client和Logger隻有其中一個能正常顯示,另外一個會嚴重丢失資料。
- 無論哪個檢視RTT的工具,都會丢失資料。可能與輸出函數的使用頻率過高有關(?)。加大
中的SEGGER_RTT_Conf.h
的值可以有效降低丢失率。#define BUFFER_SIZE_UP
- 從開始菜單欄找到
文檔,裡面有JLink各個工具的說明。J-Link User Manual (UM08001)
原文出處:http://maker.zlgmcu.com/portal.php?mod=view&aid=1880