目录

JLink RTT

JLink RTT(Real Time Transfer) 是用于嵌入式系统监控和交互的工具, 类似于SWO, 可以双向通信, 特点是性能很高, 基本上不影响嵌入式应用的实时行为, 可以对比一下使用printf输出日志时的各种限制. 而且因为和 JLink 接口集成, 不需要再浪费一个串口输出 printf了.

完整的介绍可以参考SEGGER官网的介绍页 https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

JLink RTT相关的软硬件

硬件部分

RTT可以支持最低端的 JLink OB, 因此硬件上只需要有一个 JLink OB.

软件部分

软件部分在 JLink 的安装包中都包含了, 主要是两部分

  • 用于上位机的 RTT Viewer, 在安装路径下可以找到, 打开是类似于串口客户端的界面
  • 用于MCU的RTT库文件, 在安装路径的 Samples/RTT/ 目录下可以找到一个 SEGGER_RTT_Vxxx.tgz文件, 这个文件里包含了RTT需要的库.

解开后目录结构为

├── Config
│   └── SEGGER_RTT_Conf.h
├── Examples
│   ├── Main_RTT_InputEchoApp.c
│   ├── Main_RTT_MenuApp.c
│   ├── Main_RTT_PrintfTest.c
│   └── Main_RTT_SpeedTestApp.c
├── LICENSE.md
├── README.md
├── RTT
│   ├── SEGGER_RTT_ASM_ARMv7M.S
│   ├── SEGGER_RTT.c
│   ├── SEGGER_RTT.h
│   └── SEGGER_RTT_printf.c
└── Syscalls
├── SEGGER_RTT_Syscalls_GCC.c
├── SEGGER_RTT_Syscalls_IAR.c
├── SEGGER_RTT_Syscalls_KEIL.c
└── SEGGER_RTT_Syscalls_SES.c

在PY32F002A/003/030上使用JLink RTT

需要添加到项目的文件有

SEGGER_RTT.c
SEGGER_RTT.h
SEGGER_RTT_printf.c
SEGGER_RTT_Conf.h

其中 SEGGER_RTT_Conf.h 是RTT的配置文件

配置 SEGGER_RTT_Conf.h

其它的配置可以使用默认, 只需要调整一下 BUFFER_SIZE_UP, 这是在MCU上需要占用的字节数, 默认为 1024, 对于普通调试可以设成256.

#ifndef   BUFFER_SIZE_UP
#define BUFFER_SIZE_UP (256) // Size of the buffer for terminal output of target, up to host (Default: 1k)
#endif

再说一下 SEGGER_RTT_LOCK()和 SEGGER_RTT_UNLOCK(), 这两个方法用于禁用/启用MCU中断, 避免在RTT输出时被打断, 在M0/M0+上这两个方法默认为空, 因此是会产生输出混杂的情况的. 这块可以不设置, 因为RTT打印速度很快, 普通应用混杂的概率不大.

在项目中集成RTT输出

在需要使用RTT输出的程序文件上添加头文件

#include "SEGGER_RTT.h"

然后就可以调用RTT的方法输出了, 使用方法和printf基本上是一样的

# 输出字符串
SEGGER_RTT_WriteString(0, "exti_12 triggered\r\n");
# 输出带参数的字符串
SEGGER_RTT_printf(0, "SystemCoreClock: %ld\r\n", SystemCoreClock);

更完整的格式例子, 可以参考JLink ATT中的 Main_RTT_PrintfTest.c 文件

使用 RTT Viewer 查看输出

打开 RTT Viewer, 会弹出配置窗口, 以下根据 JLink OB进行配置

  • Connection to J-Link: 选择 USB
  • Specify Target Device: 选择 PY32F030X8, (如果是32KF/4KR的选择 PY32F030X6)
  • Target Interface & Speed: SWD, 4000KHz
  • RTT Control Block: Auto Detection

其它默认, 点击OK后就会连接到目标开始接收输出.

和使用串口有几点区别

  1. 使用 RTT 输出和 JLink 烧录是冲突的, 在烧录前需要断开 RTT
  2. RTT 带缓存, 因此即使错过一部分日志, 在连接上 RTT 后, 会将前面缓存的日志也显示出来
  3. RTT 的输出不带时间戳, 如果用惯了CuteCOM, 对这点可能会不习惯.

使用JLink RTT的示例代码

用于演示的代码已经放到仓库

https://github.com/IOsetting/py32f0-template/tree/main/Examples/LL/SEGGER_RTT

普冉PY32系列(五) 使用JLink RTT代替串口输出日志的更多相关文章

  1. 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 PY32F0系列上市其实相 ...

  2. 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 以下介绍PY32F0系列在 ...

  3. 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  4. JLink RTT Client代替printf(IAR测试OK)

    1.打开J-Link安装目录,确保SEGGER目录中有J-Link RTT Client,没有的话必须安装4.9以上版本: 2.打开SEGGER目录下软件SEGGER目录,硬件版本Hardware是8 ...

  5. CSS 魔法系列:纯 CSS 绘制各种图形《系列五》

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  6. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

  7. WCF编程系列(五)元数据

    WCF编程系列(五)元数据   示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...

  8. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

  9. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

  10. VSTO之旅系列(五):创建Outlook解决方案

    原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...

随机推荐

  1. VO层

    springboot中vo的作用: VO:View Object,视图层,其作用是将指定页面的展示数据封装起来,通常用于业务层之间的数据传递. 一般将vo层放置在model层下 类似于将前端页面传输的 ...

  2. python中的super()是什么?

    技术场景:python中的super,名为超类,可以简单的理解为执行父类的__init__函数.由于在python中不论是一对一的继承,还是一子类继承多个父类,都会涉及到执行的先后顺序的问题.那么本文 ...

  3. 嵌入式-C语言基础:数组指针

    定义一个数组指针,指向二维数组: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];//定义二维指针数组 p=a;//指向二维数组 ...

  4. 2022春每日一题:Day 19

    题目:吃奶酪 状压dp实现,dp[i][j]表示走过状态i,停到了j的位置的最小价值.枚举状态,起点终点,转移dp[i][j]=min{dp[i-(1<<s)][k]+dis(s,k)} ...

  5. 如何在kali Linux上安装VMware Tools

    作用: 1.让虚拟机和本地上的文件可以互传,直接拖动就可以实现转接 2.可在虚拟机上执行本地脚本 3.本地时钟与虚拟机同步 4........... 方法: 1.运行虚拟机 2.在上方菜单栏中点击安装 ...

  6. 动态规划篇——线性DP

    动态规划篇--线性DP 本次我们介绍动态规划篇的线性DP,我们会从下面几个角度来介绍: 数字三角形 最长上升子序列I 最长上升子序列II 最长公共子序列 最短编辑距离 数字三角形 我们首先介绍一下题目 ...

  7. python(牛客)试题解析3 - 困难

    导航 一.找到已经最大承重的背包内如何放入最大价值的物品的最优解 二.查找一个字符串中包含另外一个字符串(可打乱顺序)的次数三.计算正整数数组从头走到最后一个成员所需的最小步骤四.计算字符串非严格递增 ...

  8. windows环境变量修改器

    软件及源码 前言 我一直再用win7的系统,当更改path环境变量的时候很难受, 就只能看到一段,然后前面有啥后面有啥都看不到,而且来回调整优先级的时候需要剪切粘贴,主要就是来回调节优先级特别麻烦.所 ...

  9. MyEclipse连接MySQL

    在官网http://www.mysql.com/downloads/下载数据库连接驱动 本文中使用驱动版本为mysql-connector-java-5.1.40 一.创建一个java测试项目MySQ ...

  10. PostgreSQL函数:查询包含时间分区字段的表,并更新dt分区为最新分区

    一.需求 1.背景 提出新需求后,需要在www环境下进行验收.故需要将www环境脚本每天正常调度 但由于客户库无法连接,ods数据无法每日取,且连不上客户库任务直接报错,不会跑ods之后的任务 故需要 ...