在FreeRTOS中,如果想在高优先级的中断(freertos不能管理的中断中)内使

🔍 溯源 ✍️ Jack | 📅 2024-10-07 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/FreeRTOS #技术/中断 #技术/任务间通信 #质量/普通

原帖 | Jack | 2024-10-07 20:35 | 👍0 | 阅读约1

在FreeRTOS中,如果想在高优先级的中断(freertos不能管理的中断中)内使用队列这些FreeRTOS的API怎么办?

如果要在这种中断内使用队列这些API,可以使用隐式调用,即:你在这些FreeRTOS无法管理的中断中通过悬起一个FreeRTOS能够管理的中断(NVIC_SetPendingIRQ(LowPriorityIRQn);),然后在这个FreeRTOS能够管理的中断里面去调用FreeRTOS的API,这样可以保证RTOS的内部共享数据(队列等)是安全的。不能直接在RTOS不能管理的中断里面调用这些类似队列的API是因为这些共享数据在写入时,都是要进临界区的,如果你用RTOS无法管理的中断去写这些队列,那么就会破坏RTOS内部的共享数据(比如队列)一致性,可能你正在写入数据,但是高优先级中断来了,直接就临时插入了一个数据,这个是有问题的。


相关笔记