1.找到源码
gitee上找到[easylogger源码](EasyLogger: 一款超轻量级(ROM<1.6K, RAM<0.3k)、高性能的 C/C++ 日志库 (gitee.com))。将源码下载下来。
2.加入工程
将源码复制进自己工程。如下图所示:
目录格式.png
makefile中增加如下内容:
//C_SOURCES 下增加
Middlewares/easylogger/src/elog.c \
Middlewares/easylogger/src/elog_utils.c \
Middlewares/easylogger/port/elog_port.c \
//C_INCLUDES 下增加
-IMiddlewares/easylogger/inc \
3.接口移植
关注Middlewares\easylogger\port\elog_port.c。内容如下:
#include <FreeRTOS.h>
#include <elog.h>
#include "semphr.h"
#include "uart.h"
#include <stdio.h>
static uart_t *logcom;
static SemaphoreHandle_t lock;
/**
* EasyLogger port initialize
*
* @return result
*/
ElogErrCode elog_port_init(void)
{
ElogErrCode result = ELOG_NO_ERR;
uint32_t rx_buffer_size = 512;
lock = xSemaphoreCreateMutex();
logcom = bsp_uart_open("/UART3/", NULL);
bsp_uart_ioctl(logcom, ioctlUSE_UART_POLLED_TX, NULL);
bsp_uart_ioctl(logcom, ioctlUSE_UART_CIRCULAR_BUFFER_IDLE_RX, &rx_buffer_size);
return result;
}
/**
* EasyLogger port deinitialize
*
*/
void elog_port_deinit(void)
{
vSemaphoreDelete(lock);
}
/**
* output log port interface
*
* @param log output of log
* @param size log size
*/
void elog_port_output(const char *log, size_t size)
{
bsp_uart_write(logcom, (const uint8_t *)log, size, 3000);
}
/**
* output lock
*/
void elog_port_output_lock(void)
{
xSemaphoreTake(lock, pdMS_TO_TICKS(1000));
}
/**
* output unlock
*/
void elog_port_output_unlock(void)
{
xSemaphoreGive(lock);
}
/**
* get current time interface
*
* @return current time
*/
const char *elog_port_get_time(void)
{
static char cur_system_time[16] = "";
snprintf(cur_system_time, 16, "%lu", xTaskGetTickCount());
return cur_system_time;
}
/**
* get current process name interface
*
* @return current process name
*/
const char *elog_port_get_p_info(void)
{
return "";
}
/**
* get current thread name interface
*
* @return current thread name
*/
const char *elog_port_get_t_info(void)
{
return "";
}
4.基本设置
初始化中调用如下几个函数:
elog_init();
/* 设置自己格式 */
elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
elog_start();
elog_set_fmt()的相关参数在Middlewares\easylogger\inc\elog.h中,
#define ELOG_LVL_ASSERT 0
#define ELOG_LVL_ERROR 1
#define ELOG_LVL_WARN 2
#define ELOG_LVL_INFO 3
#define ELOG_LVL_DEBUG 4
#define ELOG_LVL_VERBOSE 5
/* all formats index */
typedef enum {
ELOG_FMT_LVL = 1 << 0, /**< level */
ELOG_FMT_TAG = 1 << 1, /**< tag */
ELOG_FMT_TIME = 1 << 2, /**< current time */
ELOG_FMT_P_INFO = 1 << 3, /**< process info */
ELOG_FMT_T_INFO = 1 << 4, /**< thread info */
ELOG_FMT_DIR = 1 << 5, /**< file directory and name */
ELOG_FMT_FUNC = 1 << 6, /**< function name */
ELOG_FMT_LINE = 1 << 7, /**< line number */
} ElogFmtIndex;
使用中遇到的问题
输出的日志没有左对齐:
打印格式异常.png
Middlewares\easylogger\inc\elog_cfg.h中修改
/* output newline sign */
// #define ELOG_NEWLINE_SIGN "\n"
#define ELOG_NEWLINE_SIGN "\r\n"











网友评论