加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

SEGGER RTT 輸出格式是如何定義的?

11/15 09:06
898
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

前一段時間沒怎么寫代碼,以至于調(diào)試生疏了很多,很多調(diào)試軟件用起來總是不盡興,log信息使用串口打印還是稍微繁瑣了一些,而且,每次換一個單片機,就得移植一遍串口。

看來,與生俱來的調(diào)試助手,還得是RTT,做一個單片機的板子,至少得流出SWD接口來。

其實RTT也不是很爽,每次打開還得選擇MCU,遇上國產(chǎn)小品牌的MCU,選型列表里沒有,只能選個M0先試試。

另外,RTT能展現(xiàn)的內(nèi)容也不夠豐富,也就是個打印,想顯示曲線,還得換軟件。不夠輕量化和易用。

對于RTT的協(xié)議擴展,最多也就是增加了幾種顏色,這個功能,我在封裝的RTT模塊中已經(jīng)寫好了,不過,當(dāng)初寫的時候,沒在意其中的數(shù)據(jù)結(jié)構(gòu),今天正好想自己讀取RTT數(shù)據(jù)來展示,就深入研究了一下。

教你如何使用SEGGER RTT優(yōu)雅的實現(xiàn)日志系統(tǒng)

RTT的原理很簡單,他利用printf類似的函數(shù)功能,講我們想要發(fā)送出來的信息存儲在Ram中的一個固定區(qū)域,上位機的軟件,就可以通過SWD接口快速的讀取這塊的緩存數(shù)據(jù),然后將它們顯示在界面窗口里面。

移植RTT的時候,我們是如何增加顏色的呢?

如上面的宏定義,我們在RTT_printf外面又套了一層殼子,除了我們原本打印的數(shù)據(jù)外,我們在增加了一頭一尾,讓我們打印的數(shù)據(jù)被兩個特殊字符包裹起來。

從定義的命名中可以看出,前面的是color,顏色。后面的是一個特殊的控制字符RESET,表示這部分顏色結(jié)束了。

在RTT的宏定義文件中是這樣定義的:

我通過C#調(diào)用了JLINKARM.dll文件,讀取了緩存區(qū)的數(shù)據(jù)。

我在MCU中一次性發(fā)送了兩組數(shù)據(jù),一組不帶顏色,一組帶顏色(LOG_ERROR)。

我在C#中調(diào)試,讀取到的信息如下,是一串很長的數(shù)據(jù),按照字符串來理解。

原始數(shù)據(jù):"pitch: 6298 roll: -7623 yaw: 73370 nu001b[0mu001b[1;31mERR: pitch: 6298 roll: -7623 yaw: 73370 nu001b[0m"

其實,這是兩串?dāng)?shù)據(jù),我們需要把它斷開,如何切斷呢?

以RTTCTRLRESET來切斷,也就是u001b[0m。如此以來,我們得到了兩組數(shù)據(jù)。

無顏色:pitch: 6298 roll: -7623 yaw: 73370 nu001b[0m

紅色:u001b[1;31mERR: pitch: 6298 roll: -7623 yaw: 73370 nu001b[0m

如此以來,我們可以在上位機來對這些顏色信息進行解釋,起碼可以自己做一個軟件,顯示出五顏六色的數(shù)據(jù)。

再者,我們只需要利用這些特殊字符,一樣可以寫出曲線的顯示,儀表盤的顯示等等。

目前的缺點是,我們還需要安裝jlink驅(qū)動來實現(xiàn)這個功能,如果我們使用DAPLink這種不需要驅(qū)動的調(diào)試器,有沒有辦法可以兼容RTT的格式,同樣開發(fā)一套通過SWD接口的LOG軟件呢?有知道的大佬,后臺指教一下,多謝。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

多年硬件從業(yè)經(jīng)驗,專注分享從研發(fā)到供應(yīng)鏈,再到精益制造過程中的經(jīng)驗和感悟!