一、背景

Log 信息输出可以方便调试者观察程序运行状态,和常用的串口 printf 的功能相似。但是在 nrf5x 芯片串口只有一个的状态下,如果你已经使用了串口,者时候 Log 显示提供一种不占用串口的方式,也就是仿真器 JLink 的 RTT Viewer 输出方式。

二、初始化打印功能

在主函数 main 中,第一步就是初始化打印日志功能 log_init(),该函数实际上既可以触发串口打印,也可以触发 RTT 打印。

/**@brief Application main function.*/
int main(void)
{bool erase_bonds;// Initialize.log_init();timers_init();buttons_leds_init(&erase_bonds);power_management_init();ble_stack_init();gap_params_init();gatt_init();services_init();advertising_init();conn_params_init();// Start execution.NRF_LOG_INFO("Blink example started.");advertising_start();// Enter main loop.for (;;){idle_state_handle();}
}

三、SDK配置

点击 sdk_config.h 文件

选择 Configuration Wizard

3.1 配置串口打印

nRF_Log 中勾选 UART 选项

切换回 Text Editor 界面,可以发现已经把 NRF_LOG_BACKEND_UART_ENABLE 设置为 1,也就是使能了串口。

nrf_log_default_backends.c 文件中,当我们使能了 NRF_LOG_BACKEND_UART_ENABLE 后,对应会修改文件中对串口初始化

nrf_log_backend_uart.c 文件中

这里初始化串口的串口参数,是按照 config.h 文件里的内容进行的,同时管脚只配置了一个打印输出引脚。

注意:如果你在配置文件中已经把 NRF_LOG_BACKEND_UART_ENABLE 设置为 1,这时候就不再次初始化配置串口。

3.2 配置RTT打印

nRF_Log 中勾选 RTT 选项

切换回 Text Editor 界面,可以发现已经把 NRF_LOG_BACKEND_RTT_ENABLE 设置为 1,也就是使能了 RTT。

nrf_log_default_backends.c 文件中,当我们使能了 NRF_LOG_BACKEND_RTT_ENABLE 后,对应会修改文件中对 RTT 初始化

四、开始打印日志

4.1 串口打印

打开串口调试助手,波特率设置为 115200

4.2 RTT打印

找到你的 SEGGER 的安装位置,找到驱动版本下的 JLinkRTTViewer.exe

打开后弹出选择界面。这个功能我们必须接上 JLink,设置参数如下,使用 USB 端口输出,目标设备选择 nRF52832_xxAA

五、API调用

5.1 打印普通信息

函数名:
NRF_LOG_INFO
用法:

NRF_LOG_INFO("Template example started.");

5.2 打印浮点数

函数名:
NRF_LOG_FLOAT
用法:

/*** @brief Macro to be used in a formatted string to a pass float number to the log.** Use this macro in a formatted string instead of the %f specifier together with* @ref NRF_LOG_FLOAT macro.* Example: NRF_LOG_INFO("My float number" NRF_LOG_FLOAT_MARKER "\r\n", NRF_LOG_FLOAT(f)))*/
#define NRF_LOG_FLOAT_MARKER "%s%d.%02d"/*** @brief Macro for dissecting a float number into two numbers (integer and residuum).*/
#define NRF_LOG_FLOAT(val) (uint32_t)(((val) < 0 && (val) > -1.0) ? "-" : ""),   \(int32_t)(val),                                       \(int32_t)((((val) > 0) ? (val) - (int32_t)(val)       \: (int32_t)(val) - (val))*100)

• 由 Leung 写于 2020 年 2 月 25 日

• 参考:青风电子社区

NRF52832学习笔记(13)——RTT打印调试日志相关推荐

  1. WSL构建nRF5 SDK + ARM GCC开发环境 – RTT打印调试日志

    陈拓 2022/07/28-2022/11/04 1. 概述 在<WSL构建nRF5 SDK + ARM GCC开发环境> https://zhuanlan.zhihu.com/p/544 ...

  2. NRF52832学习笔记(40)——RFID RC522使用

    一.简介 MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.是 NXP 公司针对"三表"应用推出的一款低电压.低成本.体积小的非接触式读写 ...

  3. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  4. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

  5. NRF52832学习笔记(18)——RFID SI522使用

    一.简介 ACD(低功耗寻卡)只是一种模式,和 PCD(普通寻卡)是一样的,在使用到 ACD 模式时,其实就是普通的读写模式和低功耗模式的切换,可以理解为"ACD 函数"中嵌套了一 ...

  6. Intel VT学习笔记(五)—— 调试技巧

    Intel VT学习笔记(五)-- 调试技巧 要点回顾 INT 3失效 调试技巧 参考资料 要点回顾 在上一篇中,我们主要学习了如何填写Guest state fields的各项字段,以及如何对错误码 ...

  7. 软件调试学习笔记(三)—— 调试事件的处理

    软件调试学习笔记(三)-- 调试事件的处理 要点回顾 调试事件的处理 实验一:实现简单调试器(创建进程) 实验二:分析异常来源 实验三:实现简单调试器(附加进程) 实验四:分析NtDebugActiv ...

  8. 软件调试学习笔记(二)—— 调试事件的采集

    软件调试学习笔记(二)-- 调试事件的采集 要点回顾 调试事件的种类 调试事件采集函数 例:分析PspUserThreadStartup 例:分析PspExitThread 总结 要点回顾 调试器与被 ...

  9. 软件调试学习笔记(一)—— 调试对象

    软件调试学习笔记(一)-- 调试对象 准备工作 调试器与被调试程序 DebugActiveProcess 连接调试器 分析kernel32!DebugActiveProcess 分析ntdll!Dbg ...

最新文章

  1. 前沿|揭开黑箱:希伯来大学计算机科学教授提出「信息瓶颈」
  2. Thymeleaf的Spring数据
  3. layui添加复选框_对layui初始化列表的CheckBox属性详解,初始化属性
  4. spss 卡方检验_SPSS篇—卡方检验
  5. 位居中国机器学习公有云市场份额第一,华为云 ModelArts 的进阶之路
  6. Android系统的开机画面显示过程分析(2)
  7. .net 面试题 (1)
  8. java静态类是只有一个吗,一个只有“私有最终静态”变量的java类。这是一个好主意吗?...
  9. CTD数据库(Comparative Toxicogenomics Database)介绍与使用
  10. Firefox扩展开发初级教程——开发一个简单的扩展
  11. 锋利的jQuery(汇总)
  12. 金山IPO造富效应:中国最贵程序员群生态
  13. 实验二.常用网络命令
  14. airflow实现Java定时任务,AirFlow定时调度执行Talend ETL任务
  15. Cookie和Session的使用及其案例分析
  16. Java项目如何优雅的对接口入参进行校验-看法外狂徒张三浏览18网站失败
  17. 运行interproscan/iprscan会遇到的问题
  18. 软件工程师——计算机组成原理
  19. InstanceNorm1d
  20. C语言之运算符练习题

热门文章

  1. C++ 二维vector初始化、resize()
  2. Android 框架类图
  3. Ubuntu 18.04 设置分辨率
  4. 全球与中国组合式蒸锅市场深度研究分析报告
  5. 微软账户登录不了问题
  6. python3标准输出函数print的阉割版写法
  7. Eclipse开发PHP环境配置
  8. xposed一些原理总结
  9. Redis入门到入土(day01)
  10. UI设计思路参考网站