|
0 1 背景 客户反馈要在STM32U5A9上使用Zephyr RTOS,在测试sample/basic/threads例程时,系统无法启动,也没有任何log信息。解决此问题最好方法是调试代码,查看系统运行状态以及调用栈,找到卡死的位置进行分析处理。 0 2 Zephyr调试 Zephyr是一个开源的实时操作系统(RTOS),专为资源受限的设备和物联网(IoT)应用而设计。它由Linux基金会支持,旨在提供一个灵活、可扩展且高效的操作系统解决方案。Zephyr主要特点有:
2.1. west编译工程 1、进入例程目录:zephyr/samples/basic/threads 2、使用west工具编译: west build -p auto -d build -b stm32u5a9j_dk 2.2. 使用CubeIDE调试 打开CubeIDE,创建CMake工程,选择Project with existing CMake sources,点击Next。 Figure 1 创建工程
填写project name,然后选择源码目录(包含CMakeLists.txt与prj.conf文件) Figure 2 配置源码路径
点击Next,选择芯片型号后,完成工程创建。 Figure 3 设置芯片型号
接下来配置工程属性: 在C/C++ Build页,设置Generator为Ninja,在Other option栏,进行板的配置-DBOARD=stm32u5a9j_dk,保存后进行编译。 Figure 1 配置工程属性
再打开属性配置,切换到C/C++ General页,Preprocessor Include下GNU C 配置,选择CDT User Setting Entries,点击Add,添加autoconf.h头文件,保存配置。 Figure 2 添加头文件
进行调试配置,选择工程名称debug_threads,以及zephyr.elf应用文件,即可开始调试。 Figure 3 配置调试选项
比如要在init.c中打断点,如下图,可以在config_default/zephyr/kernel/CMakeFiles/kenel.dir/init.c.obj文件中展开,找到init.c源文件,进行断点设置,这样调试开始时就会停在断点处。 Figure 4 调试过程
0 3 问题解决 对samples/basic/threads工程进行调试,运行后出现异常,停下MCU查看调用栈后发现,U5A9J_DK板在运行此工程时,使用了MSIS并且使能了MSI PLL功能,代码执行过程中检查到LSE未使能,导致k_panic死机。 解决办法: 在U5A9J_DK板的设备树文件中,配置LSE使能 zephyr\boards\st\stm32u5a9j_dk\stm32u5a9j_dk.dts
这样修改后重新编译,工程运行正常。 0 4 小结 本文简要介绍了在STM32CubeIDE中调试Zephyr RTOS的方法,并在STM32U5A9J_DK板上结合samples/basic/threads工程进行调试,解决了工程无法启动的问题。在使用Zephyr RTOS过程中遇到其它问题时,也可以用STM32CubeIDE进行调试定位。 点击按钮下载《使用STM32CubeIDE调试Zephyr RTOS》原文档。 |
经验分享 | STM32CubeIDE 调试神技:条件断点与观察点,搞定长周期复现疑难杂症
STM32CubeIDE 2.0.0:解耦STM32Cube MX与优化后的项目工作流程
经验分享 | 基于STM32CubeIDE的指定存储话题
【亮点速览】同步升级工具链 + 快速重置按钮 + 增量烧录!STM32CubeIDE for Visual Studio Code开发工具更新
效率与探索之间:STM32CubeMX与STM32CubeAI试用有感
F429I-DISC1体验报告(4) 温度可视化动态图表的实现丨国庆开发板测评活动
在主机模式下使用STM32Cube HAL I2C驱动
【评论有奖】STM32CubeIDE 2.0版本要来了
F429I-DISC1体验报告(2) 按钮和弹窗GUI的简单交互设计丨国庆开发板测评活动
架构更新!STM32CubeIDE 2.0.0重磅发布,STM32CubeMX成独立工具(文末有奖)
微信公众号
手机版