女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

實時可視化調試:SystemView 助你掌控RTOS運行態

Rice嵌入式開發技術分享 ? 來源:Rice嵌入式 ? 作者:Rice嵌入式 ? 2025-07-10 10:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開發中,調試永遠是最痛苦的環節。你是否曾經為了定位一個卡頓、死機、優先級反轉的問題而疲憊不堪?你是否希望能實時觀察系統的運行細節,比如任務切換、時間片分配、ISR 響應時間?

SystemView 解決了哪些痛點?

傳統日志靠串口輸出,信息有限、時序混亂,遇到高頻中斷或多任務調度就無能為力。而 SystemView 是 SEGGER 出品的實時跟蹤分析工具,它解決了:

任務調度不可見?→ 一目了然!

中斷響應太慢?→ 毫秒級分析!

性能瓶頸難以定位?→ 函數級耗時統計!

系統卡住沒信息?→ 最后一幀也能還原現場!

SystemView 幫你把 RTOS 從“黑盒”變成“透視玻璃”。

SystemView 的工作原理

SystemView 通過以下幾個步驟實現對嵌入式系統的實時監控:

鉤子函數植入在 RTOS 中植入鉤子函數,實時捕獲任務切換、中斷入口和退出等關鍵事件。

事件寫入 RTT 緩沖區捕獲的事件數據被寫入 MCU 內部的 RTT(Real-Time Transfer)緩沖區,這是一個高效的環形數據區。

數據通過調試接口傳輸利用 MCU 的調試接口(如 SWD),RTT 緩沖區的數據被高速傳輸到開發者的 PC 端。

PC 端實時解析與顯示SystemView PC 工具接收數據,實時解析任務執行順序、時間關系及內核對象狀態,并以圖形化界面展示。

實現低延遲與高可靠監控這種設計保證了系統狀態的實時反映,方便開發者快速定位和分析問題。

SystemView 能做什么?

SystemView 是一個可以在線調試嵌入式系統的工具,它能分析系統中哪些中斷、任務被執行了,以及它們的執行順序和時間關系。同時,它還能記錄系統中各種內核對象(如信號量、互斥量、事件、消息隊列等)的持有和釋放時間點,這對于調試復雜的多線程系統非常有效。

SystemView 能夠實現:

實時任務切換跟蹤

中斷進出時序圖

CPU 占用率統計

用戶自定義事件插樁

時間軸回放與數據保存

支持多種主流 RTOS(RT-Thread / FreeRTOS / embOS 等)

wKgZPGg-UUaATaqhAAPZipRYOak651.png

盡管 SystemView 提供了強大的系統分析能力,但其在實際部署中的門檻仍不容忽視。

傳統上,SystemView 依賴于 SEGGER 提供的 J-Link 仿真器來實現數據的實時采集和傳輸。這種方案在功能上確實成熟穩定,但對許多開發者來說,也帶來了一些不小的使用負擔:

正版 J-Link 的成本相對較高,盜版J-Link總是容易報錯;

同時,J-Link 本身并非為 SystemView 單獨設計,在多功能疊加的實際工程中,調試、下載、串口通信往往需要額外配合其他工具才能完成。

如何降低 SystemView 的使用門檻?

其實,SystemView 并不強制要求使用 J-Link——它還提供了一個 UART 模式接口,用于在不具備 SWO 或 Trace 能力的芯片上進行數據交互。這個 UART 模式的通信協議是公開的,允許通過串口發送命令、讀取 RTT 緩沖區,從而實現 SystemView 的核心功能。

那么問題來了:

既然 SystemView 可以用 UART 傳輸數據,那能不能把這些串口數據,轉發到 SWD 上的 RTT 通道,從而間接實現和 MCU 的數據交互?

剛好,我制作的多功能工具MicroLink 原本就具備RTT 通信的能力,因此可以順勢在此基礎上拓展,實現對 SystemView UART 協議的兼容與轉發。

簡單來說:

SystemView PC 工具選擇UART 模式進行通信,通過虛擬串口向 MicroLink 發送特定格式的數據;

MicroLink 內部固件識別并適配 SystemView 的 UART 協議,對數據包進行解析;

MicroLink 將接收到的指令映射為對目標 MCU 內存的讀寫操作,通過SWD 接口實現真實的數據訪問;

MCU 中運行的SystemView 嵌入式端程序將運行數據(任務調度、事件、ISR 等)寫入 RTT UpBuffer;

MicroLink從 RTT Buffer 中讀取數據,再通過串口返回給 SystemView PC 工具

最終,SystemView 實時顯示系統運行過程,形成完整的數據回環。

wKgZPGg-UUaAH3FpAABHUV8I6Uo586.jpg

從此你無需再專門購買昂貴的正版 J-Link,無需額外接線,也無需修改一行代碼。只要插上 MicroLink,打開 SystemView,選擇 UART 模式,點擊 Start,一切就緒。

MicroLink是一個在傳統 DAPLink 的基礎上進行了全面升級,集成了在線仿真USB 轉串口脫機下載器RTT 通信SystemView 支持拖拽燒錄以及用戶可編程自動化工具等多個功能于一體的“一站式”的調試與開發工具。

為了感謝大家的關注和支持,我準備了一波 MicroLink 抽獎活動,歡迎參與贏取這款開發好幫手!

也可以通過下方鏈接直接購買,立即提升開發效率:

https://item.taobao.com/item.htm?ft=t&id=895964393739

劃到文章末尾,獲取 MicroLink 開源資料,加入技術交流群,與更多開發者一起探索嵌入式開發的無限可能。

SystemView 移植與使用步驟

SystemView 包含兩個部分:

PC 端程序:由 SEGGER 提供的 SystemView 工具,可收集并可視化展示嵌入式系統運行時的行為,包括任務調度、中斷響應、系統事件等。支持實時顯示和數據保存以供離線分析。

嵌入式端程序:需要集成到 MCU 工程中,負責記錄運行信息并通過RTT(Real-Time Transfer)模塊實時發送到 PC。

嵌入式端程序移植步驟

只需要利用 RT-Thread 推出的 Env 工具 使能 SystemView 軟件包,并對其進行簡單的配置,就能完成 SystemView 的嵌入式端程序的配置。

STM32 BSP stm32f103-onenet-nbiot為例,內核版本5.2.0,MicroLink固件版本V2.3.1及以上。

步驟一:在 Env 工具中進入 menuconfig 圖形化配置工具

打開 Env 工具,使用命令cd D:rt-threadbspstm32切換到 RT-Thread 源碼 BSP 根目錄下的 stm32f103-onenet-nbiot 目錄,然后輸入命令menuconfig配置工程。

利用上下鍵選中 RT-Thread online packages,按回車鍵進入下級菜單,在 tools packages 中打開 SystemView 。

wKgZPGg-UUaAS0JaAACoWeoovbg060.jpg

步驟二:配置SystemView

Version選擇latest最新版本,其他選項不需要配置。

wKgZPGg-UUaAaxfcAAC6jERKp8g032.jpg

menuconfig 配置選項說明:

參數 描述
App name 應用程序的名字
Device name 設備所用內核
Timestap freq 時間戳頻率 (0 表示使用系統默認頻率)
cpu freq cpu頻率(0 表示使用系統默認頻率)
RAM base RAM基地址 默認值:0x2000 0000
Event ID offset 事件ID的偏移 默認值:32
Using the Cortex-M cycle ... 使用系統頻率作為時間戳
System description 0-2 系統描述符 "I#num=name, ..." num 是中斷標號, name 是中斷名稱

步驟三:打開內核鉤子函數

利用上下鍵選中 RT-Thread Kernel,按回車鍵進入下級菜單,打開 Enable hook list。

wKgZPGg-UUaAT1ktAAEQqE2vX6M538.jpg

配置好選項之后,按 ESC 返回,退出并保存配置,這樣 SystemView 軟件包的使能和相關配置就完成了。

后面我們以一個具體的 demo 來講解 SystemView 工具的使用。

添加示例代碼

在文件 main.c 中添加以下代碼,然后在 main 函數中調用 demo 初始化函數demo_init();運行 demo。

/*
* 程序清單:systemview 演示代碼
*
* 這個例子中將創建一個動態信號量(初始值為0)及兩個動態線程,在這個兩個動態線程中
* 線程2將試圖采用永遠等待方式去持有信號量,持有成功之后發送運行標志。
* 線程1將先發送正在運行標志,然后釋放一次信號量,因線程2的優先級較高,線程2持有到信號量將線程1搶斷。
* 然后線程2發送運行標志之后,獲取不到信號量,被掛起,線程1繼續運行
*/
#defineTHREAD_PRIORITY     25
#defineTHREAD_STACK_SIZE    512
#defineTHREAD_TIMESLICE    5
/* 指向信號量的指針 */
rt_sem_tsem_food;
/* 線程1入口 */
voidthread1_entry(void* parameter)
{
 while(1)
  {
   /* 線程1第一次運行 */
    rt_kprintf("thread1 is run!n");
   /* 釋放一次信號量 */
    rt_sem_release(sem_food);
   /* 線程1第二次運行 */
    rt_kprintf("thread1 run again!n");
   /* 線程1延時1秒 */
    rt_thread_delay(RT_TICK_PER_SECOND);
  }
}
/* 線程2入口 */
voidthread2_entry(void* parameter)
{
 while(1)
  {
   /* 試圖持有信號量,并永遠等待直到持有到信號量 */
    rt_sem_take(sem_food, RT_WAITING_FOREVER);
   /* 線程2正在運行 */
    rt_kprintf("thread2 is run!n");
  }
}
/* DEMO初始化函數 */
voiddemo_init(void)
{
 /* 指向線程控制塊的指針 */
 rt_thread_tthread1_id, thread2_id;
 /* 創建一個信號量,初始值是0 */
  sem_food = rt_sem_create("sem_food",0, RT_IPC_FLAG_PRIO);
 if(sem_food == RT_NULL)
  {
    rt_kprintf("sem created fail!n");
   return;
  }
 /* 創建線程1 */
  thread1_id = rt_thread_create("thread1",
          thread1_entry, RT_NULL,/* 線程入口是thread1_entry, 參數RT_NULL */
          THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
 if(thread1_id != RT_NULL)
    rt_thread_startup(thread1_id);
 /* 創建線程2 */
  thread2_id = rt_thread_create("thread2",
          thread2_entry, RT_NULL,/* 線程入口是thread2_entry, 參數RT_NULL */
          THREAD_STACK_SIZE, THREAD_PRIORITY -1, THREAD_TIMESLICE);
 if(thread2_id != RT_NULL)
    rt_thread_startup(thread2_id);
}

PC 端SystemView 配置及使用

步驟一:下載 SystemView 分析工具

下載鏈接:

https://www.segger.com/products/development-tools/systemview/

步驟二:為 RT-Thread 添加系統描述文件

首先找到開發板目錄下的 packages 目錄,然后在 packages 目錄下找到 segger_debug-xxx 目錄,在這個目錄里面有一個 SystemView_Description 文件夾,RT-Thread 系統的描述文件就在里面,具體的目錄結構如下所示:

bsp\你自己的開發板\packages\segger_debug-xxx\SystemView_Description\SYSVIEW_RT-Thread.txt

將這個文件復制到 SystemView 工具安裝目錄下的 Description 目錄下,這樣 SystemView 就可以識別出 RT-Thread 系統了。

步驟三:連接MicroLink,啟動SystemView 功能

使用串口助手工具連接MicroLink提供的虛擬串口,并發送SystemView.start(0x20000000,1024,1)指令,來啟動MicroLink的SystemView 功能模塊。

SystemView.start(0x20000000,1024,1)

0x20000000:搜索RTT控制塊的起始地址;

1024:搜尋范圍大小;

1:啟動RTT的通道。

wKgZPGg-UUaAHWRbAAE29Pd1RrE261.jpg

如上圖所示提示Find SEGGER RTT addr 0x200002ec,說明已成功啟動SystemView 功能,然后關閉串口

如果提示no find _SEGGER_RTT addr,可以打開map文件,搜索_SEGGER_RTT 變量的地址,如下圖所示_SEGGER_RTT 地址為0X200002ec,然后將命令替換為SystemView.start(0X200002ec,1024,1)

wKgZPGg-UUeAKhHAAAFgICUxrRo347.jpg

步驟四:配置設備信息,開始錄制

雙擊打開 SystemView PC端程序,點擊Taget

wKgZPGg-UUeAWDT4AADgPgr_aq0077.jpg

選擇UART連接模式

wKgZPGg-UUeALG2mAAAuV6rley4097.jpg

COM口選擇剛才配置MicroLink啟動SystemView 功能的端口號,由于MicroLink的虛擬串口使用的是USB CDC模式,所以不需要配置波特率,保持默認就行。

wKgZPGg-UUeAH_8ZAAA_goFWFfI284.jpg

點擊OK,啟動開始錄制按鈕,SystemView 就開始實時錄制系統信息了。

wKgZPGg-UUeAfGQoAACk4lhoAwQ650.jpg

步驟五:結束錄制,分析系統

點擊結束錄制按鈕,結束錄制。將鼠標放置到時間軸窗口里,利用滾輪將事件放大到適合分析的大小

wKgZPGg-UUeAHfa1AAGOkIxp8do633.jpg

利用 SystemView 工具我們可以看出來,系統的運行確實如我們設想的那樣,線程1先開始運行,然后在釋放信號量之后被線程2搶斷。然后線程2運行,之后因獲取不到信號量被掛起,線程1繼續運行。從上面的事件列表還可以看到每個線程獲取或釋放信號量的具體時間。

在這次 demo 中,我們可以總結出系統整體:

線程切換有序、無異常延遲;

CPU 主要處于空閑狀態,說明整體系統負載非常低;

所有事件、切換、運行時間都精確呈現。

常見問題答疑(FAQ)

問題 解答
1. 使用 SystemView 會不會影響系統性能? 幾乎不會。SystemView 使用 SEGGER 的 RTT 技術通過 SWD 讀取內存中的 trace 數據,速度快、占用少。傳輸數據時采用memcpy拷貝到緩沖區,不會頻繁打斷 CPU,數據上傳過程不會顯著占用總線帶寬,性能影響可以忽略。
2. RTT 緩沖區滿了會不會丟數據? 會。若上位機沒有及時讀取 RTT 緩沖區,舊數據可能被新數據覆蓋,造成 trace 丟失。建議增大緩沖區、確保持續連接并避免暫停采集。
3. SystemView 支持哪些 RTOS? 官方支持 embOS、FreeRTOS、RT-Thread、CMSIS-RTOS 等主流內核,也支持通過接口適配層(SEGGER_SYSVIEW.c/h)接入自定義 RTOS。
4. SystemView 能用于裸機程序嗎? 可以,但功能受限。裸機無任務調度,只能記錄中斷或自定義打點,無法進行任務運行時間分析、調度分析等 RTOS 專屬功能。
5. 可以在正式發布版本中保留 SystemView 嗎? 不建議。雖然開銷小,但 trace 功能占用 RAM/ROM 空間,也可能帶來信息泄漏風險。推薦僅在開發調試階段啟用,可用#ifdef DEBUG控制。
6. SystemView 支持事后分析模式嗎? 支持。除了實時分析外,SystemView 也支持“事后分析”模式:程序運行時將 trace 數據保存到目標板上的RAM 中,之后通過 MicroLink 讀取 trace 緩沖區內容進行回放分析,適合定位偶發問題或無法在線連接場景。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RTOS
    +關注

    關注

    24

    文章

    851

    瀏覽量

    121155
  • 可視化
    +關注

    關注

    1

    文章

    1262

    瀏覽量

    21851
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在Eclipse ThreadX RTOS中集成SystemView

    SEGGER實時軟件分析工具SystemView已經在ThreadX v6.4.2上進行了測試。SystemView從v3.60c版本支持Eclipse ThreadX(Azure RTOS
    的頭像 發表于 05-06 17:11 ?732次閱讀

    請問freertos可視化調試中打印任務信息是不是只可以打印一次?

    在freertos中,使用可視化調試打印任務消息,但是打印不全,還只能打印一次,使用IAR自帶的調試插件看,顯示可視化調試任務的堆棧頂全是a
    發表于 05-07 06:16

    可視化MES系統軟件

    管理層以圖表、圖像形式將過程控制數據、質量控制數據、實時更新的數據和歷史統計的數據可視化展示,讓管理者更直觀地管理生產現場。最后,可通過接口管理平臺實現與ERP,MES系統軟件,PDM,CAPP等系統信息
    發表于 11-30 19:55

    如何把AD中非可視化區域物件移到可視化區域?

    AD中非可視化區域物件怎么移到可視化區域???
    發表于 09-10 05:36

    可視化電子看板系統的崗位需求

    系統 是一個可視化管理的工具,讓管理人員更直觀的了解實時生產情況,控制了有些工序的生產速度和數量,不是傳統的生產得越多越好,使得庫存控制在一個能滿足客戶需求的合理水平,但并不是有些人道聽途說的零庫存。在
    發表于 10-19 20:07

    Python數據可視化

    Python數據可視化:網易云音樂歌單
    發表于 07-19 08:30

    TensorFlow TensorBoard可視化數據流圖

    TensorBoard:接下來,打開瀏覽器并輸入地址 http://localhost:6006/(或運行 TensorBoard 命令后收到的鏈接)。你會看到類似于圖 1 中的圖,頂部有很多標簽。Graphs(圖表)選項卡能將運算圖可視化:圖 1 運算圖
    發表于 07-22 21:26

    三維可視化的應用和優勢

    的整體態勢。  比如設備在偏僻區域(海下、深山、沙漠、分布全國各地等),可以實現無人檢測,無需消耗人力物力進行檢測,通過三維數據的分析可以直觀的探測出設備狀態和產能。  設備運行可視化:根據圖像
    發表于 12-02 11:52

    SystemView如何在RT-Thread上對系統進行調試分析?

    本文主要介紹 SystemView可視化分析工具,以及如何在 RT-Thread 上使用它對系統進行調試分析。
    發表于 03-30 07:39

    淺談基于RTOS系統開發調試的難題

    例,它可以實時記錄RTOS運行時的各種系統事件,例如任務的調度,任務與任務之間、任務與中斷之間的通信等,以此分析出系統在運行期間的行為,并通過圖形或文件
    發表于 04-28 13:28

    基于VSCode的嵌入式開發的可視化代碼調試方法分享

    ,經常會遇到問題不是那么明顯,不方便通過加打印的方式進行排查的問題,并且加打印排查的方式較為低效,使得調試過程極為痛苦。可視化調試效率一直比命令行調試要方便和快捷很多,而嵌入式開發由于
    發表于 12-14 07:54

    如何在Ubuntu下實現可視化代碼跟蹤調試

    目錄一、在Ubuntu下實現可視化代碼跟蹤調試1.1 安裝VSCode1.2 配置調試和編譯文件一、在Ubuntu下實現可視化代碼跟蹤調試1
    發表于 12-14 07:02

    如何調試嵌入式代碼?

    調試的?如何借助SEGGER Ozone 和SystemView 實現可視化實時監測跟蹤系統運行詳情的?
    發表于 12-17 06:32

    如何在項目中使用RTOS分析工具SystemView

    。因此RTOS應用的實時行為對于開發者而言并不是非常直觀的,此時就可以用到SystemView這樣的RTOS可視化分析工具來幫助分析應用的實
    發表于 07-05 14:00

    使用樹莓派Pico開發板制作實時音頻光譜圖可視化

    本期教程將會通過使用一塊帶有外置數字麥克風和 TFT LCD 顯示屏的樹莓派 Pico 開發板制作一個實時音頻光譜圖可視化器。有了它,你就可以將你周圍環境的實時聲音可視化表現出來!下圖
    的頭像 發表于 10-24 10:49 ?3271次閱讀
    使用樹莓派Pico開發板制作<b class='flag-5'>實時</b>音頻光譜圖<b class='flag-5'>可視化</b>器