0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Tracealyzer調(diào)試Zephyr中的優(yōu)先級(jí)反轉(zhuǎn)

麥克泰技術(shù) ? 來(lái)源:麥克泰技術(shù) ? 2025-04-21 11:31 ? 次閱讀

Percepio Tracealyzer已經(jīng)在600多個(gè)支持Zephyr的開(kāi)發(fā)板上完成了驗(yàn)證,可以幫助開(kāi)發(fā)人員改進(jìn)Zephyr應(yīng)用的調(diào)試和性能分析。

Zephyr結(jié)構(gòu)良好的構(gòu)建系統(tǒng)和配置框架使得跨硬件平臺(tái)的調(diào)試和跟蹤變得更加容易。最新的測(cè)試表明,Tracealyzer與我們測(cè)試的649塊電路板中的617塊兼容。不兼容的主板大多有內(nèi)存限制(可用于跟蹤的內(nèi)存少于32KB),或者是需要額外主機(jī)編譯器配置的模擬系統(tǒng)。

開(kāi)發(fā)板列表:https://docs.zephyrproject.org/latest/boards/index.html#

對(duì)于Zephyr開(kāi)發(fā)者來(lái)說(shuō),如果你正在使用的開(kāi)發(fā)板已在支持列表中,那么現(xiàn)在就可以使用Tracealyzer在基于時(shí)間軸的直觀界面可視化系統(tǒng)運(yùn)行行為,包括線(xiàn)程執(zhí)行、CPU使用情況及內(nèi)核事件。

在Zephyr中使用Tracealyzer

為Zephyr設(shè)置Tracealyzer跟蹤很簡(jiǎn)單,在Zephyr應(yīng)用中啟用Tracealyzer快照跟蹤的步驟如下:

? 確保硬件有足夠的內(nèi)存。為了有效跟蹤,建議至少使用32KB。

? 修改Zephyr配置,在project.conf添加:

CONFIG_TRACING=y CONFIG_PERCEPIO_TRACERECORDER=y CONFIG_PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER=y CONFIG_PERCEPIO_TRC_START_MODE_START=y

? 如果內(nèi)存緊張,可以減少RingBuffer的大?。?/p>

CONFIG_PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER_SIZE = 5120

? 構(gòu)建并運(yùn)行應(yīng)用程序,Tracealyzer將收集分析數(shù)據(jù),后續(xù)可以分析這些數(shù)據(jù)了解系統(tǒng)行為。

有關(guān)更詳細(xì)的指南,可以查看Zephyr設(shè)置文檔:https://percepio.com/getstarted/latest/html/zephyr.html#using-the-syscall-extension-zephyr-3-4-0-and-later。

用Tracealyzer調(diào)試

Zephyr中的優(yōu)先級(jí)反轉(zhuǎn)

在像Zephyr這樣的實(shí)時(shí)系統(tǒng)中,一個(gè)常見(jiàn)的問(wèn)題是優(yōu)先級(jí)反轉(zhuǎn),因?yàn)榈蛢?yōu)先級(jí)的任務(wù)占用了高優(yōu)先級(jí)任務(wù)需要的資源導(dǎo)致高優(yōu)先級(jí)任務(wù)被阻塞。如果任務(wù)調(diào)度和同步行為不可見(jiàn),很難檢測(cè)到這個(gè)問(wèn)題。

診斷優(yōu)先級(jí)反轉(zhuǎn)示例

在一個(gè)基于Zephyr的應(yīng)用程序中,其中高優(yōu)先級(jí)的DataProcessingTask任務(wù)應(yīng)該立即運(yùn)行,但意外地延遲了。低優(yōu)先級(jí)的SensorTask持有互斥信號(hào)量,阻止了DataProcessingTask任務(wù)的執(zhí)行。

9de339bc-1c02-11f0-9310-92fbcf53809c.png

原則上,高優(yōu)先級(jí)任務(wù)(上圖的H)不應(yīng)該被低優(yōu)先級(jí)任務(wù)阻塞。在實(shí)踐中,某些設(shè)計(jì)決策無(wú)論可能會(huì)導(dǎo)致這種情況發(fā)生,這種情況被稱(chēng)為優(yōu)先級(jí)反轉(zhuǎn)。

通過(guò)Tracealyzer跟蹤調(diào)試

1 捕獲跟蹤數(shù)據(jù):運(yùn)行啟用了Tracealyzer跟蹤功能的應(yīng)用程序,收集系統(tǒng)執(zhí)行的快照信息。

2 分析執(zhí)行時(shí)間軸:在Tracealyzer中打開(kāi)跟蹤文件并查看任務(wù)執(zhí)行圖。

3 識(shí)別阻塞依賴(lài):使用Tracealyzer可視化工具查找DataProcessingTask任務(wù)正在等待的位置,并查看哪個(gè)低優(yōu)先級(jí)任務(wù)正在占用資源。

4 確認(rèn)優(yōu)先級(jí)反轉(zhuǎn):如果低優(yōu)先級(jí)任務(wù)(SensorTask)阻塞了高優(yōu)先級(jí)任務(wù)(DataProcessingTask),檢查是否啟用了優(yōu)先級(jí)繼承機(jī)制。

5 解決問(wèn)題

啟用互斥信號(hào)量的優(yōu)先級(jí)繼承(在prj.conf中設(shè)置CONFIG_PRIORITY_CEILING=y)。

優(yōu)化任務(wù)調(diào)度,減少阻塞時(shí)間。

考慮分解長(zhǎng)時(shí)間運(yùn)行的低優(yōu)先級(jí)任務(wù)。

使用Tracealyzer,這種類(lèi)型的分析變得簡(jiǎn)單明了,幫助用戶(hù)快速查明和解決優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題。

9e2a677e-1c02-11f0-9310-92fbcf53809c.png

多任務(wù)軟件系統(tǒng)在運(yùn)行時(shí)的實(shí)際行為,取決于許多因素,比如任務(wù)和中斷的時(shí)間、它們的相互作用和輸入。憑借Zephyr的強(qiáng)大架構(gòu)和我們驗(yàn)證的開(kāi)發(fā)板支持,通過(guò)Tracealyzer跟蹤工具,用戶(hù)可以更好地了解Zephyr系統(tǒng)的運(yùn)行時(shí)世界。

麥克泰技術(shù)代理Tracealyzer,具有豐富的RTOS分析軟件與調(diào)試工具使用方面的知識(shí)和經(jīng)驗(yàn),歡迎咨詢(xún)info@bmrtech.com。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    607

    瀏覽量

    34530
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5532

    瀏覽量

    102428
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1656

    瀏覽量

    49898
  • Zephyr
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    6235

原文標(biāo)題:使用Tracealyzer跟蹤Zephyr調(diào)試

文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RTOS應(yīng)用優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題

    在嵌入式系統(tǒng),如果使用基于優(yōu)先級(jí)調(diào)度算法的RTOS,系統(tǒng)可能發(fā)生優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象。優(yōu)先級(jí)
    發(fā)表于 12-14 11:00 ?1500次閱讀

    嵌入式實(shí)時(shí)系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)是什么?

    使具有優(yōu)先級(jí)的進(jìn)程先于高優(yōu)先級(jí)的進(jìn)程執(zhí)行,導(dǎo)致系統(tǒng)的崩潰。這就是所謂的優(yōu)先級(jí)反轉(zhuǎn)(PriorityInversion)。
    發(fā)表于 09-17 07:16

    如何理解任務(wù)優(yōu)先級(jí)反轉(zhuǎn)

    嵌入式實(shí)時(shí)操作系統(tǒng)USCOSii第四章 的 圖4-15有描述 關(guān)于任務(wù)優(yōu)先級(jí)反轉(zhuǎn)示意圖:有疑問(wèn)就是為什么 在C運(yùn)行時(shí)候 A B都在等待,卻B獲得CPU的運(yùn)行權(quán)限?
    發(fā)表于 11-04 03:57

    干貨 | RTOS應(yīng)用優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題

    )應(yīng)用優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象,如何最小化優(yōu)先級(jí)反轉(zhuǎn)的影響,及如何在設(shè)計(jì)避免
    發(fā)表于 03-09 15:00

    嵌入式實(shí)時(shí)系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題怎么解決?

    嵌入式實(shí)時(shí)系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題怎么解決?
    發(fā)表于 04-27 06:44

    如何使用Tracealyzer理解多任務(wù)調(diào)度?

    調(diào)試器視圖的補(bǔ)充。我們今天來(lái)了解一下如何通過(guò)Tracealyzer記錄的數(shù)據(jù)獲取任務(wù)優(yōu)先級(jí)及執(zhí)行時(shí)間相關(guān)的信息。優(yōu)先級(jí)決定何時(shí)調(diào)度大多數(shù)RTOS使用固定
    發(fā)表于 12-17 16:01

    嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題的分析

    摘要: 本文介紹了嵌入式系統(tǒng)任務(wù)調(diào)度優(yōu)先級(jí)反轉(zhuǎn)的一個(gè)實(shí)例。通過(guò)實(shí)例的討論對(duì)嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)有一個(gè)更深入的了解,有助于在編程
    發(fā)表于 03-11 12:18 ?1013次閱讀
    嵌入式系統(tǒng)<b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>反轉(zhuǎn)</b>問(wèn)題的分析

    UCOS擴(kuò)展例程-UCOSIII優(yōu)先級(jí)反轉(zhuǎn)

    UCOS擴(kuò)展例程- UCOSIII優(yōu)先級(jí)反轉(zhuǎn)
    發(fā)表于 12-14 17:24 ?13次下載

    關(guān)于嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)的原因及解決方法探討

    的任務(wù)。但在實(shí)際開(kāi)發(fā),由于任務(wù)間資源共享,信號(hào)量及中斷的引入,往往會(huì)出現(xiàn)高優(yōu)先級(jí)任務(wù)被低優(yōu)先級(jí)任務(wù)長(zhǎng)時(shí)間阻塞或阻塞一段不確定時(shí)間的現(xiàn)象,即所謂優(yōu)先級(jí)
    發(fā)表于 11-01 16:13 ?5633次閱讀
    關(guān)于嵌入式系統(tǒng)<b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>反轉(zhuǎn)</b>的原因及解決方法探討

    嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)的產(chǎn)生原因及2種解決方案

    ,反而使具有優(yōu)先級(jí)的進(jìn)程先于高優(yōu)先級(jí)的進(jìn)程執(zhí)行,導(dǎo)致系統(tǒng)的崩潰。這就是所謂的優(yōu)先級(jí)反轉(zhuǎn)(Priority Inversion)。
    發(fā)表于 03-13 09:11 ?4203次閱讀
    嵌入式系統(tǒng)<b class='flag-5'>中</b><b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>反轉(zhuǎn)</b>的產(chǎn)生原因及2種解決方案

    uC/OS-II學(xué)習(xí)筆記——優(yōu)先級(jí)反轉(zhuǎn)優(yōu)先級(jí)繼承機(jī)制

    優(yōu)先級(jí)反轉(zhuǎn),是指某同步資源被較低優(yōu)先級(jí)的進(jìn)程/線(xiàn)程所擁有,較高優(yōu)先級(jí)的進(jìn)程/線(xiàn)程競(jìng)爭(zhēng)該同步資源未獲得該資源,而使得較高優(yōu)先級(jí)進(jìn)程/線(xiàn)程反而推
    發(fā)表于 02-09 10:33 ?2次下載
    uC/OS-II學(xué)習(xí)筆記——<b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>反轉(zhuǎn)</b>與<b class='flag-5'>優(yōu)先級(jí)</b>繼承機(jī)制

    中斷優(yōu)先級(jí)處理的原則及配置 搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的區(qū)別

    首先我們需要知道什么是中斷優(yōu)先級(jí):中斷優(yōu)先級(jí)是CPU響應(yīng)中斷的先后順序
    的頭像 發(fā)表于 05-18 15:10 ?3w次閱讀
    中斷<b class='flag-5'>優(yōu)先級(jí)</b>處理的原則及配置 搶占<b class='flag-5'>優(yōu)先級(jí)</b>和響應(yīng)<b class='flag-5'>優(yōu)先級(jí)</b>的區(qū)別

    具有固定優(yōu)先級(jí)調(diào)度程序RTOS的優(yōu)先級(jí)倒置

      優(yōu)先級(jí)繼承并不能真正治愈優(yōu)先級(jí)倒置,它只是在某些情況下將其影響最小化。硬實(shí)時(shí)應(yīng)用程序仍應(yīng)仔細(xì)設(shè)計(jì),以便一開(kāi)始就不會(huì)發(fā)生優(yōu)先級(jí)反轉(zhuǎn)。
    的頭像 發(fā)表于 06-22 15:45 ?1525次閱讀
    具有固定<b class='flag-5'>優(yōu)先級(jí)</b>調(diào)度程序RTOS的<b class='flag-5'>優(yōu)先級(jí)</b>倒置

    Free RTOS的優(yōu)先級(jí)翻轉(zhuǎn)

    優(yōu)先級(jí)翻轉(zhuǎn)簡(jiǎn)介:就是高優(yōu)先級(jí)的任務(wù)運(yùn)行起來(lái)的效果好像成了低優(yōu)先級(jí),而低優(yōu)先級(jí)比高優(yōu)先級(jí)先運(yùn)行;
    的頭像 發(fā)表于 02-10 15:31 ?1614次閱讀
    Free RTOS的<b class='flag-5'>優(yōu)先級(jí)</b>翻轉(zhuǎn)

    什么是優(yōu)先級(jí)反轉(zhuǎn)

    ,才能運(yùn)行TaskC,TaskC釋放信號(hào)量之后高優(yōu)先級(jí)的TaskA才能執(zhí)行??雌饋?lái)高優(yōu)先級(jí)的TaskA還不如低優(yōu)先級(jí)的TaskC優(yōu)先級(jí)高,這就叫做優(yōu)
    的頭像 發(fā)表于 04-24 13:01 ?2704次閱讀
    什么是<b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>反轉(zhuǎn)</b>

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品