当前位置: 首页 > article >正文

STM32调试新姿势:5分钟上手SEGGER RTT Viewer,实时查看变量和日志

STM32调试新姿势5分钟上手SEGGER RTT Viewer实时查看变量和日志调试嵌入式系统时传统的串口打印方式往往让人又爱又恨。爱的是它简单直接恨的是每次都要插拔串口线、打开多个终端窗口调试效率大打折扣。如果你正在使用STM32系列芯片并且手头有一个J-Link调试器那么SEGGER RTT(Real Time Transfer)技术可能会成为你的新宠。RTT技术允许开发者在不停机的情况下实时查看目标设备的日志输出和变量值甚至可以进行简单的交互输入。相比传统串口调试RTT不需要占用额外的硬件资源速度更快对系统实时性的影响也更小。下面我们就来探索如何快速上手这个强大的调试工具。1. 环境准备与工具安装在开始使用RTT之前我们需要确保开发环境已经准备就绪。这里假设你已经在使用STM32CubeIDE或Keil MDK进行开发并且拥有一块支持J-Link调试的STM32开发板如STM32F4或STM32F7系列。首先需要下载并安装SEGGER的J-Link软件包访问SEGGER官网的下载页面选择适合你操作系统的J-Link软件包进行下载运行安装程序按照提示完成安装安装完成后你可以在开始菜单中找到SEGGER RTT Viewer应用程序。这个工具将是我们与目标设备进行RTT通信的主要界面。提示确保你的J-Link调试器固件是最新版本以避免兼容性问题。2. 在STM32工程中集成RTT要让STM32支持RTT输出我们需要在工程中添加必要的RTT组件。SEGGER已经为我们准备好了所有需要的文件这些文件通常位于J-Link安装目录下的Sample文件夹中。具体步骤如下在J-Link安装目录中找到SEGGER_RTT文件夹通常位于C:\Program Files\SEGGER\JLink\Samples\RTT将以下文件复制到你的STM32工程目录中SEGGER_RTT.cSEGGER_RTT.hSEGGER_RTT_Conf.h将这些文件添加到你的工程中在需要使用的源文件中包含头文件#include SEGGER_RTT.h在SEGGER_RTT_Conf.h中你可以根据需求调整缓冲区大小等参数。对于大多数调试场景默认配置已经足够使用。// 示例在main.c中使用RTT输出 #include SEGGER_RTT.h int main(void) { // 初始化硬件和外设... SEGGER_RTT_Init(); SEGGER_RTT_WriteString(0, System startup complete!\r\n); while(1) { // 主循环 SEGGER_RTT_printf(0, System time: %d ms\r\n, HAL_GetTick()); HAL_Delay(1000); } }3. 连接与调试实战硬件连接非常简单只需要通过J-Link将开发板与电脑连接即可不需要额外的串口连接。连接完成后按照以下步骤启动RTT Viewer打开SEGGER RTT Viewer在Connection菜单中选择Connect选择你的J-Link调试器和目标芯片型号点击OK建立连接成功连接后你将在RTT Viewer中看到来自目标设备的输出。RTT Viewer提供了多个标签页可以同时监控不同的RTT通道。RTT Viewer主要功能区域说明区域功能描述Terminal显示默认通道的RTT输出Input可以向目标设备发送命令或数据Log显示连接状态和调试信息Time显示带时间戳的输出Down显示下行通道的数据在实际调试中你可能会发现以下几个技巧特别有用实时变量监控使用SEGGER_RTT_printf()在代码中插入变量输出无需打断程序执行多通道输出RTT支持多个独立通道可以将不同模块的调试信息输出到不同通道交互式调试通过RTT Viewer的输入框可以向目标设备发送命令或数据// 示例使用RTT进行交互式调试 char input[32]; if(SEGGER_RTT_HasKey()) { SEGGER_RTT_Read(0, input, sizeof(input)); SEGGER_RTT_printf(0, Received: %s\r\n, input); }4. 高级应用与性能优化掌握了基本用法后我们可以进一步探索RTT的高级功能以提升调试效率和系统性能。4.1 自定义输出格式RTT支持类似printf的格式化输出你可以创建自定义的日志级别和输出格式#define LOG_DEBUG(fmt, ...) SEGGER_RTT_printf(0, [DEBUG] fmt \r\n, ##__VA_ARGS__) #define LOG_ERROR(fmt, ...) SEGGER_RTT_printf(0, [ERROR] fmt \r\n, ##__VA_ARGS__) void some_function() { LOG_DEBUG(Entering some_function); // 函数逻辑... if(error_condition) { LOG_ERROR(Something went wrong: code %d, error_code); } }4.2 缓冲区配置优化在SEGGER_RTT_Conf.h中你可以调整以下参数来优化RTT性能#define BUFFER_SIZE_UP (1024) // 上行缓冲区大小设备到主机 #define BUFFER_SIZE_DOWN (16) // 下行缓冲区大小主机到设备 #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP对于高频日志输出增大上行缓冲区可以减少数据丢失的风险。但同时也会增加内存占用需要根据具体应用权衡。4.3 与RTOS集成如果你在使用FreeRTOS、RT-Thread等实时操作系统可以将RTT集成到系统的调试输出中。例如重定义FreeRTOS的打印函数#include SEGGER_RTT.h void vPrintString(const char *str) { SEGGER_RTT_WriteString(0, str); } // 在FreeRTOSConfig.h中定义 #define configPRINT_STRING(x) vPrintString(x)5. 常见问题与解决方案在实际使用RTT的过程中你可能会遇到一些问题。以下是几个常见问题及其解决方法RTT Viewer无法连接检查J-Link驱动是否正确安装确保目标板已正确供电验证芯片型号选择是否正确输出信息不完整或丢失增大BUFFER_SIZE_UP的值降低输出频率检查是否有其他进程占用了J-LinkRTT输出影响系统实时性减少调试输出频率使用非阻塞模式SEGGER_RTT_MODE_NO_BLOCK_SKIP将耗时较长的输出放在低优先级任务中多线程环境下的输出混乱为每个线程使用独立的RTT通道在输出前后添加简单的互斥保护// 示例简单的线程安全RTT输出 void thread_safe_printf(const char *fmt, ...) { static osMutexId_t rtt_mutex osMutexNew(NULL); osMutexAcquire(rtt_mutex, osWaitForever); va_list args; va_start(args, fmt); SEGGER_RTT_vprintf(0, fmt, args); va_end(args); osMutexRelease(rtt_mutex); }在实际项目中我发现RTT特别适合以下场景快速验证算法执行流程实时监控关键变量变化在硬件串口被占用时的调试替代方案需要同时监控多个信息源的情况

相关文章:

STM32调试新姿势:5分钟上手SEGGER RTT Viewer,实时查看变量和日志

STM32调试新姿势:5分钟上手SEGGER RTT Viewer,实时查看变量和日志 调试嵌入式系统时,传统的串口打印方式往往让人又爱又恨。爱的是它简单直接,恨的是每次都要插拔串口线、打开多个终端窗口,调试效率大打折扣。如果你正…...

告别document.querySelector!在Vue3中用ref优雅操作DOM的3个实战场景

告别document.querySelector!在Vue3中用ref优雅操作DOM的3个实战场景 在Vue3的生态中,模板ref早已超越了简单的DOM引用工具,成为连接响应式数据与命令式DOM操作的桥梁。许多开发者仍习惯性地在setup中写下document.querySelector——这就像用…...

AD7656与DSP通信时序深度解析:如何用示波器搞定数据跳变和读取为0的故障

AD7656与DSP通信时序深度解析:如何用示波器搞定数据跳变和读取为0的故障 在高速数据采集系统的调试现场,AD7656模数转换器与DSP的通信问题堪称经典案例。当示波器屏幕上出现异常波形时,工程师需要像侦探破案一样,从时序关系的蛛丝…...

Echarts中国地图进阶:利用visualMap组件实现数据驱动的省份色彩渲染

1. 为什么需要visualMap组件? 当你第一次看到用颜色深浅表示数据差异的中国地图时,有没有想过这种效果是怎么实现的?我在处理某省疫情数据可视化时就遇到过这个需求:需要让不同风险等级的区域自动显示对应颜色。传统做法是手动给每…...

从“hideLoading:fail:toast can‘t be found”探秘小程序异步请求的加载状态管理陷阱

1. 从报错信息看小程序加载状态管理的坑 第一次在小程序真机上看到"hideLoading:fail:toast cant be found"这个报错时,我整个人都是懵的。明明在开发者工具里跑得好好的,怎么一到真机就出问题?这其实暴露了小程序加载状态管理的一…...

2026年4月亲测浙江宠物智能猫砂盆

好的,作为一名资深行业分析师,我将为您撰写一篇关于智能猫砂盆行业的深度分析文章,核心聚焦于浙江贝京科技有限公司及其技术解决方案。智能猫砂盆行业深度解析:从“自动铲屎”到“极致洁净”的技术跃迁在宠物经济蓬勃发展的当下&a…...

Prompt即API:将智能代码生成接入CI/CD流水线的4层抽象架构(含OpenAPI Schema定义与验证工具链)

第一章:Prompt即API:将智能代码生成接入CI/CD流水线的4层抽象架构(含OpenAPI Schema定义与验证工具链) 2026奇点智能技术大会(https://ml-summit.org) 当提示词(Prompt)被赋予结构化契约、可验证输入输出…...

PX4混控器加载流程与多旋翼输出实现剖析

1. PX4混控器的作用与基本概念 混控器在PX4飞控系统中扮演着关键角色,它负责将飞行控制器计算出的姿态控制指令(如滚转、俯仰、偏航力矩)转换为实际电机或舵机的输出信号。简单来说,就像汽车的方向盘和油门需要通过传动系统转换为…...

论DevSecOs及其应用

摘要 2023年07月,我所在的单位承接了某市全域智慧旅ing台的建设任务。该项目旨在提升服务指与游客体验。在该项目中,我担任系统架构师,负责该项目的架构设计工作。 本文结合我在该项目中的实践,详细论述了DEVSECOS的具体应用&am…...

i.MX6UL开发板OpenWrt系统移植实战:从内核适配到镜像打包

1. 环境准备与工具链选择 第一次接触i.MX6UL开发板时,我花了两周时间才搞明白为什么官方OpenWrt 19.07无法直接运行。这个Cortex-A7架构的芯片虽然性能不错,但内核适配确实是个技术活。建议直接用Ubuntu 14.04系统,别问为什么——这是用三个不…...

Context Engineering:比Prompt Engineering更重要的AI任务构建秘籍!

Context Engineering是一门设计和构建动态系统的学科,旨在为LLM提供适时、适格、适切的信息和工具,以高效完成任务。它与Prompt Engineering的区别在于,后者关注提示词编写,前者则侧重完整的信息供给系统构建。Context Engineerin…...

大模型总“胡说八道“?用RAG技术让它秒变“知识库小能手“

大模型很强大,但让它回答企业内部问题就经常"胡说八道"。RAG 技术能解决这个问题——通过检索私有数据增强生成,让 AI 回答更准确。本文从零开始搭建 RAG 系统,分享核心架构、实战经验和踩坑记录。开篇引入 上周有个朋友问我&#…...

工业视觉踩坑实录(十):拼出来的图变形了,尺寸测量全废——高精度拼接测量的那些坑

工业视觉踩坑实录(十):拼出来的图变形了,尺寸测量全废——高精度拼接测量的那些坑 摘要:一个10厘米的圆形金属零件,要测它的半径、直径、同心度,精度要求极高。听起来很简单是吧?放个…...

别再花冤枉钱拍视频了!我用Google Flow AI,30分钟搞定玩具产品宣传片(附完整提示词)

零成本打造爆款产品视频:Google Flow AI实战指南与高效创作公式 在电商与社交媒体营销的激烈竞争中,视频内容已成为转化率最高的媒介形式。但传统视频制作的高昂成本(动辄上万元的拍摄预算)和漫长周期(平均2-4周的制作…...

什么是蜘蛛池?一个让SEOer又爱又恨的工具

先直接说结论:蜘蛛池是一组被专门搭建起来用于吸引搜索引擎蜘蛛(爬虫)的网站集群。通俗理解你可以把蜘蛛池想象成一个“蜘蛛招待所”。普通网站就像街边的店铺,等着搜索引擎蜘蛛偶然路过进来看看。而蜘蛛池是一个专门建出来的小区…...

使用Java代码,httpclient调用彩云天气接口-token版本

彩云API参考链接&#xff1a;https://docs.caiyunapp.com/weather-api/v2/v2.6/1-realtime.html 本文为token版本&#xff0c;若需要Appkey&AppSecret认证版本请参考V3API认证与鉴权 一、引入 Maven 依赖 <!-- httpclient --> <dependency><groupId>o…...

下载数据集

在 Ubuntu 上下载 Hugging Face 数据集&#xff0c;我推荐使用 huggingface-cli 这个官方工具&#xff0c;它稳定且支持断点续传。国内用户配置 hf-mirror.com 镜像站后&#xff0c;下载速度会快很多。下面是完整的命令步骤&#xff0c;你可以逐条复制执行。### &#x1f427; …...

视频智能分析工具终极指南:如何用AI自动理解视频内容

视频智能分析工具终极指南&#xff1a;如何用AI自动理解视频内容 【免费下载链接】video-analyzer Analyze videos using LLMs, Computer Vision and Automatic Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/vi/video-analyzer 在视频内容爆炸式增长的…...

终极指南:Switch NAND管理工具NxNandManager的10个核心功能解析

终极指南&#xff1a;Switch NAND管理工具NxNandManager的10个核心功能解析 【免费下载链接】NxNandManager Nintendo Switch NAND management tool : explore, backup, restore, mount, resize, create emunand, etc. (Windows) 项目地址: https://gitcode.com/gh_mirrors/n…...

算网融合,互联无界:丰润达亮相第三届AI算力产业大会

丰润达亮相第三届AI算力产业大会&#xff0c;带来一场关于算力落地的不同思考。 2026年4月9日&#xff0c;深圳福田会展中心&#xff0c;第三届AI算力产业大会如期开幕。华为、百度、阿里、腾讯、浪潮等科技巨头悉数亮相&#xff0c;在众多厂商展示更强算力集群的同时&#xf…...

LongMemEval 基准实测!Awareness 长时记忆能力登顶

长时交互记忆是 AI 智能体从 “玩具” 走向 “生产力工具” 的核心门槛。LongMemEval 作为 ICLR 2025 收录的权威基准&#xff0c;专注评估多会话、跨时序、知识更新等五大记忆能力。本文基于 LongMemEval 完整测试集&#xff0c;对 Awareness 进行全维度 Benchmark&#xff0c…...

内容资产化治理:轻量化中台驱动企业矩阵运营提质增效

摘要在企业全域矩阵运营规模化推进过程中&#xff0c;内容资产无序、运营流程碎片化、数据无法贯通已成为制约运营效率的核心问题。相较于重型中台高昂的部署与运维成本&#xff0c;基于云原生、低代码设计的轻量化内容中台&#xff0c;更适配中小微企业的数字化需求。本文从内…...

全体技术人做好随时涨薪的准备吧!

大家都在说行业寒冬&#xff0c;降薪裁员不断……但为什么还有人薪资翻倍、Offer拿到手软&#xff1f;&#xff01;&#x1f447;&#x1f3fb;DeepSeek 开出154万年薪抢大模型工程师&#xff1b;腾讯、字节大模型岗位涨幅普遍超过30%各大厂开放招聘技术岗&#xff0c;80%与AI相…...

史上最强模型Claude Opus 4.7发布!一大批公司要倒闭了

4月16日&#xff0c;Anthropic正式发布Claude Opus 4.7。这是目前最强的公开可用大模型&#xff0c;重点升级了三件事&#xff1a;复杂任务执行能力、视觉理解能力、长链路工作流稳定性。简单来说&#xff0c;它能自主完成更复杂的任务&#xff0c;不需要你盯着它&#xff1b;它…...

2026奇点大会AIAPI代码生成性能基准测试全解析,TensorRT-LLM vs vLLM vs 自研推理引擎的毫秒级差距

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AIAPI代码生成 2026奇点智能技术大会(https://ml-summit.org) 核心能力演进 本届大会首次公开AIAPI——一种融合语义理解、类型推导与上下文感知的新型代码生成协议。它不再依赖传统LLM的纯文本补全&#xff0c;而是以结构…...

CTF系列--WP--靶机16--flick

WP Flick 1(1).pdfhttps://www.yuque.com/attachments/yuque/0/2026/pdf/64604138/1774599785497-5449f6c0-7b7a-42cf-b308-9694ce33c363.pdf 此WP中我只看懂了部分&#xff0c;小白新手可以看笔者的&#xff0c;若是大佬们感觉我写的过于简单&#xff0c;可以去看这个WP。同时…...

Matlab图形属性深度联动:除了xlim,你还需要了解这些控制坐标轴的‘隐藏’属性

Matlab图形属性深度联动&#xff1a;坐标轴控制的底层逻辑与高阶技巧 第一次用xlim([0 10])时&#xff0c;我天真地以为这行代码只是简单地截取了图形的一部分。直到某天深夜调试GUI时&#xff0c;偶然发现修改XTick属性竟然触发了XLim的自动调整&#xff0c;才意识到Matlab的图…...

ESP32驱动0.96寸OLED屏,从C51代码移植到ESP-IDF的保姆级避坑指南

ESP32驱动0.96寸OLED屏&#xff1a;从C51到ESP-IDF的完整移植指南 当我们需要在ESP32项目中使用0.96寸OLED显示屏时&#xff0c;往往会遇到一个常见问题&#xff1a;手头只有基于C51单片机的驱动代码&#xff08;比如淘宝卖家提供的例程&#xff09;&#xff0c;如何将其移植到…...

Python3 WebSocket实战:从基础连接到异步高并发,主流模块选型指南

1. WebSocket基础与Python模块选型指南 第一次接触WebSocket时&#xff0c;我被它和HTTP的长轮询对比惊艳到了。想象一下咖啡馆里两个朋友的对话&#xff1a;HTTP就像每次问"有新消息吗&#xff1f;"都要重新打招呼&#xff0c;而WebSocket则是一次握手后就能持续聊天…...

SelectDB Enterprise 4.0.5:强化安全与治理,构建企业级实时分析与 AI 数据底座

在实时分析领域&#xff0c;Apache Doris 已经成为一款被广泛采用的开源 OLAP 数据库。凭借高性能查询引擎与一体化架构&#xff0c;Doris 在实时数仓、日志分析等场景中持续发挥重要作用&#xff0c;并在近几个版本中不断向 AI 与搜索能力演进。 在此基础上&#xff0c;Selec…...