目录

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. 什么是CLR?

    CLR翻译为"公共语言运行库",全称是Common Language Runtime,它是一个可以由多种语言使用的"运行时",CLR的核心功能如内存管理,程序集 ...

  2. 【ASP.NET Core】MVC控制器的各种自定义:修改参数的名称

    在上一篇中,老周演示了通过实现约定接口的方式自定义控制器的名称. 至于说自定义操作方法的名称,就很简单了,因为有内置的特性类可以用.看看下面的例子. [Route("[controller] ...

  3. Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控件操作

    我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 "影响" 到996的工作时间,当然,也没有影响到我想继续更新文章的决心. 一.cookie常用操作入门 上一篇有写过关于coo ...

  4. python安装第三方库换源

    永久修改 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple 其他 这个都属于pip 命令行,config 后 ...

  5. Apache Dubbo 多语言体系再添新员:首个 Rust 语言版本正式发布

    Dubbo Rust 定位为 Dubbo 多语言体系的重要实现,提供高性能.易用.可扩展的 RPC 框架,同时通过接入 Dubbo Mesh 体系提供丰富的服务治理能力.本文主要为大家介绍 Dubbo ...

  6. MySQL 的 NULL 值是怎么存储的?

    大家好,我是小林. 之前有位读者在面字节的时候,被问到这么个问题: 如果你知道 MySQL 一行记录的存储结构,那么这个问题对你没什么难度. 如果你不知道也没关系,这次我跟大家聊聊 MySQL 一行记 ...

  7. 盘点JAVA中基于CAS实现的原子类, 你知道哪些?

    前言 JDK中提供了一系列的基于CAS实现的原子类,CAS 的全称是Compare-And-Swap,底层是lock cmpxchg指令,可以在单核和多核 CPU 下都能够保证比较交换的原子性.所以说 ...

  8. 什么是JS?JS的用途?

    一.JavaScript是什么?它有什么作用? JavaScript是一种运行在客户端的脚本语言,简称JS,属于解释性语言.它是一行翻译执行完以后再进行下一行,代码不进行预编译. JavaScript ...

  9. 深入理解 Python 的对象拷贝和内存布局

    深入理解 Python 的对象拷贝和内存布局 前言 在本篇文章当中主要给大家介绍 python 当中的拷贝问题,话不多说我们直接看代码,你知道下面一些程序片段的输出结果吗? a = [1, 2, 3, ...

  10. 「Goravel 上新」验证表单的三种新姿势,估计你只用过一种

    验证用户输入的数据是我们开发中最常见的需求,Goravel 提供三种验证姿势,个个简单好用! 第一种:简单直接式 根据表单内容直接校验: func (r *PostController) Store( ...