國產嵌入式調試器之光? RT-Trace 初體驗!

做過嵌入式開發的工程師肯定都知道有這么個玩意兒 —— J-Trace,與我們日常使用的普通調試器不同點在于,它在基本的下載/調試代碼之上還具有非常強大的代碼運行跟蹤能力,從而實現代碼覆蓋率的分析、指令回溯、CPU 資源監控等一系列強大的功能。有了它,絕大多數的 BUG 可以說是無所遁形,其什么時候出現的,怎么出現的,在完整的 trace 記錄下一目了然,大大提高了解決問題的速度及體驗!

然而,功能強歸強,但我相信絕大多數工程師和我一樣,還從來沒有體驗過 J-Trace 帶來的便利!因為其強大的功能背后是感人的價格,有多感人?我們來看下官方定價:

圖片

1980 歐元,按照當前匯率,就是 1.6 個 W:

圖片

我們再看看萬能的淘寶有沒有漏網之魚:

圖片

確實存在價格更低的,但不多,且畢竟不是官方,是不是全新正品咱也不敢保證。那對于我們這些經費有限的工程師來說,是不是就永遠沒法體驗到這種高端且強大的調試功能了呢?

NO! NO! NO! 前段時間我們的國產 RTOS RT-Thread 開發團隊為我們帶來了其最新的硬件產品?RT-Trace,為我們打開了國產高端調試工具的大門!當然有了 J-Trace 給我們帶來的遺憾,首要任務肯定是看其價格,它的官方店鋪定價如下:

圖片

不可否認,這個價格比市面上絕大多數的調試器都要貴好多,但相比與 J-Trace,那簡直是接近一折的差距!再看其功能,官方介紹如下:

  1. Trace 功能:

    • 基于 SWO 的 RT-Thread OS 跟蹤 (Trace) 功能,無需額外安裝軟件,捕獲線程關系。

    • 免安裝的 Web UI ,直接在瀏覽器中實時顯示線程間的調用關系。

    • 以高速 SWO Trace 為基礎, 后續升級固件支持持久化線程運行記錄,統計各線程用量與 CPU 隨時間的工作負載。

    • 后續升級支持 TPIU Trace 接口,可以觀察到更多內部信息。

  2. Monitor 功能:

    • 多通道數據實時采集與監控。

    • Web UI 中通過波形圖與油表圖生動呈現數據。

    • 支持自定義監控界面布局。

  3. 傳統調試功能:

    • 支持 SWD/JTAG 調試,速率可達到 20Mhz。

    • 支持 VCP 串口透傳,最高透傳速率可達 10Mbps。

    • 支持內置 GDB-Server,支持基本GDB調試功能。

    • 支持 Flash 燒錄,UI 操作方便高效。

  4. 輔助功能:

    • 板載顯示屏,支持離線交互操作,并顯示當前狀態。

    • 板載大空間存儲,支持自動化擴展,支持持久化 Data Log 記錄。

    • 顯示屏可選調試端口供電,支持JTAG接口引腳功能復用。

    • 板載以太網接口,支持遠程操作。

    • 遠程OTA升級維護固件。

看起來功能也挺豐富,當然這里也要說明一下,這里面有部分功能是還在開發當中,其固件也在持續更新,并且根據我與官方開發人員的溝通,后續還會拓展更多功能!

我也是有幸拿到官方提供的樣機,必須要來試用一下。當然由于功能比較多,且目前有部分還在開發中,因此本文先對其基本的下載/調試以及核心的 Trace 功能進行測試。后續這個測試也會持續進行,并將所有相關文章收錄至 RT-Trace 合集中。

測試正式開始,首先給 RT-Trace 連上電源和網線,并將其 JTAG/SWD 調試接口與開發板相連:

圖片

可以看到屏幕正常點亮,且識別到與開發板的調試口電源為 3.3V,下方顯示了 RT-Trace 的 IP 地址,我們可以通過這個地址打開 RT-Trace 的網頁,我們的大部分操作目前也會通過這個網頁來進行:

圖片

可以看到當前版本的頁面顯示,主頁很簡潔直接,把主要功能都列舉出來了,并且還配備了操作手冊。左側是功能板塊,既然叫 RT-Trace,那必然要測其 Trace 功能,所以會涉及到 Trace Config(跟蹤配置)及 Trace Viewer(跟蹤分析面板)。當然在此之前先得把程序下進板子里,順便把最基本的程序下載與調試功能測了。

這里測試代碼使用的是 RT-Thread BSP 中的初始例程,芯片是 STM32F4,并且考慮到大家更多還是用 KEIL 進行開發,因此本次測試也會基于 KEIL 來進行。首先打開 KEIL 工程,配置其下載接口為 CMSIS-DAP Debugger:

圖片

進入到 Settings 界面,可以看到下載器識別沒有任何問題,并且由于官方稱調試速率最高能達到 20M,我們就在這里設置為 KEIL 目前能支持的最高速率 10M:

圖片

確認設置后發現 RT-Trace 的屏幕上也正確顯示了我們剛才配置的調試參數:

圖片

編譯下載:

圖片

沒有任何問題,程序已經下載到開發板中并且 LED 也正常閃爍,我們設置斷點看看調試功能:

圖片

可以看到調試功能也是一切正常!最為一個下載器/調試器,RT-Trace 可以說初步過關了,但是,我們花這個錢可不僅僅是買一個普通的調試器,因此接下來的才是重頭戲和核心功能 —— Trace !這里補充說明一下,Trace 功能需要額外接一個 SWO 引腳,否則只能進行正常的下載調試。

首先看下初始例程的運行邏輯:

int?main(void)
{/* set LED0 pin mode to output */rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);while?(1){rt_pin_write(LED0_PIN, PIN_HIGH);rt_thread_mdelay(500);rt_pin_write(LED0_PIN, PIN_LOW);rt_thread_mdelay(500);}
}

很簡單,就是主函數中運行了一個 LED 閃爍,間隔 500ms,我們接下來就看看 RT-Trace 帶給我們的跟蹤體驗到底是什么樣的,我們能從中看到什么信息。

根據官方手冊,使用 Trace 功能前先要配置一下。于是我們打開網頁進入 Trace Config 頁面先進行 Trace 功能的配置:

圖片

依次按照圖中的 1234 順序進行點擊,第二項和第三項無需我們自己填入,直接點自動探測即可。不過目前版本下我發現有概率會探測到的與實際不匹配,此時再點擊一次即可,不行可以多點幾次,相信官方后期會對其進行改善。最后點擊提交配置后下方顯示 OK 說明配置成功。此時我們點擊左側 Trace Viewer 進入跟蹤頁面:

圖片

這里會打開一個新的頁面,通過其左側的 UI 可以看出,其能夠通過開始錄制進行實時分析,也能根據歷史文件進行分析,我們由于第一次使用,就直接開始錄制:

圖片

此時會出現一個進度條,我推測應該是一次錄制有時間上限,你可以等待其達到最大錄制時間自己結束,也可以中途手動終止。我這邊等其自行結束后發現左側多了三個文件,并且文件名旁邊有刪除和下載按鈕,也印證了 Trace 文件能夠保存下來供后續再次分析:

圖片

根據其命名可以看出,單個 Trace 文件的時長是 4 秒,這也不難理解,由于 Trace 功能會記錄每一次中斷、線程切換等信息,而我們的主頻通常高達幾十到上百兆,即便是 1 秒,其數據量也是非常龐大的,如果記錄時間過長勢必會造成瀏覽器的卡頓,因此通過這種時間片的切割來增強流暢度提高體驗感是沒毛病的。這里我們隨意點一個文件進行查看:

圖片

果然,RT-Trace 將每一次的中斷以及這段時間內的線程切換情況都記錄了下來,根據之前的代碼,我們的初始例程就一個 main 線程以及默認都會存在的空閑線程 idle,線程的切換是基于 SysTick 以及 PendSV 中斷,這里也都顯示出來了!

通過拖拽時間軸最左側與最右側的定位塊可以對跟蹤周期進行縮放,從而看到短時間內的詳細運行流程:

圖片

當然這里要吐槽下目前版本這個很不明顯,我找了好久才發現這里有兩個豎條,一開始還以為暫時還沒做縮放功能,推薦可以在鼠標滑倒時間軸區域的時候給個提示或者增強豎條的顯示效果。縮放后如下:

圖片

可以看到縮放到非常小區域的時候,我們就能看清 CPU 的全部運行流程了,試問如果你都能毫不遺漏地捕捉到 CPU 的全部運行軌跡,還怕定位不到 BUG ?這就是 Trace 的強大之處!

此外,通過鼠標在 Global Track Events 事件欄中的點擊加拖動,還能測量指定區間的運行時間:

圖片

這里我測的是兩次 SysTick 中間的間隔,在時間軸上的體現為 999us758ns,而我們都知道默認的 SysTick 就是 1ms 一次中斷,其測量精度也是非常高!這里也給官方提個建議,就是時間軸的縮放目前是用鼠標進行拖動,而我們要想看清 CPU 的運行軌跡就必須要拖得很小,這個操作是比較難控制的,希望能加入鼠標滾輪縮放的功能,就完美了!

總體而言,第一次使用 Trace 的我還是被震驚到了,從前我們調試程序要么就是打斷點,這無疑會打斷程序的正常運行,在一些特殊場景如電機控制,這種調試方法不僅存在無法找到問題的可能,還有很大概率會炸機;還有一種就是 print 大法,但這種方式一旦你的輸出頻率過高,滿屏的文字會讓你很難抓到重點信息,而如果頻率設置的太低又可能無法獲取到足夠的有效數據來分析。并且無論上面哪種方式,都是會對程序的運行造成影響,而 Trace 無需中斷程序運行,也無需加入任何調試代碼,通過芯片自身的硬件追蹤單元實現指令級的運行數據捕捉與呈現。至此,相信無需再有更多的描述,一個嵌入式工程師也應該能體會到其對于日常調試的幫助有多大!

以上就是本次測試的全部內容,但這也僅僅是這個系列的開端,后續隨著 RT-Trace 的不斷優化與迭代,我也會跟進并分享更多的使用方法與技巧。誠然現在的 RT-Trace 還有很多功能需要完善,但這也意味著其未來具有無限的可能性。可能目前來看,標題的國產嵌入式調試器之光對于很多人來說有點夸大了,但說其是星星之火完全不足為過,也期望與 RT-Trace 共同成長,見證其燎原之光,能最終驅散每一個嵌入式工程師調試中的迷茫!

國產嵌入式調試器之光? RT-Trace 初體驗!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91698.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91698.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SLAM中的非線性優化-2D圖優化之零空間實戰(十六)

終于有時間更新實戰篇了,本節實戰幾乎包含了SLAM后端的所有技巧,其中包括:舒爾補/先驗Factor/魯棒核函數/FEJ/BA優化等滑動窗口法的相關技巧,其中構建2D輪式里程計預積分以及絕對位姿觀測的10幀滑動窗口,并邊緣化最老幀…

知識隨記-----Qt 實戰教程:使用 QNetworkAccessManager 發送 HTTP POST

文章目錄Qt 網絡編程:使用 QNetworkAccessManager 實現 HTTP POST 請求概要整體架構流程技術名詞解釋技術細節注意事項:Qt 網絡編程:使用 QNetworkAccessManager 實現 HTTP POST 請求 概要 本文介紹如何使用 Qt 框架的網絡模塊(…

wordpress批量新建產品分類

1、下載安裝插件:bulk-category-import-export2、激活插件后,左側點擊插件下的導入,選擇product categories,點擊下一步3、這里可以選擇導入的分類列表文件,可以選擇分隔符,CSV文件默認為‘,’要…

CentOS 鏡像源配置與 EOL 后的應對策略

引言 本文將詳細介紹如何使用 阿里云開源鏡像站 配置 CentOS 的各類軟件源,包括基礎源、歷史歸檔源(vault)、ARM 架構源、Stream 版本以及調試信息源(debuginfo),并重點講解在 CentOS 8 停止維護后&#x…

CTF實戰:用Sqlmap破解表單輸入型SQL注入題(輸入賬號密碼/usernamepassword)

目錄 引言 步驟1:用Burp Suite捕獲表單請求 步驟2:用Sqlmap獲取數據庫名稱 參數解釋: 輸出示例(根據題目環境調整): 步驟3:獲取目標數據庫中的表名 參數解釋: 輸出示例&#…

質數時間(二分查找)

題目描述如果把一年之中的某個時間寫作 a 月 b 日 c 時 d 分 e 秒的形式,當這五個數都為質數時,我們把這樣的時間叫做質數時間,現已知起始時刻是 2022 年的 a 月 b 日 c 時 d 分 e 秒,終止時刻是 2022 年的 u 月 v 日 w 時 x 分 y…

Python訓練Day29

浙大疏錦行 類的裝飾器裝飾器思想的進一步理解:外部修改、動態類方法的定義:內部定義和外部定義

新手DBA實戰指南:如何使用gh-ost實現MySQL無鎖表結構變更

新手DBA實戰指南:如何使用gh-ost實現MySQL無鎖表結構變更 作為DBA,大表結構變更(DDL)一直是令人頭疼的問題。傳統的ALTER TABLE操作會鎖表,嚴重影響業務連續性;而常見的pt-online-schema-change工具雖然能實現在線變更,但依賴觸發器機制,在高并發場景下性能表現不佳。本…

OSPF綜合

一、實驗拓撲二、實驗需求1、R4為ISP,其上只配置IP地址;R4與其他所直連設備間均使用公有IP; 2、R3-R5、R6、R7為MGRE環境,R3為中心站點; 3、整個OSPF環境IP基于172.16.0.0/16劃分;除了R12有兩個環回&#x…

技術面試知識點詳解 - 從電路到編程的全棧面經

技術面試知識點詳解 - 從電路到編程的全棧面經 目錄 模擬電路基礎數字電路原理電源設計相關編程語言基礎數據庫與并發網絡協議基礎算法與數據結構 模擬電路基礎 1. 放大電路類型判斷 這是模擬電路面試的經典題目,通過電壓放大倍數判斷放大電路類型: …

LangGraph認知篇-Command函數

Command簡述 在 LangGraph 中,Command 是一個極具實用性的功能,它能夠將控制流(邊)和狀態更新(節點)巧妙地結合起來。這意味著開發者可以在同一個節點中,既執行狀態更新操作,又決定下…

【目標檢測】小樣本度量學習

小樣本度量學習(Few-Shot Metric Learning)通常用于分類任務?(如圖像分類),但它也可以與目標檢測(Object Detection)結合,解決小樣本目標檢測(Few-Shot Object Detectio…

cmd怎么取消關機命令

在 Windows 的命令提示符(CMD)中取消已計劃的關機操作,可以通過 shutdown 命令的 ?**-a**? 參數實現。以下是具體步驟:?操作方法??打開 CMD?按下 Win R 組合鍵,輸入 cmd 并回車,打開命令提示符窗口。…

網易云音樂硬剛騰訊系!起訴SM娛樂濫用市場支配地位

企查查APP顯示,近日,法院公開杭州樂讀科技有限公司、杭州網易云音樂科技有限公司起訴SM ENTERTAINMENT CO. 、卡斯夢(上海)文化傳播有限公司等開庭信息,案由涉及濫用市場支配地位糾紛。公告顯示,該案件計劃…

[css]切角

使用css實現一個切角的功能&#xff0c;有以下幾種方案&#xff1a; <div class"box"></div>方案一&#xff1a;linear-gradient linear-gradient配合backgroud-image可以實現背景漸變的效果。linear-gradient的漸變過渡區的占比是總的空間&#xff08;高…

分享一個可以測試離線服務器性能的腳本

在日常運維工作中&#xff0c;經常會遇到系統性能莫名跟不上業務需求的情況&#xff1a;服務器響應變慢、應用加載卡頓、資源占用異常飆升等問題頻繁出現&#xff0c;卻難以快速問題根源究竟在CPU過載、內存泄漏、磁盤I/O阻塞還是網絡帶寬瓶頸。這種時候&#xff0c;特別需要一…

Python Pandas.unique函數解析與實戰教程

Python Pandas.unique 函數解析與實戰教程 摘要 本文章旨在全面地解析 pandas 庫中的 unique 函數。pandas.unique 是一個用于從一維數組型(array-like)對象中提取唯一值的高效工具。我們將從其核心功能、函數簽名、參數詳解、返回值類型,到關鍵行為特性(如順序保留、缺失…

排序算法入門:直接插入排序詳解

這里寫目錄標題介紹原理代碼實現分析介紹 直接插入排序是一種簡單直觀的排序算法&#xff0c;適用于小規模數據或基本有序的數據集。其核心思想是構建有序序列&#xff0c;對于未排序數據&#xff0c;在已排序序列中從后向前掃描&#xff0c;找到相應位置并插入。 原理 我們…

ClickHouse MergeTree引擎:從核心架構到三級索引實戰

摘要 MergeTree是ClickHouse最核心的存儲引擎&#xff0c;采用列式存儲LSM-Tree架構設計&#xff0c;支持高效的數據寫入、合并和查詢。本文將全面解析MergeTree引擎的基礎概念、數據流、核心架構、索引系統以及常見問題。 基礎篇&#xff1a; 一、MergeTree引擎基礎概念 1. 定…

電腦手機熱點方式通信(上)

電腦連接手機熱點時的無線鏈路情況&#xff1a; 電腦上網時&#xff08;從服務器下載數據&#xff0c;或者上傳指令、數據&#xff09;&#xff0c;首先電腦與手機之間基于WiFi協議在2.4G頻段或者5G頻段通信&#xff0c;然后手機與基站之間再基于4G LTE或者5G NR協議在2412MHz…