1.打开lib库总开关
// app_config.h
#ifndef APP_CONFIG_H
#define APP_CONFIG_H
/*
* 系统打印总开关
*/
#ifdef CONFIG_RELEASE_ENABLE
#define LIB_DEBUG 1
#else
#define LIB_DEBUG 1
#endif
#define CONFIG_DEBUG_LIB(x) (x & LIB_DEBUG)
#define CONFIG_DEBUG_ENABLE
需要修改点:
- 宏LIB_DEBUG配置为1.
- 宏CONFIG_DEBUG_ENABLE需要被定义.
2.某些模块的的调试信息可能还有自己的单独开关
// app_config.c
const char log_tag_const_v_SETUP AT(.LOG_TAG_CONST) = FALSE; // verbose, 模块中比较冗余的信息。
const char log_tag_const_i_SETUP AT(.LOG_TAG_CONST) = FALSE; // info, 模块中一些基本的状态信息。
const char log_tag_const_w_SETUP AT(.LOG_TAG_CONST) = FALSE; // debug, 模块中用于定位问题的基本信息。
const char log_tag_const_d_SETUP AT(.LOG_TAG_CONST) = TRUE; // warning, 模块中用于定位问题的警告信息。
const char log_tag_const_e_SETUP AT(.LOG_TAG_CONST) = TRUE; // error, 模块中用于定位问题的错误信息。
3.使能硬件驱动开关
// xxx_cfg.h
//*********************************************************************************//
// UART配置 //
//*********************************************************************************//
#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能
#define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置(用于打印可以选择NO_CONFIG_PORT)
#define TCFG_UART0_TX_PORT IO_PORTA_05 //串口发送脚配置
#define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置
4.添加自己的调试信息
printf
printf 是计算机行业内通用的终端打印信息的标准接口, 在开发环境中添加如下头文件后即可使用
#include "generic/printf.h"
相应的,如果有需要打印一块内存的十六进制数据,可使用put_buf接口,使用示例如下;
#include "generic/printf.h"
void printf_foo(void)
{
int tmp[50];
printf("Test Demo: %s:%d\n", __func__, __LINE__);
memset(tmp, 0x5A, sizeof(tmp));
put_buf(tmp, sizeof(tmp));
return;
}
log_xxx族接口
log_xxx族接口与printf的区别是该接口可以分模块控制,以及输出信息可以带模块名前缀,可以快速定位到对应模块输出的信息。举例文件举例文件 sdk/apps/hid/app_main.c`, 使用步骤如下:
在模块对应C文件开头增加如下修改
#define LOG_TAG_CONST APP
#define LOG_TAG "[APP]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
/* #define LOG_DUMP_ENABLE */
#define LOG_CLI_ENABLE
#include "debug.h"
修改注意点:
- 定义LOG_TAG_CONST宏的命令与模块Debug名相同。
debug.h
文件被include的位置必须位于这些宏定义之后。
**2.**增加模块打印开关控制变量, 文件夹路径 apps/xxx/config/
用户应根据自己模块的属性放到合适的文件, 举例将app模块的控制开关放在 apps/hid/config/log_config.c`文件, 增加变量声明如下:
const char log_tag_const_v_APP AT(.LOG_TAG_CONST) = 0;
const char log_tag_const_i_APP AT(.LOG_TAG_CONST) = 1;
const char log_tag_const_d_APP AT(.LOG_TAG_CONST) = 1;
const char log_tag_const_w_APP AT(.LOG_TAG_CONST) = 1;
const char log_tag_const_e_APP AT(.LOG_TAG_CONST) = 1;
**3.**在对应模块添加调试信息,可用接口示例如下:
void log_foo(void)
{
int tmp[10];
log_info("I am info Message.\n");
log_debug("I am debug Message.\n");
log_error("I am error Message.\n");
memset(tmp, 0x5A, sizeof(tmp));
log_info_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
log_error_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
return;
}
上述示例输出信息如下:
void log_foo(void)
2 {
3 int tmp[10];
4
5 log_info("I am info Message.\n");
6 log_debug("I am debug Message.\n");
7 log_error("I am error Message.\n");
8
9 memset(tmp, 0x5A, sizeof(tmp));
10 log_info_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
11 log_error_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
12
13 return;
14 }
**4.**系统时间戳
在输出的log中存在系统时间戳,该时间戳代表输出该log时距离系统的上电时间,如果用户不需要输出该时间戳,可以通过修改文件 sdk/apps/xxx/config/lib_system_config.c
///打印是否时间打印信息
const int config_printf_time = 1;