Tracealyzer 實現流跟蹤最簡單的方法就是使用SEGGER J-Link調試器,通過RTT功能來實現數據的傳送。RTT需要在RAM上建立一段緩存,在目標系統運行期間,由J-Link讀取緩存中的數據。一般來說RTT的速度和可靠性比較高,但是如果您遇到了問題,可以參照以下方法嘗試排除。
常規
檢查
1、檢查是否正確的集成了Tracealyzer跟蹤記錄器庫,以及是否根據J-Link RTT流模式進行了正確配置,請對照產品手冊檢查。
2、安裝最新的J-Link驅動。SEGGER經常更新驅動,IDE和Tracealyzer使用的J-link驅動通常不是最新版本。一定要讓Tracealyzer和IDE使用相同的驅動版本。
3、 “PSF Streaming Settings”中的設置要符合記錄器中的配置。
如果使用vTraceEnable(TRC_INIT),“Target Starts Tracing”和“Reset Target onConnect”不要勾選;
如果使用vTraceEnable(TRC_START),“Target Starts Tracing”保持勾選。
4、在Tracealzyer中檢查J-Link設置。J-Link的速度和協議(JTAG/SWD)要與IDE中的設置一致。
5、檢查Tracealyzer跟蹤記錄器庫的.c和.h文件是否是同一版本。
接收不到數據
1、如果按了“Starting Recording”之后,Live Stream窗口沒有接收到數據或者出現報錯,比較可能的問題是J-Link驅動不能檢測到RTT控制塊。從電腦任務欄綠色的“J”小圖標,打開J-Link控制面板。在RTT頁中,狀態應該顯示“Located RTT control block”。如果顯示“RTT Handled by other J-Link instance”,任務欄找到另外一個J-Link實例并查看狀態。
如果狀態顯示“Looking for RTT CB @…”,說明驅動沒有找到RTT控制塊,在IDE中查找到“_SEGGER_RTT”符號的地址(通過IDE的watch窗口或printf輸出),填入RTT頁的“Control block address”,然后點“Start”,或者在Tracealyzer PSF Streaming Settings設置地址。重新連接,然后應該就可以建立連接了。但要注意,每次重構建代碼地址可能會變化,需要手動更新一遍。
2、脫離Tracealyzer,驗證J-Link RTT通訊
先關閉Tracealyzer,下載J-Link驅動包并安裝,找到JLinkRTTLogger工具。在程序中禁用Tracealyzer,并在main函數中加入如下內容:
#include “SEGGER_RTT.h”
…
SEGGER_RTT_Init();
SEGGER_RTT_WriteString(0, “Hello!”);
啟動JLinkRTTLogger,按要求輸入信息,默認值通常是1,只需按回車鍵接受。如果JLinkRTTLogger能獲取到數據,說明RTT通訊是正常的,問題很可能是Tracealyzer跟蹤記錄器庫的配置問題。
事件丟失
在某些情況下,產生的數據超過J-Link的傳輸速度,就會導致RTT緩存寫滿,新產生的事件就會丟失,直到再次有可用的緩存。出現事件丟失的情況,在Tracealyzer的Live Stream窗口就會報告“Missed Events”,此外,實時視圖中的紅色區域顯示了數據丟失的位置,如下圖:
如果出現事件丟失,按照以下步驟進行操作:
1、在Tracealyzer接收數據時,打開J-Link控制面板,確定選擇“Process: Tracealyzer.exe”。檢查J-Link控制面板中的“Target interface”數值是否與Tracealyzer中的“J-Link Speed”設置的一致。
如果兩者不一致,存在兩種情況:
如果指定的速度高于J-Link所支持的速度,則驅動程序將使用所支持的最高速度(上圖中,是2667 KHz而不是4000 KHz),速度不能再增大,除非選用更高速型號的J-Link。
在某些情況下,驅動程序可能會忽略Tracealyzer中的“J-Link Speed”設置,而使用默認的200KHz。解決這個問題,“Debugger Interface”中設置實際使用的調試協議(JTAG/SWD),不要使用默認設置。
2、如果兩者一致,可以在“J-Link Speed”適當增大速度(默認是4000KHz),前提是J-Link支持更高的速度。各型號J-Link支持的最高速度可點擊“閱讀原文”查看。
3、在trcStreamingPort.h中增大TRC_CFG_RTT_
BUFFER_SIZE_UP,以增加RTT的緩存。
4、在trcConfig.h或者使用vTraceSetFilterMask() 和vTraceSetFilterGroup()過濾跟蹤的事件類型,減少產生的事件數量。
總結
如果J-Link RTT 流跟蹤遇到問題,首先應該根據Tracealyzer手冊檢查記錄庫的配置,如果出現事件丟失,最有效的方法是提高J-Link的速度設置,增大RTT緩存,或者減少產生的事件數量。
審核編輯:湯梓紅
-
RTT
+關注
關注
0文章
65瀏覽量
17086 -
調試器
+關注
關注
1文章
300瀏覽量
23690 -
J-Link
+關注
關注
0文章
83瀏覽量
22118
原文標題:Tracealyzer J-Link RTT流跟蹤常見故障
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論