1 .需要在sdk_config.h中配置两个宏:
NRF_LOG_ENABLED 1
NRF_LOG_BACKEND_RTT_ENABLED 1
2 需要初始化NRF LOG
static void log_init(void)
{
ret_code_t err_code = NRF_LOG_INIT(NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_DEFAULT_BACKENDS_INIT();
}
注意:重点需要添加NRF_LOG_DEFAULT_BACKENDS_INIT();语句,官方提供的SDK里没有调用该语句,导致RTT输出不了日志
3 连接RTT VIEWER
4 输出打印语句,配置是否实时打印。
(1)如果不使能Deferred,调用NRF_LOG_INFO等API的时候,跟着NRF_LOG_FLUSH();即把日志打印出去;
(2)如果使能了Deferred,那么调用NRF_LOG_INFO等API的时候,先把打印数据放在RAM中,待到main函数中的NRF_LOG_PROCESS完成时打印信息。
5.在main函数调用该语句打印输出日志UNUSED_RETURN_VALUE(NRF_LOG_PROCESS());//打印调试信息
其他日志问题记录
注意:
①不能同时使用cli和enable UART log输出,否则会导致初始化失败,如果需要使用cli,则只能使用RTT输出日志,使能UART输出日志会导致初始化失败。
②NRF_LOG_DEFAULT_LEVEL - 默认严重性级别。可用选项包括:ERROR(最高)、WARNING、INFO 和 DEBUG(最低)。如果设置为3,则只会打印INFO语句信息,不会打印DEBUG打印信息,要打印DEBUG信息,需要将NRF_LOG_DEFAULT_LEVEL值改为4
③如果打印“Fatal error”信息,需要在keil里面定义一个全局宏“DEBUG”,才能打印出具体出错的文件名和行号。参考链接:http://t.csdnimg.cn/LLuQL
④主函数调用NRF_LOG_PROCESS()和NRF_LOG_FLUSH()的效果是不同的,使用前者日志未及时打印出来便会被覆盖掉,而使用后者能确保日志都能被完整打印出来
⑤使用RTT打印浮点数示例
NRF_LOG_INFO (“浮点值:” NRF_LOG_FLOAT_MARKER,NRF_LOG_FLOAT (val))