Segger RTT的使用

一般arm系统中,如何通过电脑键盘和显示器同mcu进行交互最有效的有两种形式:arm7的semihost,cm时代的traceswo。现在jlink推出了颇具特色的rtt无需SWO引脚,且速度更快三者的比较如下图:

 

RTT( Real Time Terminal)是SEGGER公司在jlink V4.90之后,针对Cortex-M和RX系列推出的嵌入式应用与用户进行交互的实时终端。MCU通过J-link与电脑连接并将打印信息输出到电脑上,电脑同时可以通过键盘等向MCU发送数据。无需复杂的工程配置,没有MCU内核的限制,并且打印字符还非常的流畅。其实现原理就是J-link与MCU共享内存。

速度取决于the target buffer size。

使用方法参考:

SEGGER-RTT调试(代替串口printf输出)的使用方法

http://blog.csdn.net/yanyuzuixin/article/details/68953131

http://blog.csdn.net/Maple_Leaf_15/article/details/51020003

使用条件:

  1. 安装jlink驱动jlink V4.90以后的最新版本,可以看到考安装目录下有3个应用软件,都可以作为查看的方法。
  1. 官网下载或者安装目录下接下RTT包:安装目录:C:\Program Files (x86)\SEGGER\JLink_V612\Samples\RTT\SEGGER_RTT_V612.zip

官网:https://www.segger.com/downloads/jlink/JLink_Windows.exe

RTT介绍:

https://www.segger.com/products/debug-probes/j-link/technology/real-time-transfer/about-real-time-transfer/

  1. 将解压后得到四个文件

SEGGER_RTT.c、SEGGER_RTT.h、SEGGER_RTT_Conf.h”

SEGGER_RTT_printf.c:无需添加标准库<stdio.h>,当然也提供了重定向(RTT_Syscalls_KEIL.c/RTT_Syscalls_IAR.c/RTT_Syscalls_GCC.c)

  1. 用法:

2.1配置:新工程的使用:添加SEGGER_RTT.c和SEGGER_RTT_printf.c到工程文件夹下,并设定SEGGER_RTT.h、SEGGER_RTT_Conf.h的头文件路径;而若要取代SWO则是去掉Retarget.c这个重定向文件,只包含EGGER_RTT.c和RTT_Syscalls_KEIL.c/RTT_Syscalls_IAR.c。

2.2  在源代码中包含RTT头文件并初始化:

2.3在需要输出log的地方调用SEGGER_RTT_printf();函数输出打印。该函数用法和printf函数类似,只是多了一个参数用来指定RTT通道。其中通道0,就是我们在调试时使用的通道。在主函数中添加如下代码。

  • 最简单易用的两个函数是

    • 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,可以输出各种数据类型
    • 查看RTT输出的工具有三个:
      • RTTViewer:不支持中文。至少要进入一次Debugger才能正常显示输出。建议进入Debugger之后再打开,否则经常不能正常显示输出
      • RTTLogger:支持中文,并且可以保存为log文件。使用具体的正确使用方法不清楚。根据手册说明,,"字符串",输出格式)。但是实测,只能输出RTT通道0的信息,并且要求代码中要有使用到通道1的语句。否则收不到数据,只要连接jlink不要进入debug也有信息输出
      • RTTClient:必须配合RTTLogger或者keil的Debugger来使用,而RTTLogger也必须配合Debugger使用。Client、Logger和Debugger三个窗口都打开的时候,Client和Logger只有其中一个能正常显示,另外一个会严重丢失数据。
      • 无论哪个查看RTT的工具,都会丢失数据。可能与输出函数的使用频率过高有关(?)。加大SEGGER_RTT_Conf.h中的#define BUFFER_SIZE_UP的值可以有效降低丢失率。
      • 从开始菜单栏找到J-Link User Manual (UM08001)文档,里面有JLink各个工具的说明

2.3查看终端:有三种方法都可以,在jlink的驱动安装目录下有三个应用软件

RTT Viewer this channel(0) can be used for multiple "virtual" terminals output  and keyboard input, allowing to print to multiple windows (e.g. one for standard output , one for error output, one for debugging output) with just one target buffer. An additional up (to host) channel can for example be used to send profiling or event tracing data.

可以向单片机传送按键值和字符串,如下图再输入框中输入,再单片机中用以下来接收

len=SEGGER_RTT_Read(0, mybuf, 10);
if(len)
{
Vol=atof(mybuf);
value =(Vol/3.30 + EPS)*65536;

J-Link RTT Client:功能简单

J-Link RTT Logger(Channel 1):opens a dedicated connection to J-Link and can be used stand-alone, without running a debugger.

RTT输入检测

首先在程序中添加SEGGER_RTT_Read(0,rtt_buf,sizeof(rtt_buf));

其次在J-Link RTT Viewer控制台的Input里面选择Sending/Send on Enter,然后End of Line选择None

这样就可以通过下方输入框输入信息,按Enter发送

这样,程序里面接收数组rtt_buf就是输入框所输入的信息

扩展阅读:Jlink RTT弱爆了,Jlink Scope来啦

http://blog.csdn.net/Airbnb/article/details/41494335

jlink示波器来啦!!
普通jlink只能同时显示10个变量,采样率为50hz
jlink pro和jlink ultra可以同时显示100个变量,采样率无限制(受限于USB带宽)

使用方法:
下载4.90e安装,
目录下找到JScope.exe启动,
配置参数,如下图,选择芯片,接口类型
添加要观察的变量
启动示波器
OK

无需仿真环境,程序下载到芯片,连接jlink就可以了,也就是不需要IAR或MDK运行。
JScope不像RTT那样需要在工程中添加C文件和H文件,JLINK在后台自动读取变量并显示

RTT的更多相关文章

  1. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  2. Segger RTT : Real Time Terminal SRAM 调试解决方法

    http://segger.com/jlink-real-time-terminal.html Real Time Terminal SEGGER's Real Time Terminal (RTT) ...

  3. glsl水包含倒影的实现(rtt) [转]

    转自 http://blog.sina.com.cn/s/blog_78ea87380101eixi.html 此文实现一个简单地水面倒影效果,通过rtt相机 获取倒影纹理, 水的基本实现方法(参考前 ...

  4. 在windows下如何配置RTT开发环境?

    之前一直使用MDK查看和编译RTT的源码,这几天无聊想起RTT官方提供使用scons工具编译RTT,因此想试试这种方法,做下此笔记,以供入门者参考. 注 1 下载安装Python2.7 论坛中很多人说 ...

  5. 三十天学不会TCP,UDP/IP网络编程 -- RTT的计算

    欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)看到完整版. 如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,虽然说现在这种“看不见”的 ...

  6. 【安富莱专题教程第6期】SEGGER的J-Scope波形上位机软件,RTT模式波形上传速度可狂飙到500KB/S左右

    说明:1.在实际项目中,很多时候,我们需要将传感器或者ADC的数值以波形的形式显示.通常的解决办法是用串口上位机,USB接口上位机或者MDK的逻辑分析仪功能,使用这三种方式都比较繁琐.本期专题为大家讲 ...

  7. 【安富莱专题教程第5期】工程调试利器RTT实时数据传输组件,替代串口调试,速度飞快,可以在中断和多任务中随意调用

    说明:1.串口作为经典的调试方式已经存在好多年了,缺点是需要一个专门的硬件接口.现在有了SEGGER的RTT(已经发布有几年了),无需占用系统额外的硬件资源,而且速度超快,是替代串口调试的绝佳方式.2 ...

  8. RTT(往返时间)和RPC

    RTT(Round-Trip Time)往返时间在计算机网络中它是一个重要的性能指标.表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经 ...

  9. 什么是渲染目标(render target)&& 渲染到纹理(Render To Texture, RTT)详解

    渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...

  10. learning ddr RTT

    Rtt: Dynamic ODT.DDR3引入的新特性.在特定的应用环境下为了更好的在数据总线上改善信号完整性, 不需要特定的MRS命令即可以改变终结强度(或者称为终端匹配).在MR2中的A9和A10 ...

随机推荐

  1. C#入门---2、C#装备知识(C#创建桌面程序的时候创建的是什么应用程序)

    C#入门---2.C#装备知识(C#创建桌面程序的时候创建的是什么应用程序) 一.总结 一句话总结: WPF应用程序:来替代 WindowsFroms 来创建桌面应用程序 1.什么是控制台程序 Con ...

  2. Android Studio 使用Gradle多渠道打包

    第一步:配置AndroidManifest.xml 以友盟渠道为例,渠道信息一般都是写在 AndroidManifest.xml文件中,大约如下: <meta-data android:name ...

  3. OJ提交题目中的语言选项里G++与C++的区别

    一.OJ提交题目中的语言选项里G++与C++的区别 http://www.th7.cn/Program/cp/201405/199001.shtml 首先更正一个概念,C++是一门计算机编程语言,G+ ...

  4. UVA-12293(组合游戏)

    题意: 有两个相同的盒子,一个盒子里面有n个球,另一个盒子里面有1个球,每次清空球较少的那个盒子,然后从另外的一个盒子里拿到空盒子里使得操作后两个盒子至少有一个球,判断是先手还是后者胜; 思路: 跟每 ...

  5. python 模块和模块sys.argv

    In [5]: import os In [6]: os.__file__ Out[6]: '/usr/local/lib/python2.7/os.pyc' In [7]: import rando ...

  6. JUC包中的锁框架

    JUC包中的锁,包括:Lock接口,ReadWriteLock接口,LockSupport阻塞原语,Condition条件,AbstractOwnableSynchronizer/AbstractQu ...

  7. 19.break和continue

    break;语句: 1.可以在switch语句中,结束分支语句: 2.break:语句可以出现在单循环当中,默认情况下结束距离他最近的一个循环. 3.break 后面跟一个循环的名字可以结束你指定的这 ...

  8. 纯css 图片自适应居中

    html 结构 <div class="container"> <div class="content"></div> &l ...

  9. Visual Studio 2013 Update 1

    Visual Studio 2013 Update 1 VS2013.1.iso 共 245 MB http://download.microsoft.com/download/8/2/6/826E2 ...

  10. python 中main函数总结

    Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数. 每个文件(模块)都可以任意写一些没有缩进的代码 ...