效果展示:
printf函数可以说是大家日常调试代码尤其是debug过程中使用最多的函数之一了
我们可以通过printf的格式化功能,打印出多重颜色的数据,让你在茫茫字符中一眼找到你所需要的关键数据。使用例如下:
这张图是在Xshell中的效果,其实支持这种字符颜色的串口工具很多,再举一例,如Vofa:
不过这里黄色显得有些不清晰了,问题不大,修改就行了
实现方式:
首先创建一个.h文件作为储存颜色代码的库,方便快速调用。具体的代码如下:
#ifndef SRC_COLOR_H_
#define SRC_COLOR_H_
#define NONE "\e[0m" //清除颜色,即之后的打印为正常输出,之前的不受影响
#define BLACK "\e[0;30m" //深黑
#define L_BLACK "\e[1;30m" //亮黑,偏灰褐
#define RED "\e[0;31m" //深红,暗红
#define L_RED "\e[1;31m" //鲜红
#define GREEN "\e[0;32m" //深绿,暗绿
#define L_GREEN "\e[1;32m" //鲜绿
#define BROWN "\e[0;33m" //深黄,暗黄
#define YELLOW "\e[1;33m" //鲜黄
#define BLUE "\e[0;34m" //深蓝,暗蓝
#define L_BLUE "\e[1;34m" //亮蓝,偏白灰
#define PURPLE "\e[0;35m" //深粉,暗粉,偏暗紫
#define L_PURPLE "\e[1;35m" //亮粉,偏白灰
#define CYAN "\e[0;36m" //暗青色
#define L_CYAN "\e[1;36m" //鲜亮青色
#define GRAY "\e[0;37m" //灰色
#define WHITE "\e[1;37m" //白色,字体粗一点,比正常大,比bold小
#define BOLD "\e[1m" //白色,粗体
#define UNDERLINE "\e[4m" //下划线,白色,正常大小
#define BLINK "\e[5m" //闪烁,白色,正常大小
#define REVERSE "\e[7m" //反转,即字体背景为白色,字体为黑色
#define HIDE "\e[8m" //隐藏
#define CLEAR "\e[2J" //清除
#define CLRLINE "\r\e[K" //清除行
#endif /* SRC_COLOR_H_ */`
在需要使用printf的文件头部引用这个.h文件即可使用,具体使用方式,是在printf的格式化部分添加需要的格式,例如
printf("Cacu y/x ->"YELLOW "%f"NONE" \r\n", phase);
其中,第一段字符为"Cacu y/x ->",通过YELLOW切换到黄色打印模式。第二段字符为"%f",用于打印所需的浮点数。随后通过NONE字符清除颜色,即之后的打印为正常输出,之前的则不受影响。最后一段再打印换行符" \r\n"。
同样的,再执行以下函数就可以实现上一节中的打印效果,十分的简单便捷。
printf("Simulated DATA -> " RED "i: %05d " BLUE " q: %05d "NONE "\r\n" , i_data, q_data);
CSDN上广为流传的一种例程中,还打印了当前行号,如果大家需要也可做参考使用
#include
#include
int print_test(void)
{
printf("This is a character control test!\n" );
printf("[%2u]" CLEAR "CLEAR\n" NONE, __LINE__);
printf("[%2u]" BLACK "BLACK " L_BLACK "L_BLACK\n" NONE, __LINE__);
printf("[%2u]" RED "RED " L_RED "L_RED\n" NONE, __LINE__);
printf("[%2u]" GREEN "GREEN " L_GREEN "L_GREEN\n" NONE, __LINE__);
printf("[%2u]" BROWN "BROWN " YELLOW "YELLOW\n" NONE, __LINE__);
printf("[%2u]" BLUE "BLUE " L_BLUE "L_BLUE\n" NONE, __LINE__);
printf("[%2u]" PURPLE "PURPLE " L_PURPLE "L_PURPLE\n" NONE, __LINE__);
printf("[%2u]" CYAN "CYAN " L_CYAN "L_CYAN\n" NONE, __LINE__);
printf("[%2u]" GRAY "GRAY " WHITE "WHITE\n" NONE, __LINE__);
printf("[%2u]" BOLD "BOLD\n" NONE, __LINE__);
printf("[%2u]" UNDERLINE "UNDERLINE\n" NONE, __LINE__);
printf("[%2u]" BLINK "BLINK\n" NONE, __LINE__);
printf("[%2u]" REVERSE "REVERSE\n" NONE, __LINE__);
printf("[%2u]" HIDE "HIDE\n" NONE, __LINE__);
printf(GREEN "csdsafsfsdfsdfsadffsda \n\n");
printf(L_RED "L_RED\n");
printf(NONE "xxxxxxx");
return 0;
}
int main()
{
print_test();
return 0;
}
输出效果同样很好看~