目录

J-link 调试器日志打印工具-RTT

前言

在线仿真器(J-link)与 MCU 之间实现的是硬件级-即时性的信息交互,平时调试时可直接读取 MCU 内部任何数据,那就意味着可以划一段共享内存用来缓存打印信息,当有信息就读取出来,从而实现 MCU 向仿真器终端软件打印信息的功能。

简介

点击展开内容

● RTT(Real Time Terminal)是 SEGGER 公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link 驱动 4.90 之后的版本都支持 RTT。
● RTT 既可以从 MCU 上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响 MCU 的实时性。实现原理就是 J-link 与 MCU 共享内存。
● MCU 通过 J-link 与电脑连接并将打印信息输出到电脑上,电脑同时可以通过键盘等向 MCU 发送数据。

../img/20190119_01_01.jpg

移植

点击展开内容

1、RTT 源代码在 J-link 安装目录下:C:\Program Files (x86)\SEGGER\JLink_V630e\Samples\RTT\SEGGER_RTT_V630e.zip,
2、解压并将文件添加到你的工程中:SEGGER_RTT_printf.c、SEGGER_RTT.c、SEGGER_RTT_Conf.h、SEGGER_RTT.h。
3、先调用初始化函数:SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
4、之后可打印字符串: SEGGER_RTT_WriteString(0, "txt\r\n");
5、打印格式化字符串: SEGGER_RTT_printf(0,"%d_txt\r\n",2019);
6、打开打印调试窗口,在 SEGGER 安装目录下找到 JLink RTT Viewer.exe 这软件双击运行。

../img/20190119_02_01.jpg


后记
● 使用 V4.90 版 → 测试 → 不成功;
● 使用 V6.30 版 → 测试 → 成功。
● 听说 RTT 共有三个输出工具,网友解释如下:

  1. RTT Viewer:不支持中文。至少要进入一次 Debugger 才能正常显示输出。建议进入 Debugger 之后再打开,否则经常不能正常显示输出。
  2. RTT Logger:支持中文,并且可以保存为 log 文件。使用具体的正确使用方法不清楚。根据手册说明,log 只接收 RTT 通道 1 的输出,即SEGGER_RTT_printf(1,"字符串",输出格式)。但是实测,只能输出 RTT 通道 0 的信息,并且要求代码中要有使用到通道 1 的语句。否则收不到数据。
  3. RTT Client:必须配合 RTT Logger 或者 keil 的 Debugger 来使用,而 RTT Logger 也必须配合 Debugger 使用。Client、Logger 和 Debugger 三个窗口都打开的时候,Client 和 Logger 只有其中一个能正常显示,另外一个会严重丢失数据。