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

单片机如何快速实现查看实时数据

在用 Keil 做调试的时候,最让人头秃的是什么?
不是写代码的BUG,而是:这个条件变量是什么情况?为什么没进入这个判断?我代码跑到哪里了?

其实本质上都是通过变量判断代码的执行顺序有没有问题

还有需要观察变量的变化就像看天象,得不停地点进去、刷新,点进去、刷新……
想偷个懒用串口传到上位机画波形?可以,但要加代码啊兄弟!
printf 打印?你以为你在写 PC 软件呢?嵌入式的资源浪费不起啊

那有没有既不写一堆代码、又能实时观察变量并支持可视化显示的神器?
答案是:有的,兄弟

我们今天就来聊聊两种“既要又要还要”的调试法宝,它们的原理都类似:
通过调试协议直接访问 MCU 的内存,像“读心术”一样看变量的变化。

1.FreeMASTER

在这里插入图片描述

安装教程:https://blog.csdn.net/WL0616/article/details/129378813
额外强调:

FreeMaster 中 Plug-in Module 显示空白的问题
解决办法:打开FreeMaster的安装目录,找到register.bat文件,以管理员的身份运行一下就好了。

使用教程:https://www.bilibili.com/video/BV17D421V7LY/

安装包:\LabNas\公共资料\软件库\FMASTERSW32.exe

2.STM32CubeMonitor

st公司开发的工具,比上一个的功能更多,类似搭积木的方法,但个人感觉多出来的功能用不上。

具体观看视频有更详细的介绍
https://www.bilibili.com/video/BV1th4y1g7Mc/

3.测试

由于网上已经有比较详细的安装教程和使用说明,我就不重复写了,我们关注一下一个很重要的问题:

使用FreeMASTER监控数据的过程是否会导致单片机执行变慢?

这是一个灵魂拷问。要是你单片机跑得好好的,但加了个FreeMASTER看看变量的变化,结果如同中断一样是不是插个任务进来打断正常的任务执行,那岂不是一个乱套了?

好消息是:不会
FreeMASTER 和调试器沟通用的是调试协议(比如 SWD、JTAG),而不是走你程序里的串口、I2C 这些“正经业务通道”。

它是通过调试接口在后台“偷看”变量的,不打断你程序的执行流程,就像后排观众戴望远镜看舞台,不会跑上台抢戏。

当然,这里也不是说完全没代价——如果你监控的变量特别多、刷新频率特别快,也可能让调试器“喘不过气”,刷新速度跟不上节奏,但这只是显示延迟,MCU 本体依旧在认真打工。

一句话总结:FreeMASTER更像是一个安静的观察者,不吭声、不添乱,悄悄记录你程序的点点滴滴。

实验

口说无凭,我设计了一个简单的测试demo:思路很简单,通过硬件定时器计时一段累加变量的代码执行时间,看正常不干预的运行时间和使用FreeMASTER监控变量的运行时间是否有变化。

测试单片机:STM32F103C8T6

核心测试代码:

uint32_t count = 0;int main(void)
{Serial_Init();Timer_Init(); //1usTIM2->CNT = 0;TIM_Cmd(TIM2, ENABLE);for (count = 0; count < 100 * 1000; count++) {}TIM_Cmd(TIM2, DISABLE);Serial_Printf("cnt=%d\r\n", TIM2->CNT);while (1) {}
}

注意编译选项要选择-o0(无编译优化),防止代码中无操作的for循环被优化了

测试结果

正常运行
cnt=52778
使用FreeMASTER监控变量
cnt=52778

FreeMASTER监控变量count的波形图
在这里插入图片描述

两次测试后对比发现所消耗的时间完全相同,证明了使用FreeMASTER监控变量并不会占用MCU的运算资源。

http://www.lryc.cn/news/2386742.html

相关文章:

  • go实现钉钉三方登录
  • YOLOv1 详解:单阶段目标检测算法的里程碑
  • 5G 核心网切换机制全解析:XN、N2 与移动性注册对比
  • 物流配送优化实战:用遗传算法破解选址难题
  • Linux 个人用户设置账号密码环境变量,四种方式
  • Three.js搭建小米SU7三维汽车实战(5)su7登场
  • 关于 SSE(Server-Sent Events)过程的简要解剖
  • 格恩朗管段超声波流量计:流量测量先锋
  • 重构开发范式!飞算JavaAI革新Spring Cloud分布式系统开发
  • 图论 判断是否有环
  • (请关注)Oracle性能调优、优化总结调优参考直接应用,性能提升实用案例
  • EasyDarwin的配置与使用
  • PostgreSQL日志管理完整方案(AI)
  • 【Android】基于SurfaceControlViewHost实现跨进程渲染
  • vue+ThreeJs 创造自动选择的甜甜圈(圆环)
  • 能说一下JVM的内存区域吗
  • 东方仙盟_灵颜妙手——表单样式——仙盟创梦IDE
  • 输入一串字符,统计其中字母的个数
  • 进程IO之 进程
  • OpenGL Chan视频学习-5 Vertex Attributes and Layouts in OpenGL
  • ESP32学习笔记_Peripherals(3)——ADC
  • QT学习一
  • 黑马点评Reids重点详解(Reids使用重点)
  • 小米2025年校招笔试真题手撕(一)
  • 《软件工程》第 11 章 - 结构化软件开发
  • MongoDB基础知识(浅显)
  • Neo4j(三) - 使用Java操作Neo4j详解
  • MPI实现大数据Ring Broadcast逻辑
  • 蓝桥杯3503 更小的数
  • 高并发下使用防重表做防重案例