• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式性能指標竟藏著這些秘密,你了解幾個?

04/14 10:40
693
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是雜燴君。

這次給大家分享關(guān)于嵌入式中性能指標的一些知識。嵌入式軟件性能指標是衡量嵌入式系統(tǒng)性能優(yōu)劣的重要依據(jù)。

各行業(yè),比較通用的嵌入式軟件性能指標有哪些?

嵌入式軟件的性能指標通常圍繞實時性和資源效率展開。以下是最重要的幾點指標:

一、實時性

實時性指的不是“快”,而是“準時”——硬實時系統(tǒng)允許速度慢,但必須守時。

這個指標直接影響到系統(tǒng)的交互性,這個指標航空航天、工業(yè)自動化等領域至關(guān)重要。

例如,在自動駕駛系統(tǒng)中,車輛對突發(fā)狀況的響應時間必須足夠短,以確保安全駕駛。一般來說,關(guān)鍵任務的響應時間需要控制在毫秒級甚至微秒級。

1、實時性檢測工具

(1)Percepio View

Percepio View?是一款基于 Percepio Tracealyzer 的免費追蹤工具,用作?FreeRTOS?應用程序的監(jiān)控,便于調(diào)試和驗證。

https://www.freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/05-FreeRTOS_plus_Trace/01-Percepio_View

Percepio View 可以與傳統(tǒng)調(diào)試器(如ST-Link、J-Link)結(jié)合使用,通過任務和 ISR 實時執(zhí)行情況 可視化的方式對調(diào)試器加以補充。

這些任務包括 FreeRTOS API 調(diào)用和您自己的“用戶事件”。 它不需要任何特殊的追蹤硬件。

(2)SEGGER SystemView

SEGGER SystemView是一個實時記錄和可視化工具,用于分析和描述嵌入式系統(tǒng)的行為。

它提供了對運行時行為的深入了解,超越了傳統(tǒng)調(diào)試器的功能。

SystemView 可免費用于非商業(yè)用途,且功能不受限制。

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

SystemView非常適合具有多線程和中斷的復雜系統(tǒng),它可以幫助開發(fā)人員確保他們的系統(tǒng)按預期執(zhí)行,識別低效率,并發(fā)現(xiàn)意外的交互或資源沖突。

通過調(diào)試接口記錄來自嵌入式系統(tǒng)的監(jiān)控數(shù)據(jù),SystemView詳細地可視化任務、中斷和軟件定時器的執(zhí)行情況。

二、資源使用效率

這個指標主要衡量系統(tǒng)硬件資源(如 CPU、內(nèi)存)的使用情況。

通過監(jiān)測資源利用率,可以了解軟件對硬件資源的需求和占用程度,避免資源過度占用或浪費。

例如,如果 CPU 利用率長期過高,可能導致系統(tǒng)響應變慢甚至崩潰;內(nèi)存利用率過高則可能引發(fā)內(nèi)存泄漏等問題。

CPU使用率定義為CPU在某個時間段內(nèi)用于執(zhí)行計算任務的時間占總時間的比例。具體來說,CPU使用率 = 1 - 空閑時間/總CPU時間。

合理的資源利用率可以使系統(tǒng)在有限的硬件資源下穩(wěn)定運行,并為未來的功能擴展預留一定的資源空間。

1、CPU 使用分析工具

(1)SEGGER SystemView

SEGGER SystemView配合 J-Link,捕獲任務切換和中斷事件,分析 CPU 占用熱點,支持 FreeRTOS、Zephyr 等 RTOS。

(2)FreeRTOS 運行時統(tǒng)計功能(內(nèi)置)

https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/08-Run-time-statistics

在FreeRTOS中通過 config GENERATE_RUN_TIME_STATS配置啟用,統(tǒng)計每個任務的 CPU 占用率及執(zhí)行時間。

無需額外工具,直接集成在 FreeRTOS 中,適合快速定位高負載任務。

(3)perf(Linux 內(nèi)置工具)

perf是一個基于Linux內(nèi)核的性能事件子系統(tǒng),可以收集各種性能數(shù)據(jù),如CPU使用率、內(nèi)存訪問、函數(shù)調(diào)用等。

使用命令:

perf record -e cpu-clock -g ./embedded_app ?# 記錄 CPU 事件
perf report ?# 生成熱點函數(shù)分析報告

2、 內(nèi)存使用分析工具

(1)heap-monitoring

heap-monitoring是SEGGER SystemView中的應用程序中的動態(tài)存儲監(jiān)控工具。

在應用程序使用C或C++堆、多個自定義堆或RTOS提供的內(nèi)存池對象,可以使用heap-monitoring跟蹤這些對象的使用情況,分析它們的使用模式,評估堆上的負載、識別潛在的內(nèi)存泄漏、跟蹤內(nèi)存峰值使用情況等的格式顯示收集到的信息。

使用方式:

使用SEGGER_SYSVIEW_HeapDefine定義一次堆的特征。

并使用SEGGER_SYSVIEW_HeapAllocSEGGER_SYSVIEW_HeapFree監(jiān)視它的使用情況。

(2)FreeRTOS 堆棧溢出檢測(內(nèi)置)

在FreeRTOS中通過?config CHECK_FOR_STACK_OVERFLOW?配置檢測任務堆棧溢出。

實時監(jiān)控任務棧使用,防止內(nèi)存越界導致的系統(tǒng)崩潰。

(3)Valgrind

Valgrind是一款用于內(nèi)存調(diào)試、內(nèi)存泄漏檢測以及性能分析的軟件開發(fā)工具。

Valgrind工具包包含多個工具:

其中Valgrind Massif工具是堆棧分析器。堆棧分析器,它能測量程序在堆棧中使用了多少內(nèi)存,告訴我們堆塊,堆管理塊和棧的大小。

Valgrind Massif能幫助我們減少內(nèi)存的使用,在帶有虛擬內(nèi)存的現(xiàn)代系統(tǒng)中,它還能夠加速我們程序的運行,減少程序停留在交換區(qū)中的幾率。

Valgrind由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成。

其基于仿真方式對程序進行調(diào)試,它先于應用程序獲取實際處理器的控制權(quán),并在實際處理器的基礎上仿真一個虛擬處理器,并使應用程序運行于這個虛擬處理器之上,從而對應用程序的運行進行監(jiān)視。

應用程序并不知道該處理器是虛擬的還是實際的,已經(jīng)編譯成二進制代碼的應用程序并不用重新進行編譯,Valgrind 直接解釋二進制代碼使得應用程序基于它運行,從而能夠檢查內(nèi)存操作時可能出現(xiàn)的錯誤。

所以在Valgrind下運行的程序運行速度要慢得多,而且使用的內(nèi)存要多得多。因此,最好在性能好的機器上使用Valgrind,并且是在開發(fā)調(diào)試階段使用。

三、代碼執(zhí)行效率

代碼執(zhí)行效率直接影響系統(tǒng)的?可靠性、實時性、功耗?和?成本。

    圖像處理算法中,綜合考慮資源利用平衡,改用查表法進行效率提升。通信協(xié)議解析中,減少冗余字符串操作函數(shù)調(diào)用次數(shù)。

1、代碼執(zhí)行效率檢測工具

(1)gprof

GNU gprof,這是一個經(jīng)典的性能分析工具,集成在GCC中,只需添加編譯選項即可使用,適用于Linux/MPU 或交叉編譯環(huán)境(如 ARM Cortex-A 系列),定位算法或邏輯瓶頸。

https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html

它能夠顯示每個函數(shù)的調(diào)用次數(shù)和執(zhí)行時間,幫助定位熱點代碼。對于嵌入式開發(fā),可以在交叉編譯環(huán)境中使用。

編譯代碼時啟用分析

gcc -pg -o my_app my_code.c

生成分析報告

gprof my_app gmon.out > report.txt

四、其他指標

可靠性:嵌入式系統(tǒng),尤其是應用于關(guān)鍵領域(如醫(yī)療設備、交通控制等)的軟件,可靠性是至關(guān)重要的指標。軟件需要具備容錯能力、錯誤恢復能力和穩(wěn)定性,以應對各種可能出現(xiàn)的異常情況,確保系統(tǒng)持續(xù)、穩(wěn)定地運行。

功耗低功耗設計可以延長設備的使用時間,減少充電頻率,提高用戶體驗。同時,對于大規(guī)模部署的物聯(lián)網(wǎng)設備,降低功耗還可以降低運營成本和對環(huán)境的影。

可預測性:確保所有任務在任意負載下均滿足截止時間(硬實時系統(tǒng)的核心)。

通信吞吐量:在涉及網(wǎng)絡或總線(如CAN、Ethernet)的系統(tǒng)中,數(shù)據(jù)吞吐和延遲是關(guān)鍵。

工具鏈影響編譯器優(yōu)化級別、調(diào)試代碼(如斷言)對性能的影響需在發(fā)布版本中評估。

要是這篇文章給你帶來了新啟發(fā),動動手指點個在看/轉(zhuǎn)發(fā)唄。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本公眾號專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學習筆記,同時,公眾號內(nèi)包含大量的學習資源。歡迎關(guān)注,一同交流學習,共同進步!