我有一个带有 STM32F446 的项目,带有 RTX,3 个线程(主要 + 2 个由我声明)+ 当然是空闲线程。主线程在启动两个线程后进入等待状态,所以我只有两个线程在运行。RTX 已禁用循环。应用程序所做的是通过 SPI 与蓝牙模块通信。
我的问题是,有时,在 SPI 传输期间(由一个线程启动并在另一个线程中完成)MCU 崩溃到 UsageFault_Handler 并且其中一个线程(并不总是相同)显示为溢出。现在我已经阅读了有关如何调试硬故障以及未解决的问题,但问题是所有方法都依赖于 MSP/PSP 地址,对我来说 PSP 是 0x00000020。有人遇到过类似的事情吗?关于什么可能是错的任何想法?
LE:从那以后,我了解到该代码适用于 FreeRTOS 而不是 RTX。该代码使用临界区。我曾尝试对 RTX 的关键部分使用与 FreeRTOS(BASEPRI) 相同的实现,但我经常以 UsageFault 告终。我知道 RTX 在代码中广泛使用了 SVC。
是否应该以不同的方式实施关键部分?您是否知道 FreeRTOS 和 RTX 之间可能导致问题的任何其他差异?
后来编辑(已解决):事实证明问题与分配给 SysTick 的优先级有关。它首先被设置为应有的最低优先级,但是,一段代码在某处将 SysTick 设置为非常高的优先级。
谢谢!