首页 > 解决方案 > FreeRTOS 卡在 vListInsert 中

问题描述

我正在使用 FreeRTOS 10.0.1 并且遇到了一个非常棘手的问题,试图解决它好几天,让我的代码在 CC1310(Arm Cortex M3)上运行。我使用TI SDK并从I2C设备读取数据,第一次成功,第二次卡在vListInsert中,pxIterator->pxNext指向自己,所以for循环是无限的。

驱动程序正在等待 SemaphoreP_pend(),如果我设置断点,我可以看到帖子被调用,但内核只是卡住了。

我已将 SysTick 和 PendSV isr prio 设置为 7(最低)。

i2c 中断是优先级 6。

configMAX_SYSCALL_INTERRUPT_PRIORITY 设置为 1。

据我所知,没有堆栈溢出。

请帮忙,我该如何调试这个问题?

最好的问候雅各布

标签: freertoscortex-m

解决方案


这几乎肯定是中断优先级和列表损坏的问题。在您的情况下,中断优先级存储在前 3 位(因为有 3 个优先级)。所以 7 存储为 7 << 5 (11100000b) (如果你喜欢优先级 7 == 255,你可以用 1 填充低位)。这由 FreeRTOS 处理。

我怀疑发生的是优先级为 6 的 I2C 中断,不是 << 5,所以你有 00000110b 优先级为 0(最高,因为它的前 3 位)


推荐阅读