[单片机芯片] 【沁恒CH32V307开发板测评】单片机开发好帮手--easylogger日志系统

[复制链接]
星享社 发表于 2025-8-15 22:29 | 显示全部楼层 |阅读模式

今天使用CH32V307开发板来移植一下easylogger日志系统。
一、日志的作用
在单片机开发过程中,日志系统是调试、维护和优化代码的重要工具,作用也是非常大的,主要有以下几个作用:
1、实时调试​​
通过记录程序运行状态、变量值,快速定位异常或逻辑错误
2、问题复现​​
保存历史运行数据,便于复现偶发性故障
3、性能分析​​
统计关键代码段的执行时间或资源占用情况
4、​​系统监控​​
长期运行中记录硬件状态(如内存、温度等),预防潜在风险
5、可维护性​​
提供清晰的运行轨迹,降低后续升级或团队协作的沟通成本
以上足见日志系统的重要性,下面介绍一个好用的日志库---easylogger
二、EasyLogger简介
1、EasyLogger是什么?
它是一款专为嵌入式设备设计的开源日志库(GitHub 开源),以 ​​轻量级、低资源占用、高可定制性​​ 为核心优势,适合资源受限的单片机;
2、核心特性
1)多级别日志​​:支持 Error、Warning、Info、Debug 等分级输出,便于过滤关键信息。
2)超低资源占用​​:内核代码精简(<1KB RAM),支持静态内存分配,无动态内存依赖。
​​3)多输出形式​​:可输出至串口、Flash、文件系统甚至网络(需自行适配硬件接口)。
4)异步日志模式​​:可选异步缓存机制,减少日志写入对实时任务的干扰。
​​5)格式化兼容​​:类似 printf的格式化语法(如 log_i("Sensor Value: %d", val)),开发者无需额外学习成本。
6)跨平台支持​​:提供 RTOS(如 FreeRTOS)和裸机系统的适配接口

三、移植EasyLogger
1、下载EasyLogger源代码
源代码链接,点击直接下载即可

2、新建工程
3、在新建工程目录下新建EasyLogger目录

4、复制第一步下载的代码src/inc/port里面的文件到刚刚新建的目录下

5、配置EasyLogger
根据需要配置输出日志的最大长度、输出日志等级、输出标签的最大长度等

6、在elog.c文件中的elog_port_output输出日志函数里面添加自己的输出日志的接口函数,我这里选择的是串口输出

另外还可以添加获取时间的函数接口

这里我没有添加。
7、编写elog初始化函数
  1. /**
  2. * elog initialization
  3. *
  4. * [url=home.php?mod=space&uid=266161]@return[/url] current thread name
  5. */
  6. void elog_config(void) {
  7.         //初始化elog   初始化的 EasyLogger 的核心功能,初始化后才可以使用下面的API
  8.         elog_init();
  9.         //日志颜色功能是将各个级别日志按照颜色进行区分,默认颜色功能是关闭
  10.         //true: 使能,false: 失能
  11.         elog_set_text_color_enabled(true);

  12.         /* 设置每个级别的日志输出格*/
  13.         elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_LINE |ELOG_FMT_DIR);
  14.         elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_LINE );
  15.         elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_LINE );
  16.         elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_LINE |ELOG_FMT_FUNC);
  17.         elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_LINE );
  18.         elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_LINE);

  19.         //elog_set_filter_lvl(ELOG_LVL_VERBOSE);//设置输出等级为错误
  20.         //启动elog  在初始化完成后,必须调用启动方法,日志才会被输出
  21.         elog_start();
  22. }


8、编写测试代码
  1. /*********************************************************************
  2. * @fn      main
  3. *
  4. * [url=home.php?mod=space&uid=247401]@brief[/url]   Main program.
  5. *
  6. * @return  none
  7. */
  8. int main(void)
  9. {
  10.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  11.         SystemCoreClockUpdate();
  12.         Delay_Init();
  13.         USART_Printf_Init(115200);       
  14.         printf("SystemClk:%d\r\n",SystemCoreClock);
  15.         printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
  16.         printf("This is printf example\r\n");
  17.         SYSTICK_Init_Config((SystemCoreClock / 1000)-1);
  18.         USART2_Init();
  19.         elog_config();
  20.         while(1)
  21.     {
  22.         if (g_usart2RecvOK) {
  23.             g_usart2RecvOK = 0;
  24.             printf("recved data:\r\n");
  25.             for(uint16_t i = 0;i< g_usart2RxCnt;i++) {
  26.                 printf("%c",g_usart2RxBuf[i]);
  27.             }
  28.             g_usart2RxCnt = 0;
  29.             printf("\r\n");
  30.         }
  31.                 log_a("this is a EasyLogger demo");
  32.         log_a("it can output log about file directory");
  33.         log_i("it can output log about function");
  34.         log_e("it can output log in line");
  35.                 log_d("it can output log in color");
  36.         log_w("it can output log in time");
  37.                 Delay_Ms(3000);
  38.         }
  39. }


9、下载验证
output.png
可以看到easylogger可以输出文件路径,函数名字,颜色、打印的所在行还有标签信息,另外还可以添加时间。
综上,easylogger真是一款非常好用方便的利器



您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部