串口调试日志打印颜色输出

前言

  • 颜色文本输出需要在支持该功能的终端上使用,如我自己习惯用MobaXterm,一款内置集成多种工具的终端工具。

日志颜色格式说明

  • 1.颜色日志格式
    • 格式:\033[显示方式;字体色;背景色m
    • 如缺省默认:\033[0m //表示结束打印
    • \033 八进制转义 表示ESC
  • 2.显示方式
    • 0(默认值)
    • 1(高亮)
    • 4(下划线)
    • 5(闪烁)
    • 7(反显)
    • 22(非粗体)
    • 24(非下划线)
    • 25(非闪烁)
    • 27(非反显)
  • 3.字体色
    • 30(黑色)
    • 31(红色)
    • 32(绿色)
    • 33(黄色)
    • 34(蓝色)
    • 35(洋红)
    • 36(青色)
    • 37(白色)
  • 4.背景色
    • 40(黑色)
    • 41(红色)
    • 42(绿色)
    • 43(黄色)
    • 44(蓝色)
    • 45(洋红)
    • 46(青色)
    • 47(白色)

日志函数

#define COLR_LOG_MODE //颜色日志输出模式(显示终端需要支持)

#ifdef COLR_LOG_MODE
	#define COLR_SET(dis_mode,fwd_clor,bak_clor) \
	printf("\033[%d;%d;%dm",dis_mode,fwd_clor,bak_clor);
#else
	#define COLR_SET(dis_mode,fwd_clor,bak_clor) (NULL);
#endif
/*
x:显示模式|
y:前景色
z:背景色
*/
#define DEVICE_LOG(x,y,z,dev_name,...) {\
/*设置颜色*/ 		COLR_SET(x,y,z);\
/*设置参数*/ 		printf(dev_name,##__VA_ARGS__);\
/*设置结束*/ 		COLR_SET(0,0,0);\
}
#define DEVICE_MULTI_LOG(x0,y0,z0,x1,y1,z1,dev_name,...) {\
/*设置device name的颜色*/       COLR_SET(x0,y0,z0);\
/*设置device name*/ 		printf("%s",#dev_name);\
/*设置参数的颜色*/ 		COLR_SET(x1,y1,z1);\
/*设置参数*/ 		printf(__VA_ARGS__);\
/*设置结束*/	COLR_SET(0,0,0);\
}

示例 (代码局部)

int main(void)
{
   //$$ --外设初始化
	HAL_Init();
	__TODO:	    
	sem_create(&slp_sem);	
	SystemClock_Config();
	SystemPower_Config(); 
	MX_GPIO_Init();
	MX_USART1_UART_Init(); 
    HAL_Delay(1000);	 
	DEVICE_LOG(1,33,40,"[SYSTEM]> MCU Startup...\r\n");
	DEVICE_LOG(1,33,40,"[SYSTEM]> \r\n");			
	#if 1
	//$$ --BMI160初始化
//	if(0==bmi160_init(&dev_bmi160,MX_I2C1_Init))
//	{		 
//		BMI160_LOG("> Mounted OK ...\r\n");
//		bmi160_config_init(&dev_bmi160);
//	}
	#endif
	//$$ --应变传感器初始化
    //strain_sensor_init(&strain_sensor);
	//$$ --无线设备[LoRa(Ra-02/SX1278)]初始化	
    //device_radio_init();
	//$$ --ADXL355初始化
    adxl355_init(&adxl355,MX_SPI3_Init_MODE0);	
	//$$ --RTC初始化	
	HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);//禁止RTC周期唤醒中断
	//$$ --IWTD初始化			
	//MX_IWDG_Init();

	DEVICE_LOG(1,33,40,"[SYSTEM]-------Guangdong QiTek Smart Sensor Ltd.,Company-------\r\n");
	DEVICE_LOG(1,33,40,"[SYSTEM]------------Make Data: %s-%s-------\r\n",\
	          (const char *)__TIME__,(const char *)__DATE__);
	DEVICE_LOG(1,33,40,"[SYSTEM]------------------All Init OK------------------------\r\n");
	DEVICE_LOG(1,33,40,"[SYSTEM]\r\n");	

	while (1)
	{		
		tasks_os_run(multi_task,sizeof(multi_task)/sizeof(*multi_task));//$$ --多任务启动
		if(0!=sem_take(&slp_sem)) goto __TODO;//$$ --唤醒系统后,重新进入初始化
	}
}

/*g值数据转换*/
me->acce.x =G_CONVERT(acce_adc_x);//输出值
me->acce.y =G_CONVERT(acce_adc_y);
me->acce.z =G_CONVERT(acce_adc_z);
me->acce.t =T_CONVERT((double)acce_adc_t);

me->acce.os_x =G_CONVERT(acce_offset_adc_x);//失调值
me->acce.os_y =G_CONVERT(acce_offset_adc_y);
me->acce.os_z =G_CONVERT(acce_offset_adc_z);  

//反正弦(实际加速度/标准加速度)
double rad_a=acos((double)me->acce.x/9.8);//
double rad_b=acos((double)me->acce.y/9.8);//
double rad_c=acos((double)me->acce.z/9.8);//

/*日志输出*/
DEVICE_MULTI_LOG(1,33,40,\
				1,37,40,\
				[ADXL355],\
				"> Radian data : αr=%0.5frad  | βr=%0.5frad | θr=%0.5frad\r\n",rad_a,rad_b,rad_c);		
DEVICE_MULTI_LOG(1,33,40,\
				1,37,40,\
				[ADXL355],\
				"> Angle  data : α =%0.5f°   | β =%0.5f°  | θ =%0.5f°\r\n",\
				A_CONVERT(rad_a),A_CONVERT(rad_b),A_CONVERT(rad_c));					
DEVICE_MULTI_LOG(1,33,40,\
				1,37,40,\
				[ADXL355],\
				"> Accel  data : x =%0.5fg/s  | y =%0.5fg/s | z =%0.5fg/s\r\n",\
				me->acce.x,me->acce.y,me->acce.z);
DEVICE_MULTI_LOG(1,33,40,\
				1,37,40,[\
				ADXL355],\
				"> Offset data : xs=%0.5fg/s  | ys=%0.5fg/s | zs=%0.5fg/s\r\n",\
				me->acce.os_x,me->acce.os_y,me->acce.os_z);	
DEVICE_MULTI_LOG(1,33,40,\
				1,37,40,\
				[ADXL355],\
				"> Temper data : %0.2f.C\r\n",me->acce.t);				
				DEVICE_MULTI_LOG(1,33,40,1,37,40,[ADXL355],"> \r\n");

效果截图

串口调试日志打印颜色输出_第1张图片

你可能感兴趣的:(嵌入式开发笔记,stm32,单片机,MobaXterm,log)