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
    评论
### 回答1: jlink rtt(Real-Time Transfer)是针对实时系统开发者的一种调试技术,它使用了一种特殊的数据通信方式,通过调试接口和目标设备之间实现实时传输和交互。 在jlink rtt中,对于浮点数的处理与其他数据类型是相同的。可以使用相应的函数来发送和接收浮点数数据。通常,开发者可以使用jlink rtt提供的API来进行浮点数的发送和接收操作。 首先,开发者需要在目标设备的代码中集成jlink rtt库,并初始化RTT通信。然后,可以使用相关的API函数来发送浮点数数据到主机,或者从主机接收浮点数数据。 例如,可以使用函数`SEGGER_RTT_printf()`来发送浮点数数据到主机,函数的用法与打印其他类型数据类似,只需指定格式为"%f"即可。另外,可以使用函数`SEGGER_RTT_Read()`从主机接收浮点数数据,读取到的数据可以直接赋值给浮点数变量。 需要注意的是,由于嵌入式系统的特殊性,浮点数的运算和表示可能会受到硬件和编译器的限制。在使用jlink rtt进行浮点数调试时,开发者需要注意目标设备上浮点数运算的精度、范围和所使用的浮点数格式。 总的来说,jlink rtt可以很好地支持对浮点数数据的发送和接收,方便开发者进行实时调试和数据交互,提高开发效率。 ### 回答2: J-Link Real-Time Transfer(RTT)是Segger公司开发的一种调试技术,可以在嵌入式系统中实现实时的数据传输和交互。浮点(Floating-Point)是一种用于表示和处理实数的数学运算方法。结合起来,J-Link RTT浮点指的是在使用J-Link RTT技术进行嵌入式系统调试时,涉及到实数类型的数据传输和处理。 在使用J-Link RTT时,可以通过RTT通道将浮点数发送到主机端的调试工具,从而达到实时监视和分析嵌入式系统中涉及到的浮点数数据。这对于调试和性能优化很有帮助,特别是当系统涉及到复杂的浮点计算时。通过J-Link RTT浮点技术,开发人员可以随时监控实时的浮点数据并进行相关的分析,从而提高系统的稳定性和性能。 J-Link RTT浮点技术的应用还可以扩展到调试和验证嵌入式系统中的浮点算法的正确性。通过实时传输浮点数据,可以比较和验证系统的计算结果是否正确,从而提高开发效率和减少调试时间。同时,J-Link RTT还支持通过调试工具与嵌入式系统进行交互,可以发送指令和参数到系统中,以控制和调整浮点计算的过程。 综上所述,J-Link RTT浮点是一种在嵌入式系统调试中使用J-Link RTT技术实现实时浮点数据传输和分析的方法,可提高系统的性能和稳定性,并支持浮点算法的验证和调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值