單片機如何快速實現查看實時數據

在用 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.pswp.cn/news/907139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907139.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3:橫線無限滾動(向左/向右),自定義UI

子組件 <template><div class"single-scroll-container" ref"container" mouseenter"pause" mouseleave"resume"><divclass"single-scroll-content":style"{ transform: translateX(${translateX}px) }…

Anthropic公司近日發布了兩款新一代大型語言模型Claude Opus 4與Claude Sonnet 4

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【機器人】復現 Embodied-Reasoner 具身推理 | 具身任務 深度推理模型 多模態場景 長遠決策 多輪互動

Embodied-Reasoner 是一個多模態具身模型&#xff0c;它將 o1 的深度推理能力擴展到具身交互任務。 可以在 AI2THOR 仿真中執行復雜的任務&#xff0c;例如搜索隱藏物體、操縱 和 運輸物品 具有以下的功能&#xff1a; &#x1f914; 深度推理能力&#xff0c;例如分析、空間…

使用 Qemu 調試 LoongArch 應用程序

1.編譯 Qemu OS:Ubuntu 22.04 下載Qemu源碼 git clone --depth1 https://gitlab.com/qemu-project/qemu.git編譯 cd qemu mkdir build cd build ../configure --target-listloongarch64-linux-user,loongarch64-softmmu --prefixpwd/__install make && make instal…

Unity 游戲優化(持續更新中...)

垃圾回收 是什么&#xff1f; 垃圾回收&#xff08;Garbage Collection&#xff09;GC 工作機制 1、Unity 為用戶生成的代碼和腳本采用了自動內存管理。 2、小塊數據&#xff08;如值類型的局部變量&#xff09;分配在棧上。大塊數據和長期存儲分配在托管堆上。 3、垃圾收集…

python和java差異:關鍵數據類型與容器

2.0. 對象的類型&#xff1a;可變 (Mutable) 與不可變 (Immutable) 在Python中&#xff0c;理解對象的可變性 (mutability) 是至關重要的&#xff0c;它影響著變量如何被修改、函數參數如何傳遞以及數據結構的行為。 不可變對象 (Immutable Objects): 大白話定義&#xff1a;…

DAY 33

知識點回顧&#xff1a; 1. PyTorch和cuda的安裝 2. 查看顯卡信息的命令行命令&#xff08;cmd中使用&#xff09; 3. cuda的檢查 4. 簡單神經網絡的流程 a. 數據預處理&#xff08;歸一化、轉換成張量&#xff09; b. 模型的定義 i. 繼承nn.Module類 ii. 定義…

Minktec 柔性彎曲傳感器,靈敏捕捉坐姿弓背、精準監測行走姿態,守護兒童背部健康,為科學健身提供數據支撐,開啟職業健康與背痛 AI 干預新方向。

Minktec彎曲形變傳感器通過創新的技術設計&#xff0c;為各種彎曲和形變檢測需求提供了精確的解決方案。其核心技術基于薄膜柔性傳感器的應用&#xff0c;能夠捕捉物體在三維空間中的動態變化。傳感器內部結合了多點排列的應變元件和專有算法&#xff0c;實現了形狀的實時重建。…

快遞鳥接口費用解析:中小電商成本控制方案

中小電商企業在物流環節的成本控制&#xff0c;直接影響著整體運營效率和利潤空間。作為國內主流的物流數據服務商&#xff0c;快遞鳥API接口憑借其聚合查詢、電子面單、軌跡跟蹤等功能&#xff0c;成為眾多電商企業的選擇。但如何精準解析其收費模式&#xff0c;并制定科學的成…

maven 最短路徑依賴優先

問題描述&#xff1a; 項目在升級大版本后出現了&#xff0c;兩個不同模塊所引用的同一個依賴包版本不同 module A 引用了 module B&#xff0c;module B 引用了 A_1.0.jar->B_1.0.jar->C_1.0.jar(C 為B 里面的包) 在執行 mvn dependency:tree 后發現&#xff1a; modul…

游戲引擎學習第314天:將精靈拆分成多個層

回顧并為今天的工作做準備 我們今天繼續昨天開始的工作&#xff0c;現在我們要回到渲染中處理 Z 值的最終環節。我們目前已經有一個我們認為還算合理的排序方式&#xff0c;雖然可能還需要在接下來的過程中進行一些調整&#xff0c;但總體上已經有了一個明確的方向。 我們已經…

HashSet的基本概念

ashSet的基本概念 - HashSet 是C#中用于存儲唯一元素的泛型集合類&#xff0c;它基于哈希表實現&#xff0c;具有快速查找、添加和刪除元素的特性。 - 核心特點&#xff1a; - 不允許存儲重復元素 - 元素無序排列 - 查找、添加、刪除操作的平均時間復雜度為O(1) - 實現了 IEnum…

信號與系統10-綜合案例:智能信號處理系統

第7課&#xff1a;綜合案例——智能信號處理系統 1. 案例1&#xff1a;基于傅里葉變換與AI的語音信號分類系統 1.1 理論基礎 傅里葉變換是信號處理的核心工具之一&#xff0c;能夠將時域信號轉換為頻域表示&#xff08;如頻譜圖&#xff09;。語音信號的頻域特征&#xff08…

詳解Kubernetes Scheduler 的調度策略

詳解Kubernetes Scheduler 的調度策略 在 Kubernetes(K8s)中,Scheduler(調度器) 負責 決定 Pod 應該運行在哪個 Node(節點)。 ?? 調度器的目標是什么? ? 最大化資源利用率(讓 CPU、內存等資源不浪費) ? 保證 Pod 運行在合適的 Node 上(避免超載、滿足親和性)…

在 ElementUI 中實現 Table 單元格合并

在 ElementUI 中實現 Table 單元格合并 在使用 ElementUI 的 Table 組件時&#xff0c;有時我們需要合并相鄰的單元格&#xff0c;以提高表格的可讀性和簡潔性。下面是一個關于如何在 Table 中根據特定字段合并單元格的實現方法。 邏輯分析 spanMethod 方法&#xff1a;這是 …

小土堆pytorch--現有網絡模型的使用及修改

現有網絡模型的使用及修改 一級目錄二級目錄三級目錄 現有網絡模型的使用及修改1.VGG16模型VGG16網絡模型簡介**核心特點****網絡結構細節****優缺點與應用****變種與后續發展** 2. 使用vgg16模型 一級目錄 二級目錄 三級目錄 現有網絡模型的使用及修改 1.VGG16模型 VGG16…

Oracle 正則表達式匹配(Oracle 11g)

1、連續2詞漢字重復或3詞漢字重復&#xff08;不會忽略符號&#xff09; ([^ \u4e00-\u9fa5\S]{2,3})\1 例如&#xff1a;阿富、 SELECT REGEXP_replace(阿富、阿富、 阿富汗、 , ([^ \u4e00-\u9fa5\S]{2,3})\1, 重復) FROM dual結果&#xff1a; 2、連續2詞漢字重復或3詞…

對話魔數智擎CEO柴磊:昇騰AI賦能,大小模型融合開啟金融風控新范式

導讀&#xff1a;#昇騰逐夢人# AI已經成為金融機構核心競爭力的關鍵要素。專注AI金融賽道的魔數智擎&#xff0c;通過大小模型融合&#xff0c;讓AI成為銀行的“金融風控專家”。 作者 | 小葳 圖片來源 | 攝圖 在AI涌向產業的時代賽跑中&#xff0c;開發者是絕對的主角。 昇騰…

IDEA使用Git進行commit提交到本地git空間后撤回到commit版本之前

一、前言 Git作為最流行和最全面的版本控制工具&#xff0c;非常好用&#xff0c;但是操作也會比SVN復雜一些。畢竟有得有失嘛&#xff0c;所以我選擇Git&#xff0c;最近在工作中&#xff0c;一不小心吧一些無關緊要的文件commit了。還好在Push之前看到&#xff0c;不過就算P…

GitHub 趨勢日報 (2025年05月26日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1Fosowl/agenticSeek完全本地的馬努斯AI。沒有API&#xff0c;沒有200美元的每…