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