在完成一段程序后,開(kāi)發(fā)者往往還會(huì)面臨一系列關(guān)鍵問(wèn)題:
我的代碼究竟占用了多少Flash/RAM空間?
當(dāng)前任務(wù)實(shí)際使用了多少堆棧(Stack)?
所分配的內(nèi)存是否充足?是否存在潛在的堆棧溢出風(fēng)險(xiǎn)?
可以說(shuō),代碼編寫(xiě)只是項(xiàng)目開(kāi)發(fā)的起點(diǎn),而隨之而來(lái)的資源分析與性能調(diào)優(yōu)才是確保系統(tǒng)穩(wěn)定可靠的關(guān)鍵環(huán)節(jié)。
為了幫助開(kāi)發(fā)者更高效地解決這些問(wèn)題,本文將基于Zephyr實(shí)時(shí)操作系統(tǒng),為大家介紹幾種常用且實(shí)用的資源分析方法,助力更精準(zhǔn)地進(jìn)行嵌入式系統(tǒng)調(diào)優(yōu)。
Zephyr RTOS提供了一系列優(yōu)化工具,用于分析代碼的ROM、RAM和堆棧使用情況。這些工具可以幫助開(kāi)發(fā)者優(yōu)化固件大小、提高執(zhí)行效率,并確保系統(tǒng)在資源受限的設(shè)備上穩(wěn)定運(yùn)行。
1. 內(nèi)存與存儲(chǔ)分析工具
首先是Zephyr原生自帶的一些小工具,Zephyr通過(guò)構(gòu)建系統(tǒng)提供了多個(gè)構(gòu)建選項(xiàng),用于用戶來(lái)檢查和分析最終生成的固件映像中的資源占用情況,我們可以在編譯鏡像時(shí)添加這些選項(xiàng)來(lái)產(chǎn)生對(duì)應(yīng)的報(bào)告。
1). rom_report-ROM使用分析:列出所有占用ROM的符號(hào)及其大小:
使用方法:
westbuild -t rom_report
輸出示例:
Memoryregion Used Size Region Size %age Used FLASH: 45678B 512KB 8.72% SRAM: 12345B 64KB 18.84%
2).ram_report-RAM使用分析:顯示RAM中的變量和數(shù)據(jù)結(jié)構(gòu)占用情況:
使用方法:
westbuild -t ram_report
3).stack_usage-堆棧使用分析:計(jì)算每個(gè)線程的最壞情況堆棧使用量 (需啟用CONFIG_STACK_USAGE):
在工程配置中打開(kāi)控制宏,一般是prj.conf:
CONFIG_STACK_USAGE=y
使用方法:
westbuild -t stack_usage2. Puncover-可視化代碼占用分析
Puncover是一個(gè)第三方工具,用于在Web界面中可視化代碼的ROM、RAM和堆棧使用情況。
安裝與使用:
1).安裝Puncover:
| pip3 install git+https://github.com/HBehrens/puncover -user |
2).構(gòu)建并啟動(dòng)Puncover:
|
west build -b reel_board samples/hello_world west build -t puncover |
3).訪問(wèn)Web界面:
-工具會(huì)啟動(dòng)一個(gè)本地Web服務(wù)器(默認(rèn)http://localhost:5000)
-可瀏覽文件,查看符號(hào)占用情況
3. 其他優(yōu)化相關(guān)工具
1).pahole-結(jié)構(gòu)體優(yōu)化:分析數(shù)據(jù)結(jié)構(gòu)的內(nèi)存布局,優(yōu)化結(jié)構(gòu)體以減少填充(padding)浪費(fèi):
| west build -t pahole |
2).size-固件大小分析:顯示.elf文件的段(text/data/bss)大小:
| arm-none-eabi-size build/zephyr/zephyr.elf |
4.優(yōu)化建議
1). 啟用編譯器優(yōu)化:使用-ffunction-sections和-fdata-sections配合-gc-sections移除未使用的代碼。打開(kāi)配置開(kāi)關(guān):
| CONFIG_LINKER_GC_SECTIONS=y |
2).減少日志影響:
-使用CONFIG_LOG_MODE_DEFERRED提升性能
-調(diào)整日志級(jí)別:
| CONFIG_LOG_DEFAULT_LEVEL=2#僅WARN及以上 |
5.總結(jié)
| 工具名稱 | 用途 | 適用場(chǎng)景 |
|---|---|---|
| rom_report | 分析 Flash 占用情況 | 優(yōu)化固件大小 |
| ram_report | 分析 RAM 變量占用 | 排查內(nèi)存溢出 |
| stack_usage | 檢查線程堆棧使用情況 | 防止堆棧溢出 |
| puncover | 可視化代碼空間占用 | 深度優(yōu)化關(guān)鍵代碼模塊 |
| pahole | 優(yōu)化結(jié)構(gòu)體內(nèi)存布局 | 減少結(jié)構(gòu)體內(nèi)存浪費(fèi) |
借助Zepyhr工具,開(kāi)發(fā)者可以在資源受限的嵌入式系統(tǒng)中更高效地開(kāi)展開(kāi)發(fā)工作,從而精準(zhǔn)掌握系統(tǒng)資源使用情況,持續(xù)優(yōu)化代碼結(jié)構(gòu),提高運(yùn)行效率并有效降低內(nèi)存占用。充分利用這些分析手段,將使我們的應(yīng)用更加穩(wěn)健、可靠,也讓嵌入式開(kāi)發(fā)的每一行代碼都發(fā)揮更大價(jià)值。
-
嵌入式
+關(guān)注
關(guān)注
5195文章
20306瀏覽量
332003 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7386瀏覽量
129066 -
RTOS
+關(guān)注
關(guān)注
25文章
866瀏覽量
122782
原文標(biāo)題:解鎖Zephyr深度調(diào)優(yōu)能力:帶你看清代碼每一字節(jié)
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
實(shí)時(shí)操作系統(tǒng)和分時(shí)操作系統(tǒng)的區(qū)別
詳解實(shí)時(shí)操作系統(tǒng)和非實(shí)時(shí)操作系統(tǒng)
物聯(lián)網(wǎng)有哪些開(kāi)源實(shí)時(shí)操作系統(tǒng)?
BenOS實(shí)時(shí)操作系統(tǒng)解密
Zephyr物聯(lián)網(wǎng)操作系統(tǒng)模塊化內(nèi)核設(shè)計(jì)帶來(lái)完美體驗(yàn)
對(duì)實(shí)時(shí)操作系統(tǒng)特性的討論
如何使用物聯(lián)網(wǎng)操作系統(tǒng)Zephyr實(shí)現(xiàn)“連續(xù)集成”開(kāi)源軟件的詳細(xì)說(shuō)明
實(shí)時(shí)操作系統(tǒng)的特點(diǎn)_實(shí)時(shí)操作系統(tǒng)的組成
實(shí)時(shí)操作系統(tǒng)和非實(shí)時(shí)操作系統(tǒng)的區(qū)別
歐拉(openEuler)Summit 2021:基于AI的操作系統(tǒng)性能調(diào)優(yōu)引擎
openEuler Summit開(kāi)發(fā)者峰會(huì):基于AI的操作系統(tǒng)性能調(diào)優(yōu)引擎A-Tune
實(shí)時(shí)操作系統(tǒng)
瑞薩正式加入Zephyr項(xiàng)目,攜手共建開(kāi)源實(shí)時(shí)操作系統(tǒng)新生態(tài)
帶你認(rèn)識(shí)實(shí)時(shí)操作系統(tǒng)(rtos)
解鎖Zephyr實(shí)時(shí)操作系統(tǒng)深度調(diào)優(yōu)能力
評(píng)論