[开发工具]

适用于多任务场景下的纸飞机调试助手

[复制链接]
642|0
手机看帖
扫描二维码
随时随地手机跟帖
inhowe|  楼主 | 2021-5-5 22:44 | 显示全部楼层 |阅读模式
本帖最后由 inhowe 于 2021-5-5 22:46 编辑

# 背景
在进行嵌入式开发的时候常常会有很多log要打印,随着程序功能的逐渐复杂,log数量也越来越多,要从万千实时刷新的数据流从找到需要的log信息越来越困难和麻烦,如何改善这一现象,提高开发者的效率?纸飞机调试助手针对这个问题进行了专门的思考和设计,引入了一些想法来尝试解决这类问题。
# 一、关键字高亮特性

第一个想法就是关键字高亮。在技术快速发展的今天,几乎所有开发者的代码编辑器都支持了关键字高亮,通过不同颜色来强调传达不同的信息,使得开发工作有明显的提效,然而大多数调试助手的文本还依然是最简单的白底黑字,最多可以调一个背景色或者字体,在阅读体验上停留在非常原始的级别。于是纸飞机很自然的引入了关键字高亮特性,可以将数字、字符串、标点符号等信息用不同的颜色来表达。
关键字高亮.jpg

# 二、数据分窗特性
第二个想法就是数据分窗。我们知道操作系统中引入了多任务的概念,每一个任务完成一个特定的功能,任务之间相对独立,互不干扰,那么很自然的,各个任务之间的log数据也可以是独立的,如果能把各个任务的数据显示在不同的窗口,我们就可以筛掉大部分的信息,专注于我们想要关注(正在调试)的任务的log信息。
数据分窗.gif

# 三、数据过滤特性
数据分窗是一种方法,但是能不能再简单一点?或者再自由一点?纸飞机也提供了一种解决方案:输入任意英文字符作为关键字,自动提取包含关键字的log数据并显示。这和linux系统下的grep命令非常相似,它可以快速帮助我们从数据流中提取想要的log数据。
数据过滤.gif

# 四、多窗口绘图特性
既然数据分窗功能可以对文本信息进行分窗显示,那为何不增加一个绘图功能,并同时支持分窗显示呢?这样子我的环境监控任务可以绘制一条温湿度曲线,系统监控任务可以绘制一条CPU负载曲线,二者互不干扰。所以,纸飞机也是支持多窗口绘图的,不仅如此,还支持数值表格化显示和频谱图。因此,你可以利用绘图功能观察数据的变化情况,可以利用数值表格化显示来只观察最新的数据,或者频谱图来观察数据的频域信息。当然,纸飞机是可以支持百万量级的绘图不卡顿的。
多窗口绘图.gif

# 五、其他特性
纸飞机调试助手十分重视改善用户的工作体验,因此还有其他很多特性。比如:
  • 纸飞机是一款串口/网络二合一的调试器,互联网概念已经火了很久了,没有理由不支持网络调试模式对不对;
  • 纸飞机内置了HEX转换小工具,可以实现ascii、hex、和float数据的快速相互转换,此外还有ISP下载工具、ASCII码表、运算优先级表等小工具;
  • 纸飞机支持数据实时记录仪,可以实时记录接收的数据(包括原始数据和解析出来的曲线数据)
  • 纸飞机具有数据恢复机制,不用担心因软件意外崩溃丢失了你的重要数据。(尽管它十分稳定,但是有这么一个机制对你的数据安全总是有好处的)
  • 纸飞机具有多样的数据保存功能:原始数据、显示数据、曲线数据、曲线图片等。
  • 纸飞机有Linux版本,这得感谢QT的跨平台特性。

# 六、如何使用
要使用数据分窗或者多窗口绘图功能,需要按照一定的协议发送数据给纸飞机。
协议构成十分简单,是具有下列风格的字符串:
"{title:string}\n"
其中:
  • title是自定义的英文标题,纸飞机将根据title建立不同的窗口。
  • string是任意英文数据,这些数据将显示在对应title的窗口下。
  • {}是一堆花括号,而\n是一个换行符,不可以省略。
C语言简单改造printf即可使用,举例:
// 首先定义宏函数简化后续工作
#define    PRINT(title, fmt, ...)    printf("{"#title":"fmt"}\n", __VA_ARGS__)

// 若要绘图可以这样使用(两个曲线显示在plotter窗口)
PRINT(plotter,  "%f,%f",  data1, data2);

// 若要分窗显示可这样使用  (电压数据显示在monitor窗口)
PRINT(monitor,  "voltage is %f V", data1);

最后,纸飞机调试助手可以通过这个链接进行下载使用。
http://www.inhowe.com/ComAssistant/Eval.html



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝