前面幾期中,我們著重給大家介紹了如何搭建Zephyr開發(fā)環(huán)境,以及如何添加自己的應(yīng)用代碼。今天讓我們開始一個(gè)新的篇章:Zephyr調(diào)試技巧以及介紹Ozone進(jìn)行Zephyr的調(diào)試分享。
Zephyr調(diào)試技巧
printk調(diào)試法:通過使用prink來打印一些輔助調(diào)試信息,操作簡(jiǎn)單,適合于基礎(chǔ)的profiling,但是可能會(huì)導(dǎo)致時(shí)序問題,尤其是針對(duì)在中斷上下文的處理中。還有針對(duì)于logging系統(tǒng),zephyr提供了不同的配置選項(xiàng),用戶可以根據(jù)需要進(jìn)行配置。
https://docs.zephyrproject.org/la?test/services/logging/index.html
“IO” Toggle: 通過調(diào)用Zephyr的GPIO API,通過觀察引腳的翻轉(zhuǎn)情況進(jìn)行調(diào)試
源碼級(jí)Debug:盡管Zephyr本身沒有調(diào)試IDE的支持,但由于Zephyr構(gòu)建系統(tǒng)最終會(huì)生成elf格式的文件,我們就可以現(xiàn)有調(diào)試工具進(jìn)行調(diào)試
運(yùn)行虛擬環(huán)境:由于Zephyr對(duì)POSIX API的支持,使得Zephyr源碼其實(shí)可以運(yùn)行在例如PC端,那么就可以讓我們直接在PC端進(jìn)行應(yīng)用的開發(fā),無需下載到目標(biāo)板上。
嘗試關(guān)閉優(yōu)化:由于編譯器優(yōu)化,往往源代碼順序會(huì)被重新排序,導(dǎo)致單步調(diào)試的困難,我們可以通過關(guān)閉優(yōu)化來解決:
CONFIG_NO_OPTIMIZATIONS=y
不過,有時(shí)我們會(huì)發(fā)現(xiàn)關(guān)閉優(yōu)化后,某些能夠運(yùn)行的程序會(huì)突然出現(xiàn)hardfault。最大問題可能是由于關(guān)閉了優(yōu)化選項(xiàng),導(dǎo)致某些代碼的棧使用量增加觸發(fā)棧溢出異常。一般來說,我們可以通過增加系統(tǒng)棧或是中斷棧的大小來解決:
CONFIG_MAIN_STACK_SIZE=8192 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192 CONFIG_ISR_STACK_SIZE=2048
通過打印ram或是rom占用情況對(duì)代碼進(jìn)行分析:
west build -t ram_report west build -t rom_report
源碼調(diào)試工具推薦:
a)原生支持:
b) MCUXPresso VS Code插件:
https://github.com/nxp-mcuxpresso/vscode-for-mcux/wiki/Debug
c) Cortex-Debug插件:
https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug
d) 其他,例如Segger Ozone等
使用Ozone進(jìn)行Zephyr調(diào)試
Ozone是個(gè)啥?先來個(gè)簡(jiǎn)短的自我介紹吧:
Ozone是一款由SEGGER公司開發(fā)的專業(yè)嵌入式應(yīng)用程序調(diào)試和性能分析工具,Ozone是一個(gè)獨(dú)立的圖形調(diào)試器,支持多種單片機(jī)架構(gòu),包括Arm Cortex-M、Renesas RX、NXP LPC等。Ozone可以與任何為其輸出生成Elf/Dwarf調(diào)試信息的工具鏈一起使用,例如GCC、Clang、ARM、IAR等編譯器。
Ozone提供了豐富的調(diào)試功能,如程序下載、單步執(zhí)行、變量更新窗口、匯編指令調(diào)試、芯片寄存器查看、斷點(diǎn)設(shè)置等。
1. 源碼級(jí)調(diào)試:Ozone支持C/C++源碼級(jí)的調(diào)試和匯編指令的調(diào)試,用戶可以在調(diào)試過程中直接查看和編輯源代碼。
2. 多文件格式支持:Ozone支持ELF或兼容文件(*.elf, .out, .axf)、Motorola S-record文件(.srec, .mot)、Intel hex文件(.hex)以及二進(jìn)制數(shù)據(jù)文件(.bin)。
3. 實(shí)時(shí)終端和Flash Breakpoints:Ozone可以直接使用J-Link內(nèi)置的實(shí)時(shí)終端和無限Flash斷點(diǎn)功能。
4. 腳本化項(xiàng)目文件:Ozone提供腳本化的項(xiàng)目文件,允許用戶通過腳本自動(dòng)配置和執(zhí)行調(diào)試任務(wù)。
5. 自定義界面:Ozone的用戶界面完全可定制,用戶可以根據(jù)需要調(diào)整布局和功能。
6. 系統(tǒng)變量編輯器:Ozone提供了一個(gè)系統(tǒng)變量編輯器,方便用戶修改和調(diào)試系統(tǒng)級(jí)別的變量。
7. 高級(jí)內(nèi)存窗口:Ozone的內(nèi)存窗口支持保存、加載和填充操作,用戶可以方便地查看和修改內(nèi)存內(nèi)容。
開發(fā)環(huán)境:
Ozone適用于多種開發(fā)環(huán)境,可以在Windows、Linux、macOS等平臺(tái)上運(yùn)行。
集成工具:Ozone通常與J-Link調(diào)試器配合使用,但也可以與其他支持SWD和JTAG調(diào)試的硬件調(diào)試器一起使用。
總的來說,Ozone是一款功能強(qiáng)大且靈活的嵌入式應(yīng)用程序調(diào)試和性能分析工具,適用于各種復(fù)雜的調(diào)試場(chǎng)景。盡管在某些方面存在一些不足,但其豐富的功能和高度的可定制性使其成為嵌入式開發(fā)者的重要工具之一。
接下來讓我們看看怎么新建一個(gè)Ozone調(diào)試工程,并添加我們的Zephyr.elf,詳見下面小視頻:
為了能夠更好的支持Zephyr OS的調(diào)試,我們還需要在工程配置文件中添加Zephyr調(diào)試插件,打開.jdebug尾綴的Ozone工程文件,添加如下內(nèi)容到OnProjectLoad函數(shù)中:Project.SetOSPlugin("ZephyrPlugin");
至此,我們就完成了Ozone的全部配置工作,相信大家有了Ozone之后,都能得心應(yīng)手!
NXP
恩智浦致力于打造安全的連接和基礎(chǔ)設(shè)施解決方案,為智慧生活保駕護(hù)航。
-
恩智浦
+關(guān)注
關(guān)注
14文章
5956瀏覽量
114092 -
Zephyr
+關(guān)注
關(guān)注
0文章
35瀏覽量
6253
原文標(biāo)題:Zephyr調(diào)試,你需要掌握這些技巧!
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
恩智浦解讀Zephyr log系統(tǒng)的使用 Zephyr的shell和log功能介紹

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

《電子發(fā)燒友電子設(shè)計(jì)周報(bào)》聚焦硬科技領(lǐng)域核心價(jià)值 第3期:2025.03.10--2025.03.14
恩智浦用于USB TypeC & Pd 的負(fù)載開關(guān)介紹
2018恩智浦未來科技峰會(huì)
MIMXRT595-EVK是否可以在SRAM中運(yùn)行hello_world zephyr示例?
恩智浦發(fā)布 LPCXpresso 6
恩智浦助推本土COG創(chuàng)新設(shè)計(jì)
高通以470億美元總額收購恩智浦_恩智浦有何實(shí)力?
OpenHarmony生態(tài)論壇:恩智浦在OpenHarmony的機(jī)遇與挑戰(zhàn)

恩智浦官網(wǎng)
恩智浦半導(dǎo)體公司
恩智浦智能家電創(chuàng)新方案一文看盡 恩智浦智能家電技術(shù)日給你答案

評(píng)論