前一段時間沒怎么寫代碼,以至于調(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軟件呢?有知道的大佬,后臺指教一下,多謝。