普冉PY32系列(五) 使用JLink RTT代替串口输出日志
目录
- 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
- 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单
- 普冉PY32系列(四) PY32F002A/003/030的时钟设置
- 普冉PY32系列(五) 使用JLink RTT代替串口输出日志
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后就会连接到目标开始接收输出.
和使用串口有几点区别
- 使用 RTT 输出和 JLink 烧录是冲突的, 在烧录前需要断开 RTT
- RTT 带缓存, 因此即使错过一部分日志, 在连接上 RTT 后, 会将前面缓存的日志也显示出来
- RTT 的输出不带时间戳, 如果用惯了CuteCOM, 对这点可能会不习惯.
使用JLink RTT的示例代码
用于演示的代码已经放到仓库
https://github.com/IOsetting/py32f0-template/tree/main/Examples/LL/SEGGER_RTT
普冉PY32系列(五) 使用JLink RTT代替串口输出日志的更多相关文章
- 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 PY32F0系列上市其实相 ...
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 以下介绍PY32F0系列在 ...
- 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- JLink RTT Client代替printf(IAR测试OK)
1.打开J-Link安装目录,确保SEGGER目录中有J-Link RTT Client,没有的话必须安装4.9以上版本: 2.打开SEGGER目录下软件SEGGER目录,硬件版本Hardware是8 ...
- CSS 魔法系列:纯 CSS 绘制各种图形《系列五》
我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...
- Netty4.x中文教程系列(五)编解码器Codec
Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...
- WCF编程系列(五)元数据
WCF编程系列(五)元数据 示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...
- JVM系列五:JVM监测&工具
JVM系列五:JVM监测&工具[整理中] http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...
- SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型
原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...
- VSTO之旅系列(五):创建Outlook解决方案
原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...
随机推荐
- php 导出图片为pdf
require_once ROOTPATH . 'tcpdf/vendor/autoload.php';$html='';if($html){ mpdf($html); }else{ echo &qu ...
- github访问慢怎么办
前言 访问github网速老不好?老掉线?下载贼慢?或许这篇笔记可以帮助你! Github访问慢的根本原因其实是CDN内容分发受到DNS污染,无法连接使用igithub的加速分发服务器,所以国内访问时 ...
- 自动注册实体类到EntityFramework Core上下文,并适配ABP及ABP VNext
继上篇文章(EF Core懒人小技巧之拒绝DbSet)之后,最近笔者把这个小功能单独封装成一个扩展方法并开源,欢迎交流和Star~ GitHub: EntityFrameworkCore.Extens ...
- windows环境变量修改器
软件及源码 前言 我一直再用win7的系统,当更改path环境变量的时候很难受, 就只能看到一段,然后前面有啥后面有啥都看不到,而且来回调整优先级的时候需要剪切粘贴,主要就是来回调节优先级特别麻烦.所 ...
- JavaScript中的Error错误对象与自定义错误类型
Error Error是JavaScript语言中的一个标准的内置对象,专门用于处理JS开发中的运行时错误. 当我们的JS代码在运行过程中发生错误的话,就会抛出Error对象,整个程序将会中断在错误发 ...
- Tekton 设计简介 及 实践
本文是我对Tekton的实现原理和背后技术逻辑的理解,以及在实践过程中的一些总结. 简介 Tekton 是一个基于 Kubernetes 的云原生 CI/CD 开源(https://cd.founda ...
- 工程坐标转换方法C#代码实现
目录 1. 前言 2. 计算总体框架 3. C#代码实现 3.1 整体类的构建 3.2 椭球参数赋值 3.3 转换1.3(大地经纬度坐标与地心地固坐标的转换) 3.4 投影转换 3.5 转换2的实现( ...
- Karmada多云多集群生产实践专场圆满落幕
摘要:CNCF Karmada社区Cloud Native Days China 2022南京站成功举办. 本文分享自华为云社区<Karmada多云多集群生产实践专场圆满落幕|Cloud Nat ...
- element-ui中table表格表头和表格内容都水平居中,以及斑马纹背景颜色修改
<el-table :data="detalData" stripe //斑马纹 border :header-cell-style="{textAlign: 'c ...
- [编程基础] Python中的绝对导入与相对导入
如果您从事的Python项目有多个文件,那么您以前可能不得不使用import语句.即使对于拥有多个项目的Python重度使用者(比如我),import也可能会造成混淆!您可能正在阅读本文,因为您想对P ...