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

在用 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

核心测试代码:

c 复制代码
uint32_t count = 0;

int main(void)
{

    Serial_Init();
    Timer_Init(); //1us
    TIM2->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的运算资源。

相关推荐
飞睿科技8 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天9 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)10 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术10 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao11 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报11 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110118 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋20 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障
梁洪飞1 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
进击的小头1 天前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机