freertos - 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。
据我所知,没有堆栈溢出。
请帮忙,我该如何调试这个问题?
最好的问候雅各布
解决方案
这几乎肯定是中断优先级和列表损坏的问题。在您的情况下,中断优先级存储在前 3 位(因为有 3 个优先级)。所以 7 存储为 7 << 5 (11100000b) (如果你喜欢优先级 7 == 255,你可以用 1 填充低位)。这由 FreeRTOS 处理。
我怀疑发生的是优先级为 6 的 I2C 中断,不是 << 5,所以你有 00000110b 优先级为 0(最高,因为它的前 3 位)
推荐阅读
- python - 将数字拆分为其中的素数
- javascript - 快速响应操作以将字符串发送到客户端
- python - 查找多个相同数字的立即数的优化或最佳方法
- excel - 如何自动过滤许多列?
- nginx - nginx 速率限制,某些路径除外
- python - Pandas:逐个元素合并两个列表列
- microsoft-graph-api - Microsoft 图形 API:/me/drive/root/search - 没有找到文件的路径
- html - 段落的子元素应用 CSS 后,标签未下推至 html 元素下方
- css - 对齐双重包裹的嵌套 flex
- python - 当芹菜块中的任务失败时继续