不会吧,你还在赤裸裸的使用printf?

原创 嵌入式艺术 2022-10-24 11:35

不会吧,你还在赤裸裸的使用printf?

哈喽,伙计们!

最近做了一些Linux应用开发方面的东西,感觉现在有点混乱,所以想将每个知识点模块化,并且能够搭建自己的API库,方便以后能够直接使用!

今天主要来讨论一下我们最常用的打印字符串,实现调试打印和颜色打印。

 

1、明确需求

Linux开发环境下,我们日常使用的打印字符串的主要需求可能有两种:

  • 多级别打印:我们调试打印信息可以分为多个级别,全局设置打印级别,来实现打印的全局管理!
  • 多颜色打印:不同的打印级别对应不同的打印色彩,方便快速吸引开发者的注意力,快速定位问题!

基于以上两个基本需求,我们来进行简单封装。

 

2、打印级别分类

打印级别参考内核的分类,设置级别如下:

typedef enum {
LOG_EMERG=0, /**< Emergency */
LOG_ALERT, /**< Alert */
LOG_CRIT, /**< Critical */
LOG_ERR, /**< Error */
LOG_WARNING, /**< Warning */
LOG_NOTICE, /**< Notice */
LOG_INFO, /**< Information */
LOG_DEBUG /**< Debug */
}GLOBAL_LOG_LEVEL;

 

3、打印级别控制

打印级别分类后,我们定义全局变量,来全局控制打印级别。

GLOBAL_LOG_LEVEL g_log_level = LOG_INFO;        //  default log level

/**
* @brief 设置LOG打印等级
*
* @param log_level
*/


void Set_Log_Lever(GLOBAL_LOG_LEVEL log_level) {

g_log_level = log_level;

}

如果需要全局调整打印级别,我们可以调用Set_Log_Lever的接口,实现打印级别的适时调整。

 

4、打印信息添加

在输出我们正常打印信息之前,我们也需要添加一些时间信息,打印级别信息等。

    const char global_log_level_string[8][10] = {"EMERG", "ALERT", "CRIT", "ERR", "WARNING", "NOTICE", "INFO", "DEBUG"};
static char str_tmp[512];

// 增加时间信息
time_t now;
time(&now);
strftime(str_tmp, sizeof(str_tmp), "[%Y-%m-%d %H:%M:%S ", localtime(&now));

//加入LOG后缀信息
strcat(str_tmp,global_log_level_string[level]);
strcat(str_tmp, "] ");

通过以上代码,将时间和打印级别信息都添加到字符串之前。

输出效果如下

[2022-10-21 09:13:54 INFO] log info output

 

5、颜色定义

颜色控制如何做?

很简单,在输出字符串前,符合特定的颜色控制格式,就可以更改打印颜色了。

printf("\033[显示方式;字背景颜色;字体颜色m…\033[0m")

控制命令以\033[开头,以m结尾,而中间则是属性码,属性代码之间使用;分隔,如\033[1;34;42m,最后以默认颜色\033[0m结尾,以避免影响后面正常打印!

显示方式

意义显示方式
默认0
高亮显示1
下划线4
闪烁5
反白显示7
不可见8

 

前景颜色和背景颜色

颜色前景色背景色
黑色3040
红色3141
绿色3242
黄色3343
蓝色3444
紫红色3545
青蓝色3646
白色3747

没有设置的话就是默认

 

颜色定义

下方定义一些常用颜色,方便打印调用。

#define LOG_CLRSTR_NONE         "\033[0m"               // 默认显示
#define LOG_CLRSTR_RED "\033[0;42;31m" // 绿红色
#define LOG_CLRSTR_GREEN "\033[0;32m" // 绿色
#define LOG_CLRSTR_BLUE "\033[0;32;34m" // 蓝色
#define LOG_CLRSTR_DARK_GRAY "\033[1;30m" // 灰色
#define LOG_CLRSTR_CYAN "\033[0;36m" // 青色
#define LOG_CLRSTR_PURPLE "\033[0;35m" // 紫色
#define LOG_CLRSTR_BROWN "\033[0;33m" // 棕色
#define LOG_CLRSTR_YELLOW "\033[5;42;33m" // 绿黄色
#define LOG_CLRSTR_WHITE "\033[1;37m" // 白色

 

6、颜色控制

定义完各类颜色后,我们要做的就是对于不同级别的打印,选择不同的颜色!

//LOG类型判断,选择不同打印颜色
switch (level)
{
case LOG_EMERG:
log_color = LOG_CLRSTR_RED;
break;
case LOG_ALERT:
log_color = LOG_CLRSTR_BLUE;
break;
case LOG_CRIT:
log_color = LOG_CLRSTR_CYAN;
break;
case LOG_ERR:
log_color = LOG_CLRSTR_RED;
break;
case LOG_WARNING:
log_color = LOG_CLRSTR_PURPLE;
break;
case LOG_NOTICE:
log_color = LOG_CLRSTR_YELLOW;
break;
case LOG_INFO:
log_color = LOG_CLRSTR_DARK_GRAY;
break;
case LOG_DEBUG:
log_color = LOG_CLRSTR_BROWN;
break;
default:
log_color = LOG_CLRSTR_GREEN;
break;
}

 

7、颜色打印

在选择对应颜色之后,我们要做的就是将这些颜色信息,放到正常打印信息的前方。

可以通过字符串拼接的函数实现。

    //  重新设置标准输出
sprintf(str_uart, "%s",log_color);
strcat(str_uart, str_tmp);

...

strcat(str_uart,LOG_CLRSTR_NONE);
strcat(str_uart, "\r\n");
printf("%s",str_uart);

这里的颜色打印,说白了就是在我们要打印的字符串前方,加入打印颜色的信息即可,打印字符串结束之后,要加上\033[0m,来恢复默认!

 

8、打印预览

设置完成之后,我们看一下打印预览:

 

9、Demo获取

多级别彩色打印这个功能,已经封装成了一个API,我们直接获取源码,将.c.h文件加入到自己工程即可使用!


源码可在公众号【嵌入式艺术】菜单栏下获取!


嵌入式艺术
MEET SPRING
万物更生,新岁开启


嵌入式艺术 分享一些高级嵌入式相关知识,包括:计算机基础、操作系统、Linux驱动、Linux内核、RT-thread等,除此之外,并且会组织一些简单的训练项目,一起成长。 我的创作理念:专注分享高质量的嵌入式文章,让大家读有所得!
评论 (0)
  •   基于 2025 年行业权威性与时效性,以下梳理国内知名软件定制开发企业,涵盖综合型、垂直领域及特色技术服务商:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   五木恒润科技有限公司:是一家专业的部队信
    华盛恒辉l58ll334744 2025-05-12 16:13 250浏览
  •   定制软件开发公司推荐清单   在企业数字化转型加速的2025年,定制软件开发需求愈发多元复杂。不同行业、技术偏好与服务模式的企业,对开发公司的要求大相径庭。以下从技术赛道、服务模式及行业场景出发,为您提供适配的定制软件开发公司推荐及选择建议。   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转
    华盛恒辉l58ll334744 2025-05-12 15:55 332浏览
  • 感谢面包板论坛组织的本次测评活动,本次测评的对象是STM32WL Nucleo-64板 (NUCLEO-WL55JC) ,该测试板专为LoRa™应用原型构建,基于STM32WL系列sub-GHz无线微控制器。其性能、功耗及特性组合经过精心挑选,支持通过Arduino® Uno V3连接,并利用ST morpho接头扩展STM32WL Nucleo功能,便于访问多种专用屏蔽。STM32WL Nucleo-64板集成STLINK-V3E调试器与编程器,无需额外探测器。该板配备全面的STM
    无言的朝圣 2025-05-13 09:47 151浏览
  •   电磁数据管理系统深度解析   北京华盛恒辉电磁数据管理系统作为专业的数据处理平台,旨在提升电磁数据的处理效率、安全性与可靠性。以下从功能架构、核心特性、应用场景及技术实现展开分析:   应用案例   目前,已有多个电磁数据管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据管理系统。这些成功案例为电磁数据管理系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与接入:实时接收天线、频谱仪等设备数据,兼容多协议接口,确保数据采集的全面性与实时性
    华盛恒辉l58ll334744 2025-05-13 10:59 271浏览
  • 在全球供应链紧张和国产替代需求推动下,国产存储芯片产业快速发展,形成设计到封测一体化的完整生态。北京君正、兆易创新、紫光国芯、东芯股份、普冉股份和佰维存储等六大上市公司在NOR/NAND Flash、DRAM、嵌入式存储等领域布局各具特色,推动国产替代提速。贞光科技代理的品牌紫光国芯,专注DRAM技术,覆盖嵌入式存储与模组解决方案,为多领域客户提供高可靠性产品。随着AI、5G等新兴应用兴起,国产存储厂商有望迎来新一轮增长。存储芯片分类与应用易失性与非易失性存储芯片易失性存储芯片(Volatile
    贞光科技 2025-05-12 16:05 200浏览
  •   电磁数据展示系统平台解析   北京华盛恒辉电磁数据展示系统平台是实现电磁数据高效展示、分析与管理的综合性软件体系,以下从核心功能、技术特性、应用场景及发展趋势展开解读:   应用案例   目前,已有多个电磁数据展示系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据展示系统。这些成功案例为电磁数据展示系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与预处理   智能分析处理   集成频谱分析、时频变换等信号处理算法,自动提取时域频域特征;
    华盛恒辉l58ll334744 2025-05-13 10:20 361浏览
  • 在当下竞争激烈的 AI 赛道,企业高层的变动往往牵一发而动全身,零一万物近来就深陷这样的动荡漩涡。近日,零一万物联合创始人、技术副总裁戴宗宏离职创业的消息不胫而走。这位在大模型基础设施领域造诣颇深的专家,此前在华为云、阿里达摩院积累了深厚经验,在零一万物时更是带领团队短期内完成了千卡 GPU 集群等关键设施搭建,其离去无疑是重大损失。而这并非个例,自 2024 年下半年以来,李先刚、黄文灏、潘欣、曹大鹏等一众联创和早期核心成员纷纷出走。
    用户1742991715177 2025-05-13 21:24 108浏览
  • ‌磁光克尔效应(Magneto-Optic Kerr Effect, MOKE)‌ 是指当线偏振光入射到磁性材料表面并反射后,其偏振状态(偏振面旋转角度和椭偏率)因材料的磁化强度或方向发生改变的现象。具体表现为:1、‌偏振面旋转‌:反射光的偏振方向相对于入射光发生偏转(克尔旋转角 θK)。2、‌椭偏率变化‌:反射光由线偏振变为椭圆偏振(克尔椭偏率 εK)。这一效应直接关联材料的磁化状态,是表征磁性材料(如铁磁体、反铁磁体)磁学性质的重要非接触式光学探测手段,广泛用于
    锦正茂科技 2025-05-12 11:02 297浏览
  • 文/Leon编辑/cc孙聪颖‍2025年1月至今,AI领域最出圈的除了DeepSeek,就是号称首个“通用AI Agent”(智能体)的Manus了,其邀请码一度被炒到8万元。很快,通用Agent就成为互联网大厂、AI独角兽们的新方向,迅速地“卷”了起来。国外市场,Open AI、Claude、微软等迅速推出Agent产品或构建平台,国内企业也在4月迅速跟进。4月,字节跳动、阿里巴巴、百度纷纷入局通用Agent市场,主打复杂的多任务、工作流功能,并对个人用户免费。腾讯则迅速更新腾讯元器的API接
    华尔街科技眼 2025-05-12 22:29 148浏览
  •   舰艇电磁兼容分析与整改系统平台解析   北京华盛恒辉舰艇电磁兼容分析与整改系统平台是保障海军装备作战效能的关键技术,旨在确保舰艇电子设备在复杂电磁环境中协同运行。本文从架构、技术、流程、价值及趋势五个维度展开解析。   应用案例   目前,已有多个舰艇电磁兼容分析与整改系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润舰艇电磁兼容分析与整改系统。这些成功案例为舰艇电磁兼容分析与整改系统的推广和应用提供了有力支持。   一、系统架构:模块化智能体系   电磁环境建模:基
    华盛恒辉l58ll334744 2025-05-14 11:22 45浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦