单片机打印日志还能这么玩?一招秀翻~

发布时间:2022-12-09  

分享一个小技巧,打印带颜色编码的日志,希望对你有所帮助。


log的重要性

在项目开发中,日志可以帮助我们调试和发现产品中潜藏的问题,比如在发生错误的时候,打印相应的日志,定位发生错误的位置,通常我们需要日志满足以下这些功能:

  • 不同的日志级别(Trace、Warning、Info、Error、fatal);

  • 能够设置日志级别;

  • 基于日志级别的颜色编码;

  • 占用空间小;

  • 可配置,可以完全禁用它;

  • 时间戳;

  • 易于集成;

下面,我们介绍一下如何在串口上打印出不同颜色的字符串。

打印彩色的log

在Stack Overflow上有人提出过类似的问题,如何在终端打印出彩色的字符?

这里给出了一个很简单的C程序demo,我测试了一下,确实可以实现。

最终编译之后运行得到的结果如下,发现打印的字符颜色发生了变化:

输出结果

ANSI转义序列

ANSI转义序列(ANSI escape sequences)是一种带内信号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以ESC转义字符和"["字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。

所以,这里我们查了一下ascii码表,可以发现ESC的码值是十进制的27,也就是十六进制的0x1b,具体如下所示:

ascii码表

所以转义序列的格式如下:

转自wiki

可以参考文档:https://invisible-island.net/xterm/ctlseqs/ctlseqs.html

所以这里简单举个例子,设置不同的背景色:

重点是这一句:printf("x1b[48;5;%dm %03d x1b[0m", i, i);简单分析一下:

  • 其中x1b[ 是起始指令,后面的48表示设置背景色,38是前景色;

  • 48后面通常会跟一个;5;,这个是文档中规定的,第一个%d,是设置色号,最后以m结尾;

参数设置

  • 第二个%03d是中间需要显示的文本;

  • 最后以x1b[0m结束。

测试系统是Ubuntu 1804,最终的运行结果如下所示:

运行结果

单片机中实现

单片机可以将日志通过串口打印出来,这时候需要显示彩色字符,需要一个前提,就是串口终端软件需要支持解析ANSI转义序列。

下面我做了简单的实验,通过STM32的串口,发送相应的字符,然后在PC端使用MobaXterm软件打开串口并接收数据;因为这个软件是支持ANSI序列的,所以最终可以显示出不同颜色的字符串。具体如下所示:

moba xterm中的结果


总结

本文介绍了如何打印彩色字符串,其中简单介绍了ANSI转义序列,并且给出了几个小的实验结果,并在单片机上发送字符串到PC上,使用xterm串口终端,可以正常显示设置前景色的字符串,结果符合预期。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    51单片机入门点亮LED;  一.keil新建单片机工程   1.单击”project”选项中的“new uvision project”,输入工程姓名。      2.挑选单片机类型,本系......
    基于51单片机按键控制喇叭发出多种声音;具体实现功能: 51单片机按键控制喇叭发出多种声音。 设计介绍 51单片机简介 51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编......
    基于51单片机的智能温控风扇设计;具体实现功能: 由51单片机+DS18B20温度传感器+共阳四位数码管+风扇+独立按键+DC电源构成。 具体功能: 1、采用DS18B20温度......
    产品有一定量(几千以内吧),但不是非常多的情况。 通过【脱机烧录器】下载程序 之前量产时,通过【编程工具】下载程序的方式比较多,但随着【脱机烧录器】的普及,然后兼容的单片机类型也越来越多,通过【脱机烧录器】量产......
    各种通用指令和算术运算,并且具有很好的中断处理能力。 (2) 存储器:51单片机内部具有RAM、ROM、EEPROM三种类型的存储器。其中,RAM 可以用于存放变量、栈和寄存器等数据;ROM 存储......
    现在PIC单片机还有用的吗?;对于计算机学院与电子学院相关的同学来说,单片机一定不是一个陌生的概念。在大学的学习生涯中,经常用于教学的是MCS-51系列单片机。其实,除了MCS-外,还有一类单片机......
    分析:在语法树上进行类型检查和语义分析,确定变量类型和作用域等信息。 (4) 代码生成:将语法树转换为目标代码,生成可执行程序或库文件。 2. 汇编语言 在51单片机编程中,使用......
    0 其中: void:为中断函数的返回类型,中断函数多为空类型; Initd():是中断函数的名称,这个函数名符合C语言函数命名规范就可以,随便起; interrupt:为51单片机......
    另一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,DSP类,FPGA类,国内FPGA的工程师大多是在IC设计公司从事IP核的前端验证,这部分不搞到门级,前途......
    MCS-51系列单片机各种不用的类型特点介绍;MCS是Intel公司生产的单片机的系列符号,例如,Intel公司的MCS-48、MCS-51、MCS-96系列单片机。MCS-51系列单片机......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>