当前位置: 首页 > news >正文

国产嵌入式调试器之光? 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.dtcms.com/a/310846.html

相关文章:

  • C++之vector类的代码及其逻辑详解 (中)
  • 电力系统分析学习笔记
  • 谷歌Chrome浏览器安装插件
  • 论文笔记:Bundle Recommendation and Generation with Graph Neural Networks
  • 设计Mock华为昇腾GPU的MindSpore和CANN的库的流程与实现
  • STM32——启动过程浅析
  • 个人电脑部署私有化大语言模型LLM
  • python+pyside6的简易画板
  • 损失函数和调度器相关类代码回顾理解 |nn.CrossEntropyLoss\CosineAnnealingLR
  • Codeforces Round 1040 (Div. 2) A - D题详细题解
  • DP-v2.1-mem-clean学习(3.6.8-3.6.8.1)
  • Java试题-选择题(3)
  • 风光储并离网切换仿真模型(下垂控制一次调频)
  • CORS模块:你的跨域快速通行证 [特殊字符]
  • 第七章 愿景13 CBS升级
  • Git 误删分支怎么恢复
  • 中国不同类型竹林分布数据
  • 一个强大的向量数据库——Milvus
  • 8.1.2 TiDB存储引擎的原理
  • 鹧鸪云:16步精控工商业光伏全流程
  • Au速成班-多轨编辑流程
  • C语言函数指针和结构体
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年1月22日真题
  • socket编程-UDP(2)-设计翻译系统
  • 基于线性规划的储能充放电仿真系统
  • 读取数据集及数据集划分
  • 7.苹果ios逆向-目录结构
  • 【vue】Vue 项目创建工具对比:vue create 与 create-vue 的核心区别
  • 安卓开发--LinearLayout(线性布局)
  • 华锐矩阵世界平台与海外客户洽谈合作