Real Time Transfer (RTT)
? ? ??SEGGER的Real Time Transfer (RTT)是一項(xiàng)新技術(shù),可以在嵌入式應(yīng)用中進(jìn)行用戶I/O交互。它結(jié)合了SWO和半主機(jī)的優(yōu)點(diǎn),具有極高的性能。它的主要特點(diǎn)有
可以與目標(biāo)應(yīng)用進(jìn)行雙向通信 極高的傳輸速率,同時(shí)不影響應(yīng)用的實(shí)時(shí)響應(yīng) 在目標(biāo)板上不需要額外的硬件或引腳 在任何J-Link模式下都能正常使用 ARM?Cortex-M0/M0+/M1/M3/M4/M7和Renesas RX100/200/600都支持該功能有完整的代碼來提供需要的功能和靈活的自由度?
什么是RTT?
? ? ? ?在不影響目標(biāo)實(shí)時(shí)響應(yīng)的情況下,RTT可以從目標(biāo)MCU快速輸出信息,也可以發(fā)送信息給目標(biāo)應(yīng)用。SEGGER RTT可以用在任何J-Link模式下(具體模式見https://www.segger.com/jlink-debug-probes.html)??梢栽谥С趾笈_(tái)存儲(chǔ)器訪問的處理器如Cortex-M及RX系列上運(yùn)行。
RTT支持雙向多通道通信,可用于不同目的并為用戶提供了靈活的自由度。默認(rèn)情況下兩個(gè)個(gè)方向分別使用一個(gè)通道,用于終端輸入和輸出。利用J-Link RTT Viewer 上位機(jī)軟件,這個(gè)通道可以用于多個(gè)虛擬終端,允許打印到多個(gè)窗口但僅僅利用了一個(gè)目標(biāo)緩沖區(qū)。(例如一個(gè)用于標(biāo)準(zhǔn)輸出,一個(gè)用于錯(cuò)誤輸出,一個(gè)用于調(diào)試輸出)。上傳通道可以用于發(fā)送事件追蹤數(shù)據(jù)。
RTT通信?
在目標(biāo)應(yīng)用中使用RTT是非常簡(jiǎn)單的。具體的實(shí)現(xiàn)代碼可以自由下載并集成到目標(biāo)應(yīng)用中。你可以利用任何J-Link與RTT進(jìn)行通信。
J-Link軟件包中有更多適用于不同目的高級(jí)應(yīng)用。
J-Link RTT?ViewerJ-Link RTT Viewer是主要的windowsGUI,可以使用RTT的全部功能。RTT Viewer可以單獨(dú)使用,與J-Link及目標(biāo)板建立自己的連接。也可以在調(diào)試狀態(tài)下與調(diào)試接口并行運(yùn)行。?RTT Viewer支持RTT的主要特性:
在通道0上終端輸出發(fā)送文本到通道0只有一個(gè)目標(biāo)通道的情況下具有高達(dá)16個(gè)虛擬終端在任何J-Link模式下都能正常使用控制文本輸出:給文本著色,擦除控制臺(tái)在通道1上記錄數(shù)據(jù)...
J-Link RTT?Viewer的完整文檔請(qǐng)參考J-Link用戶手冊(cè)(UM08001), ?RTT章節(jié)。
J-Link RTT?Viewer是J-Link軟件文檔包的一部分,可以免費(fèi)獲取。
J-Link RTT?Client
J-Link RTT客戶端作為一個(gè)遠(yuǎn)程登陸客戶端,當(dāng)調(diào)試部分關(guān)閉時(shí)可以自動(dòng)重建J-Link連接。J-Link RTT客戶端也是J-Link軟件文檔包的一部分,可以用于簡(jiǎn)單的RTT應(yīng)用場(chǎng)景。
J-Link RTT?Logger
利用J-Link RTT采集器,可以讀取上傳通道1的數(shù)據(jù)并記錄到一個(gè)文件中。這個(gè)通道可以用來向主機(jī)發(fā)送性能分析數(shù)據(jù)。J-Link RTT采集器與J-Link建立特定的連接,可以被單獨(dú)使用,不需要運(yùn)行調(diào)試器。
RTT是如何工作的?
? ? ? ? 實(shí)時(shí)傳輸利用了目標(biāo)存儲(chǔ)器上的SEGGER RTT 控制塊來管理數(shù)據(jù)的讀寫。控制塊包含有一個(gè)ID號(hào),這樣接上J-Link之后,就可以在存儲(chǔ)器中發(fā)現(xiàn)控制塊并且每個(gè)通道都有一個(gè)環(huán)形緩沖區(qū)結(jié)構(gòu),用來描述通道緩沖區(qū)及其狀態(tài)。最大的通道數(shù)可以在編譯時(shí)進(jìn)行配置,應(yīng)用運(yùn)行時(shí)也可以配置及添加緩沖區(qū),而且上傳和下行的緩沖區(qū)可以分開處理。每個(gè)通道都可以配置成阻塞和非阻塞模式。在阻塞模式下,當(dāng)緩沖區(qū)滿的時(shí)候,應(yīng)用將進(jìn)行等待,直到所有的存儲(chǔ)器都可以寫入,這將導(dǎo)致應(yīng)用進(jìn)入阻塞狀態(tài),但可以防止數(shù)據(jù)丟失。在非阻塞狀態(tài)下,只有適合緩沖區(qū)的數(shù)據(jù)才能被寫入,或者沒有數(shù)據(jù)寫入緩沖區(qū),其它的數(shù)據(jù)將被丟棄。這將使應(yīng)用實(shí)時(shí)運(yùn)行,即使不連接調(diào)試器也可以。這樣開發(fā)者就不必創(chuàng)建特定的調(diào)試版程序,這些代碼可以保留在發(fā)布版程序中。
? ? ? ? 當(dāng)RTT在主機(jī)上激活時(shí),不管是使用RTT Viewer還是通過Telnet 連接應(yīng)用,J-Link都會(huì)自動(dòng)在目標(biāo)已知的RAM區(qū)搜索SEGGER RTT 控制塊。當(dāng)不能自動(dòng)發(fā)現(xiàn)控制塊時(shí),主機(jī)應(yīng)用可以設(shè)置控制塊所處的RAM區(qū),從而加速檢測(cè)。
? ? ? 左圖顯示了控制塊在目標(biāo)應(yīng)用中的簡(jiǎn)單結(jié)構(gòu)。上傳和下行的Buffer可能有多個(gè),每個(gè)Buffer的大小都可以單獨(dú)配置。Buffer中的灰色區(qū)域包含了有效數(shù)據(jù)。對(duì)于上傳Buffer來說,寫指針由目標(biāo)應(yīng)用來負(fù)責(zé),讀指針由調(diào)試探針(J-Link,host)來寫入。讀寫指針指向同一位置時(shí),緩沖區(qū)為空。這樣就不會(huì)產(chǎn)生競(jìng)爭(zhēng)情形。
? ? ? ?SEGGER RTT 除了J-Link及標(biāo)準(zhǔn)調(diào)試端口之外,不需要任何額外的引腳或硬件。它不需要對(duì)目標(biāo)板及調(diào)試環(huán)境進(jìn)行任何的配置。RTT在程序調(diào)試期間也可以運(yùn)行,不需要其它的開發(fā)環(huán)境或者調(diào)試器。
? ? ? ?SEGGER RTT向外輸出數(shù)據(jù)時(shí)非??欤@著高于其它方式。實(shí)際運(yùn)行效果如下:
RTT數(shù)據(jù)輸出到主機(jī)端的最大速度取決于目標(biāo)緩沖區(qū)的大小及接口速度。即使目標(biāo)緩沖區(qū)只有512字節(jié),在高端J-Link模式下,RTT速度也可以達(dá)到>1 MByte/sec,而基本J-Link模型的速度也有 0.5 MByte/sec。