加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

SEGGER RTT 输出格式是如何定义的?

2小时前
70
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前一段时间没怎么写代码,以至于调试生疏了很多,很多调试软件用起来总是不尽兴,log信息使用串口打印还是稍微繁琐了一些,而且,每次换一个单片机,就得移植一遍串口。

看来,与生俱来的调试助手,还得是RTT,做一个单片机的板子,至少得流出SWD接口来。

其实RTT也不是很爽,每次打开还得选择MCU,遇上国产小品牌的MCU,选型列表里没有,只能选个M0先试试。

另外,RTT能展现的内容也不够丰富,也就是个打印,想显示曲线,还得换软件。不够轻量化和易用。

对于RTT的协议扩展,最多也就是增加了几种颜色,这个功能,我在封装的RTT模块中已经写好了,不过,当初写的时候,没在意其中的数据结构,今天正好想自己读取RTT数据来展示,就深入研究了一下。

教你如何使用SEGGER RTT优雅的实现日志系统

RTT的原理很简单,他利用printf类似的函数功能,讲我们想要发送出来的信息存储在Ram中的一个固定区域,上位机的软件,就可以通过SWD接口快速的读取这块的缓存数据,然后将它们显示在界面窗口里面。

移植RTT的时候,我们是如何增加颜色的呢?

如上面的宏定义,我们在RTT_printf外面又套了一层壳子,除了我们原本打印的数据外,我们在增加了一头一尾,让我们打印的数据被两个特殊字符包裹起来。

从定义的命名中可以看出,前面的是color,颜色。后面的是一个特殊的控制字符RESET,表示这部分颜色结束了。

在RTT的宏定义文件中是这样定义的:

我通过C#调用了JLINKARM.dll文件,读取了缓存区的数据。

我在MCU中一次性发送了两组数据,一组不带颜色,一组带颜色(LOG_ERROR)。

我在C#中调试,读取到的信息如下,是一串很长的数据,按照字符串来理解。

原始数据:"pitch: 6298 roll: -7623 yaw: 73370 nu001b[0mu001b[1;31mERR: pitch: 6298 roll: -7623 yaw: 73370 nu001b[0m"

其实,这是两串数据,我们需要把它断开,如何切断呢?

以RTTCTRLRESET来切断,也就是u001b[0m。如此以来,我们得到了两组数据。

无颜色:pitch: 6298 roll: -7623 yaw: 73370 nu001b[0m

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

如此以来,我们可以在上位机来对这些颜色信息进行解释,起码可以自己做一个软件,显示出五颜六色的数据。

再者,我们只需要利用这些特殊字符,一样可以写出曲线的显示,仪表盘的显示等等。

目前的缺点是,我们还需要安装jlink驱动来实现这个功能,如果我们使用DAPLink这种不需要驱动的调试器,有没有办法可以兼容RTT的格式,同样开发一套通过SWD接口的LOG软件呢?有知道的大佬,后台指教一下,多谢。

相关推荐

电子产业图谱

多年硬件从业经验,专注分享从研发到供应链,再到精益制造过程中的经验和感悟!