JLink的RTT调试

1.RTT简介

RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都有这个软件哦。
用RTT可以从目标MCU上输出信息的同时也可以非常高速的向应用程序发送信息,并且不影响MCU的实时性。其实现原理就是J-link与MCU共享内存,具体实现细节感兴趣的读者可以自己去查阅下资料,本文以应用为主。RTT的工作框图如下图所示。MCU通过J-link与电脑连接并将打印信息输出到电脑上,电脑同时可以通过键盘等向MCU发送数据。

2.RTT功能

如果你想使用它,操作也非常简单。找到自己J-Link的安装目录下的Samples/RTT文件夹,解压含有SEGGER_RTT的压缩包。我的是“SEGGER_RTT_V620e.zip”,将解压后的RTT文件夹下的四个文件 ** “SEGGER_RTT.c”,“SEGGER_RTT.h”,“SEGGER_RTT_Conf.h”和“SEGGER_RTT_printf.c”**添加到项目里。如果没有的话,去segger官网下载。

然后我们就可以直接在主函数中调用SEGGER_RTT_printf函数来打印调试信息了,该函数用法和printf函数类似,只是多了一个参数用来指定RTT通道。其中通道0,就是我们在调试时使用的通道。在主函数中添加如下代码。

SEGGER_RTT_Init();//初始化时调用
SEGGER_RTT_printf(0, "Segger Print Init\r\n");//添加打印调试信息

3.RTT美化

以上基本实现了通过Jlink进行打印调试的功能,现丰富RTT的打印功能,在打印信息中增加颜色、打印所处函数、打印所在行等信息,依据基本信息\警告\错误等场景,打印不同格式的信息。

/*******************************************************************************
【文    件】   RTT_Printf.h
【概    述】   RTT打印接口
*******************************************************************************/
#ifndef __RTT_PRINTF_H__
#define __RTT_PRINTF_H__

#ifdef __cplusplus
extern "C" {
#endif

/***************************Include*****************************************/
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#include <time.h>
#include "SEGGER_RTT.h"


#define LOG_PROTO(type,color,format,...)                               \
{                                                                      \
    SEGGER_RTT_printf(0, "\r"color"%s[%s(%d)]"format"\r\n", type,    \
                        __func__, __LINE__,                            \
                        ##__VA_ARGS__);                                \
}

#define LOG_SIMPLE(type,color,format,...)                               \
{                                                                      \
    SEGGER_RTT_printf(0, "\r"color"%s"format"\r\n", type,             \
                        ##__VA_ARGS__);                                \
}
    
/* 无颜色简易日志输出 */
#define LOG(format,...) LOG_SIMPLE("", "", format,##__VA_ARGS__)
    
/* 有颜色格式日志输出 */
#define LOGI(format,...) LOG_SIMPLE("I: ", RTT_CTRL_TEXT_BRIGHT_GREEN , format, ##__VA_ARGS__)//I: Segger Print Init
#define LOGW(format,...) LOG_PROTO("W: ", RTT_CTRL_TEXT_BRIGHT_YELLOW, format, ##__VA_ARGS__)//W: [voiceHogpRemote_init(548)]Segger Print Init
#define LOGE(format,...) LOG_PROTO("E: ", RTT_CTRL_TEXT_BRIGHT_RED   , format, ##__VA_ARGS__)
#define LOGD(format,...) LOG_PROTO("D: ", RTT_CTRL_TEXT_BRIGHT_WHITE , format, ##__VA_ARGS__)

// TI log替换
#define LOG_TI(handle, line, column, format,...) LOGI(format, ##__VA_ARGS__)


#ifdef __cplusplus
}
#endif

#endif
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值