CH582F使用EasyLogger

参考:

EasyLogger

EasyLogger--不一样的打印输出

EasyLogger | 一款轻量级且高性能的日志库(这篇写的挺详细的)

感谢开源项目和其他作者的分享,本文为新手CH582F裸机移植EasyLogger日志库的过程记录。

0.EasyLogger

EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。

下载EasyLogger 到本地,移植参考EasyLogger 核心功能移植说明,一步步来细心点就可以了。

1. 新建工程

在MounRiver中新建工程,这里我使用的是CH582F。

image

新建文件夹,这里我采用CommonLibrary-EasyLogger路径

image

因为是最简单基础的移植,没用到缓冲/异步输出模式,可以选中对应的文件后,右键选择排除编译 elog_async.celog_buf.c,如下图所示。

image

2.添加头文件路径并修改对应文件

添加inc文件夹的路径 ,并应用,编译一下没有错误的往下继续。

image

elog_cfg.h头部添加#include "CH58x_common.h"并修改部分宏定义设置,由于我们在移植的时候没有添加异步输出和缓冲区输出的源文件,因此,我们需要在配置文件中把这两个宏定义屏蔽掉。

#include "CH58x_common.h"

/*.......其余设置默认...........*/
/* output newline sign */
#define ELOG_NEWLINE_SIGN                        "\r\n"

/*---------------------------------------------------------------------------*/
/* enable asynchronous output mode */
//#define ELOG_ASYNC_OUTPUT_ENABLE

/*---------------------------------------------------------------------------*/
/* enable buffered output mode */
//#define ELOG_BUF_OUTPUT_ENABLE

#endif /* _ELOG_CFG_H_ */

之后在elog_port.c中的函数中添加一些代码如下

ElogErrCode elog_port_init(void) {
    ElogErrCode result = ELOG_NO_ERR;

    /* add your code here */
    /* 这里我用的配置串口1:先配置IO口模式,再配置串口 */
    GPIOA_SetBits(bTXD1);
    GPIOA_ModeCfg(bRXD1, GPIO_ModeIN_PU);      // PA8-RXD1-配置上拉输入
    GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA); // PA9-TXD1-配置推挽输出,注意先让IO口输出高电平
    UART1_DefInit();	// 默认115200波特率,8N1
    
    return result;
}

void elog_port_output(const char *log, size_t size) {
    
    /* add your code here */
    printf("%.*s", size, log);
  // %s表示字符串输出,.<十进制数>是精度控制格式符,输出字符时表示输出字符的位数,
  // 在精度控制时,小数点后的十进制数可以使用*来占位,在后面提供一个变量作为精度控制的具体值。
}

// 因为我们是裸机的工程,没有使用到,因此直接返回空分别是获取系统时间、进程信息、线程信息
const char *elog_port_get_time(void) {
    
    /* add your code here */
    return "";
    
}

const char *elog_port_get_p_info(void) {
    
    /* add your code here */
    return "";
}

const char *elog_port_get_t_info(void) {
    
    /* add your code here */
    return "";
}

最后修改main.c文件,添加测试代码,编译成功下载即可。

/********************************** (C) COPYRIGHT *******************************
 * File Name          : Main.c
 * Author             : WCH
 * Version            : V1.0
 * Date               : 2020/08/06
 * Description        : CH582F使用串口1,EayLogger基础移植测试
 * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 * SPDX-License-Identifier: Apache-2.0
 *******************************************************************************/

#define LOG_TAG    "main"

#include "CH58x_common.h"
#include "elog.h"

static void test_elog(void);

/**
 * EasyLogger demo
 */
void test_elog(void) {
    /* test log output for all level */
    log_a("log_a: Hello EasyLogger!");
    log_e("log_e: Hello EasyLogger!");
    log_w("log_w: Hello EasyLogger!");
    log_i("log_i: Hello EasyLogger!");
    log_d("log_d: Hello EasyLogger!");
    log_v("log_v: Hello EasyLogger!");
    elog_raw("elog_raw: Hello EasyLogger!\r\n");
}

/*
* 函数名称:Easylogger_Init
* 输入参数:None
* 返 回 值:None
* 作    者:Barry
* 功能描述:初始化Easylogger打印,配置log输出的颜色、字体、输出内容等
* 修改记录:None
*/
void Easylogger_Init(void)
{
#if 1

  /* 初始化Easylogger */
  elog_init();

  /* 使能颜色输出 */
  elog_set_text_color_enabled(true);

  /* 输出所有内容 */
  elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL);

  /* 输出日志级别信息和日志TAG */
  elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG);
  elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG);
  elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG);

  /* 除了时间、进程信息、线程信息之外,其余全部输出 */
  elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_ALL & ~(ELOG_FMT_TIME | ELOG_FMT_P_INFO | ELOG_FMT_T_INFO));

  /* 输出所有内容 */
  elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_ALL);

  /* 启动Easylogger */
  elog_start();

#endif
}

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);

    Easylogger_Init();

    while(1)
    {
        test_elog();
        DelayMs(1000);
    }

    while(1);
}

image

3.串口终端测试

这里使用的是xshell(MobaXterm也很不错的啊)查看CH582F串口1打印出来的日志测试数据,串口设置默认为115200波特率,8N1,测试效果如下。

image

修改elog_cfg.h中的相关定义,还可以实现错误信息闪烁等效果。

image

这里我设置了错误信息的Blink闪烁,大家可以都试下不同的设置,效果美滋滋啊。

image

posted @   stark1898  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示