在做嵌入式调试的时候经常用串口打印log。有时会发现串口资源不足。这时可以采用RTT调试。RTT全称Real Time Transmit,可以通过jlink接口打印数据信息。
闲话少说上干货,下面就来一步一步实现RTT。
第一步,获取RTT源码
找到电脑jlink的安装路径。D:\Program Files (x86)\SEGGER\JLink_V646g\Samples\RTT (笔者安装D盘上其他人可不一定哦)会看到一个《SEGGER_RTT_V646g》的压缩包。解压这个压缩包。
RTT文件夹内即为源码。将红色框中的文件加入到工程中。
第二步,增加debug_log.c和debug_log.h文件
debug_log.c内容如下
#include "debug_log.h"
#include "SEGGER_RTT.h"
#include "stdio.h"
int printf_rtt(const char * sFormat, ...)
{
va_list ParamList;
va_start(ParamList, sFormat);
SEGGER_RTT_vprintf(0, sFormat, &ParamList);
va_end(ParamList);
return 0;
}
debug_log.h内容如下:
#ifndef __DEBUG_H
#define __DEBUG_H
int printf_rtt(const char * sFormat, ...);
#define log(...) printf_rtt(__VA_ARGS__)// 将printf_rtt注释掉即可关闭log打印
#endif
配置完成RTT可以使用了。按照printf()方式使用log()即可。
第三步,使用打印函数log()
本文以freertos为例。(当然裸机也可以用RTT哦)
建立2个任务
void task_1()
{
while(1)
{
log("task_1\r\n");
osDelay(100);
}
}
void task_2()
{
while(1)
{
log("task_2\r\n");
osDelay(100);
}
}
第四步,设置上位机
打开jlink RTT Viewer V6.46g。
File->connect 选择对应的mcu型号点击OK。
程序开始运行可以看到打印信息。
当看到这个打印信息证明RTT神器使用成功
转载来源:调试串口不够用,RTT来帮忙