移植 EasyLogger 到 GD32F350 中运行
EasyLogger 是 armink 大神开源的一个适用于 MCU 的日志库,介绍如下:
EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。
可以在 armink 的 github 或者 gitee 找到。
首先从 github 或者 gitee 获取源码,在原来实现了 UART 的工程基础上添加,在工程目录中新建 components 个文件夹,把 EasyLogger 源码放进去:
添加源文件:
添加头文件路径:
修改配置文件 elog_cfg.h,跟原文件相比做了如下修改:
修改 elog_port.c 文件,参考 Easylogger 所带的例程做了如下修改,如下:
#include <elog.h>
#include "stdio.h"
#include <cmsis_iar.h>
/**
* EasyLogger port initialize
*
* @return result
*/
ElogErrCode elog_port_init(void) {
ElogErrCode result = ELOG_NO_ERR;
return result;
}
/**
* output log port interface
*
* @param log output of log
* @param size log size
*/
void elog_port_output(const char *log, size_t size) {
/* output to terminal */
printf("%.*s", size, log);
//TODO output to flash
}
/**
* output lock
*/
void elog_port_output_lock(void) {
__disable_irq();
}
/**
* output unlock
*/
void elog_port_output_unlock(void) {
__enable_irq();
}
/**
* get current time interface
*
* @return current time
*/
const char *elog_port_get_time(void) {
return "10:08:12";
}
/**
* get current process name interface
*
* @return current process name
*/
const char *elog_port_get_p_info(void) {
return "pid:1008";
}
/**
* get current thread name interface
*
* @return current thread name
*/
const char *elog_port_get_t_info(void) {
return "tid:24";
}
开始使用,
int main(void)
{
/* configure systick */
systick_config();
/* initilize the LEDs, USART and key */
led_init();
usart0_init();
printf("GD32F350 EasyLogger test start\r\n");
elog_init();
/* set EasyLogger log format */
elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL);
elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_ALL & ~(ELOG_FMT_FUNC | ELOG_FMT_T_INFO | ELOG_FMT_P_INFO));
elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_ALL & ~(ELOG_FMT_FUNC | ELOG_FMT_T_INFO | ELOG_FMT_P_INFO));
/* start EasyLogger */
elog_start();
log_a("Hello EasyLogger!");
log_e("Hello EasyLogger!");
log_w("Hello EasyLogger!");
log_i("Hello EasyLogger!");
log_d("Hello EasyLogger!");
log_v("Hello EasyLogger!");
while (1){
GPIO_TG(GPIOF) = GPIO_PIN_6;
delay_1ms(500);
}
}
运行结果为:
本文来自博客园,作者:哈拎,转载请注明原文链接:https://www.cnblogs.com/halin/p/16439005.html