# 如何通过JLink打印模组日志
#一、简介
Segger的RTT技术是用于嵌入式系统下通过JTAG/SWD做实时调试的方法,目前支持Cortex M系列的处理器。他用于实时的通过仿真器同PC做数据交互。主要用途是做debug的打印和CLI命令交互。
虽然我们现在的mxos系统都有一个debug串口可以用于log的输出和Cli的交互,但是RTT拥有以下优势:
- RTT的交互速度快,可以避免printf对系统性能的干扰。因为RTT对于MCU来说,仅仅是访问一段RAM区域,不会对系统的时序产生影响,而debug uart受波特率的影响,对系统是有干扰的;
- RTT可以最大支持3路输出,可以打印到3个不同的terminal,实现分级的debug;
- 可能某些系统把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"实现添加。
#参考文献
#变更记录
版本 | 变更内容 | 变更时间 |
V1.0 | 初版 | 2021.12.27 |
V1.1 | 添加mxos中关闭标准输入输出流 | 2022.2.10 |