原帖 | Jack | 2025-02-20 00:57 | 👍0 | 阅读约1
老师,低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS的API函数,请问这里为什么中断等级更高的反而不能调用,中断等级更低的能够调用,不应该优先级越高,它的权限就越大吗?应该能调用啊?我不明白这个规定是为什么?
因为,低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断都是不可屏蔽中断,如果你看过我们在LED高阶驱动中操作自己做的FIFO或者看过FreeRTOS的队列源码实现,你会发现插入FIFO数据和FreeRTOS的队列中的入队操作都会屏蔽中断,防止在插入时被其他高优先级任务同时调用队列时打断,从而造成数据错乱。在IPC通信过程、内存申请等过程中,最怕的就是这种插入过程被打断,所以一般都要屏蔽中断。那么如果你在不可屏蔽中断里面调用队列这些OS Api,那之前哪些中断屏蔽就没意义了,那就很可能造成数据错乱。

相关笔记