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í)行。
原則上,高優(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)題。
多任務(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。
-
調(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)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
RTOS應(yīng)用中的優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題
嵌入式實(shí)時(shí)系統(tǒng)中的優(yōu)先級(jí)反轉(zhuǎn)是什么?
如何理解任務(wù)優(yōu)先級(jí)反轉(zhuǎn)?
干貨 | RTOS應(yīng)用中的優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題
嵌入式實(shí)時(shí)系統(tǒng)中的優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題怎么解決?
如何使用Tracealyzer理解多任務(wù)調(diào)度?
嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題的分析

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

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

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

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

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

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

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

評(píng)論