我开始使用 FreeRTOS,我想要一个中断来抢占任何即将运行的任务并运行我需要关键运行的任务。
有没有办法在 FreeRTOS 中执行此操作? (这是通过任务优先级实现的吗?)
最佳答案
不!以上两个答案都是危险的。
不要在 ISR 中使用 taskENTER_CRITICAL() 或 taskEXIT_CRITICAL() - 在 ISR 中需要临界区是不常见的,但如果需要,则使用 taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR() . (可能 AVR32 端口是该规则的异常(exception)?)
不要使用 xTaskResumeFromISR() 将任务与中断同步。已经发布到该功能的文档的链接甚至说了这一点。
如果我对您的问题的理解是正确的,您希望能够中断解除阻塞任务,然后如果该任务是能够运行的最高优先级任务,则让中断直接返回解除阻塞的任务。如果我的理解是正确的,那么在下一页上有一个如何有效地做到这一点的例子:http://www.freertos.org/RTOS_Task_Notification_As_Counting_Semaphore.html
https://stackoverflow.com/questions/39940487/