天天看點

【轉載】Jlink工具下的RTT調試應用

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發送資料。

【轉載】Jlink工具下的RTT調試應用

如果你想使用它,操作也非常簡單,首先從官網下載下傳RTT代碼,然後把如圖 2所示的4個檔案添加到你的工程中。并且在主函數檔案的起始處添加SEGGER_RTT.h檔案。如下所示。

#include "SEGGER_RTT.h"

【轉載】Jlink工具下的RTT調試應用

然後我們就可以直接在主函數中調用SEGGER_RTT_printf函數來列印調試資訊了,該函數用法和printf函數類似,隻是多了一個參數用來指定RTT通道。其中通道0,就是我們在調試時使用的通道。在主函數中添加如下代碼。

SEGGER_RTT_printf(0,"Times %d\r\n",++u32Counter);

u32Counter 這個變量每次列印完之後都會遞增。我們把程式編譯,然後進入調試模式,在開始菜單下打開J-link RTT 

Client,可以看到如圖 3所示的資訊。

【轉載】Jlink工具下的RTT調試應用

如果已經正常連接配接,就會列印出入紅色框内的資訊,标明RTT版本号和J-link固件版本号等,如果沒有這些資訊則表示連接配接異常。點選全速運作之後,列印出的資訊如圖 3所示。

【轉載】Jlink工具下的RTT調試應用

是不是感覺很酷?隻需要簡單的添加幾個檔案,就可以直接調用SEGGER_RTT_printf函數列印輸出了。沒有複雜的工程配置,沒有MCU核心的限制,并且列印字元還非常的流暢,好像回到了用VC6.0編寫Win32控制台程式的時代一樣。

注意:

  1. Segger官網關于RTT功能的說明以及庫檔案的下載下傳可以從這裡找到(https://www.segger.com/jlink-rtt.html);
  2. 最簡單易用的兩個函數是 
    • 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,"字元串")

      :直接輸出字元串
    • SEGGER_RTT_printf(0,"字元串",輸出格式)

      :相當于printf,可以輸出各種資料類型
  3. 檢視RTT輸出的工具有三個: 
    • RTTViewer:不支援中文。至少要進入一次Debugger才能正常顯示輸出。建議進入Debugger之後再打開,否則經常不能正常顯示輸出
    • RTTLogger:支援中文,并且可以儲存為log檔案。使用具體的正确使用方法不清楚。根據手冊說明,log隻接收RTT通道1的輸出,即

      SEGGER_RTT_printf(1,"字元串",輸出格式)

      。但是實測,隻能輸出RTT通道0的資訊,并且要求代碼中要有使用到通道1的語句。否則收不到資料。
    • RTTClient:必須配合RTTLogger或者keil的Debugger來使用,而RTTLogger也必須配合Debugger使用。Client、Logger和Debugger三個視窗都打開的時候,Client和Logger隻有其中一個能正常顯示,另外一個會嚴重丢失資料。
  4. 無論哪個檢視RTT的工具,都會丢失資料。可能與輸出函數的使用頻率過高有關(?)。加大

    SEGGER_RTT_Conf.h

    中的

    #define BUFFER_SIZE_UP

    的值可以有效降低丢失率。
  5. 從開始菜單欄找到

    J-Link User Manual (UM08001)

    文檔,裡面有JLink各個工具的說明。
    【轉載】Jlink工具下的RTT調試應用

原文出處:http://maker.zlgmcu.com/portal.php?mod=view&aid=1880

繼續閱讀