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. zkui部署

    1.拉取代码 #git clone https://github.com/DeemOpen/zkui.git 2.构建并安装程序 #cd zkui/ #yum install -y maven #mv ...

  2. java基础汇总

    1.关于Http和Hibernatet里面Session的区别HttpSession      HttpSession:是一个抽象接口,J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个H ...

  3. hdu-5738 Eureka(组合计数+极角排序)

    题目链接: Eureka Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pr ...

  4. the generation has been cancelled because errors have been found by the check model

    生成物理模型出现这个错误的话,那就打开“生成物理模型”(快捷键 ctrl+shift+p) 然后找到 Detail → Option 接着讲Check mode复选框去掉.

  5. js中实现子页面向父页面中赋值

    (方法一) 父页面: <input id="input1" type="text"/> <a href="javascript:wi ...

  6. 安装java之后,找不到tools.jar 和dt.jar

    可能很多初学者和我一样,在初次接触java开发的过程中,急于看到最终的结果,匆匆在网上下载了jdk之后,点击安装,结果等安装完,开始配置classpath时,发现jdk/lib下面根本就没有 tool ...

  7. tcp/ip详解(转)

    与UDP不同的是,TCP提供了一种面向连接的.可靠的字节流服务.TCP协议的可靠性主要有以下几点保障: (1)应用数据分割成TCP认为最适合发送的数据块.这部分是通过“MSS”(最大数据包长度)选项来 ...

  8. c++中的友元重载

    1 语法 返回值类型 operator 运算符名称(形参列表) { 重载实体 } --------->operator和运算符名称在一起构造成新的函数名 2 案例 #include <io ...

  9. jquery中innerheight outerHeight()与height()的区别

    1. .height() 获取匹配元素集合中的第一个元素的当前计算高度值 或 设置每一个匹配元素的高度值(带一个参数). 注意:1).css('height')和.height()之间的区别是后者返回 ...

  10. qq开放平台可以应用到网页游戏的api整理

    创建角色界面api整理 一.需求描述 1.  创建角色名称可以用qq空间昵称代替 2.  如果玩家是在新区玩的话,赠送老玩家支持礼包 3.  可以看到,好友xxx也在玩,而且到了多少等级,如果加为好友 ...