Jlink工具下的RTT调试应用

单片机开发过程中,除了debug调试之外,很多人都是通过打印信息进行调试,一般都会分配出来一个调试的串口,如果你的单片机使用jlink烧录器,那么可以使用调试工具-RTT来代替串口进行信息的交互。

RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。

RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实时性。

实现原理就是J-link与MCU共享内存

本以应用为主。RTT的工作框图如图 1所示。MCU通过J-link与电脑连接并将打印信息输出到电脑上,电脑同时可以通过键盘等向MCU发送数据。

图1 RTT工作框图

如果你想使用它,操作也非常简单,首先从官网下载RTT代码,然后把如图 2所示的4个文件添加到你的工程中。并且在主函数文件的起始处添加SEGGER_RTT.h文件。如下所示。

#include "SEGGER_RTT.h"

图 2  需要添加到工程的文件

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

SEGGER_RTT_printf(0,"Times %d\r\n",++u32Counter);

u32Counter 这个变量每次打印完之后都会递增。我们把程序编译,然后进入调试模式,在开始菜单下打开J-link RTT 
Client,可以看到如图 3所示的信息。

图3

如果已经正常连接,就会打印出入红色框内的信息,标明RTT版本号和J-link固件版本号等,如果没有这些信息则表示连接异常。点击全速运行之后,打印出的信息如图 3所示。

图 3 RTT打印信息

是不是感觉很酷?只需要简单的添加几个文件,就可以直接调用SEGGER_RTT_printf函数打印输出了。没有复杂的工程配置,没有MCU内核的限制,并且打印字符还非常的流畅,好像回到了用VC6.0编写Win32控制台程序的时代一样。




注意:

  1. Segger官网关于RTT功能的说明以及库文件的下载可以从这里找到(https://www.segger.com/jlink-rtt.html);
  2. 最简单易用的两个函数是 
    • SEGGER_RTT_ConfigUpBuffer(0,NULL,NULL,0,SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL):非必要的初始化(不知有什么用?)。它是官方例程RTT_Implementation_141217-Examples-Main_RTT_PrintfTest.c的第一句
    • SEGGER_RTT_WriteString(0,"字符串"):直接输出字符串
    • SEGGER_RTT_printf(0,"字符串",输出格式):相当于printf,可以输出各种数据类型
  3. 查看RTT输出的工具有三个: 
    • RTTViewer:不支持中文。至少要进入一次Debugger才能正常显示输出。建议进入Debugger之后再打开,否则经常不能正常显示输出
    • RTTLogger:支持中文,并且可以保存为log文件。使用具体的正确使用方法不清楚。根据手册说明,log只接收RTT通道1的输出,即SEGGER_RTT_printf(1,"字符串",输出格式)。但是实测,只能输出RTT通道0的信息,并且要求代码中要有使用到通道1的语句。否则收不到数据。
    • RTTClient:必须配合RTTLogger或者keil的Debugger来使用,而RTTLogger也必须配合Debugger使用。Client、Logger和Debugger三个窗口都打开的时候,Client和Logger只有其中一个能正常显示,另外一个会严重丢失数据。
  4. 无论哪个查看RTT的工具,都会丢失数据。可能与输出函数的使用频率过高有关(?)。加大SEGGER_RTT_Conf.h中的#define BUFFER_SIZE_UP的值可以有效降低丢失率。
  5. 从开始菜单栏找到J-Link User Manual (UM08001)文档,里面有JLink各个工具的说明。

    RTTLogger使用



原文出处:http://maker.zlgmcu.com/portal.php?mod=view&aid=1880

  • 9
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答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技术实现实时浮点数据传输和分析的方法,可提高系统的性能和稳定性,并支持浮点算法的验证和调试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值