# 如何通过JLink打印模组日志

#一、简介

Segger的RTT技术是用于嵌入式系统下通过JTAG/SWD做实时调试的方法,目前支持Cortex M系列的处理器。他用于实时的通过仿真器同PC做数据交互。主要用途是做debug的打印和CLI命令交互。

虽然我们现在的mxos系统都有一个debug串口可以用于log的输出和Cli的交互,但是RTT拥有以下优势

  1. RTT的交互速度快,可以避免printf对系统性能的干扰。因为RTT对于MCU来说,仅仅是访问一段RAM区域,不会对系统的时序产生影响,而debug uart受波特率的影响,对系统是有干扰的;
  2. RTT可以最大支持3路输出,可以打印到3个不同的terminal,实现分级的debug;
  3. 可能某些系统把debug uart作为其他用途了,无法使用debug uart,我们还可以通过JTAG/SWD的接口实现调试。

#MXOS中关闭标准输入输出

在mxos_config.h中增加如下定义:

#define MXOS_DISABLE_STDIO

可以关闭大部分的日志,但是协议栈中的打印无法全部去除,所以如果要用日志串口发送数据,切记加完整性校验。

#二、MXOS下如何使用RTT调试

  • 在mxos下导入RTT组件:git clone git@code.aliyun.com:mxos/SEGGER_RTT.git
  • 系统包含SEGGER_RTT组件:$(NAME)COMPONENTS += SEGGERRTT
  • 使用SEGGER_RTT_printf实现log输出。该函数原型:int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...),第一个参数是输出到那一路,通常使用0。
  • 如果需要用RTT做CLI交互,需要修改mxos_config.h文件,增加:#define MXOS_CLI_ENABLE 0 。关闭系统的CLI,调用rtt_cli_init()打开RTT的CLI功能;调用mxos_system_cli_cmds_add( )添加mxos的系统CLI命令。

#三、PC上如何实现RTT调试

#软件及驱动安装

需要安装jlink的工具包:https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack (opens new window)

运行PC工具:Jlink RTT Viewer

#软件配置

  • 选择Target Device:CORTEX-M4、CORTEX-M3等。通过查看模块数据手册或者和原厂确认
  • 选择Target Interface:JTARG或者SWD。
  • 输入RTT Control Block的Address,这个Address需要通过查询mxos编译的map表中获取。 在build目录中,后缀为.map

示例:

如上,.bss._SEGGER_RTT在map表中的地址是0x1000ea60,则在Jlink RTT Viwer中输入这个地址。

点击OK。

通过以上几步就完成了RTT的连接,PC上就会显示出mxos的打印信息了。

#小机关

在使用CLI做交互的时候,请选择菜单栏的Input->Sending中,选择“Send On Enter",这样可以让RTT等我输入了完整的CLI命令才发送给模组。如果需要分别独立的多路输出的话,可以选择菜单栏Terminals->"Add next terminal"实现添加。

#参考文献

https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/ (opens new window)

#变更记录

版本

变更内容

变更时间

V1.0

初版

2021.12.27

V1.1

添加mxos中关闭标准输入输出流

2022.2.10

更新时间: 2023/7/12 14:10:31