我开始使用FreeRTOS,我想要一个中断来抢占任何将要运行的任务,并运行我需要关键运行的任务。
在FreeRTOS中有没有办法做到这一点?(这是通过任务优先级实现的吗?)
发布于 2016-10-09 22:40:26
不是的!以上两个答案都是危险的。
不要在ISR中使用taskENTER_CRITICAL()或taskEXIT_CRITICAL() -在ISR中需要临界区的情况并不常见,但如果需要,则使用taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR()。(可能AVR32端口是该规则的例外?)
不要使用xTaskResumeFromISR()将任务与中断同步。已经发布到该函数文档的链接甚至说到了这一点。
如果我对你的问题的理解是正确的,你想要有一个中断解锁任务的能力,然后如果该任务是能够运行的最高优先级任务,让中断直接返回到解锁的任务。如果我的理解是正确的,那么在下面的页面上有一个如何以有效的方式做到这一点的例子:http://www.freertos.org/RTOS_Task_Notification_As_Counting_Semaphore.html
发布于 2016-10-09 14:36:32
您可以使用xTaskResumeFromISR来完成此操作。
要使产生的任务不被其他任务中断,需要满足许多条件(比如它的优先级必须足够高),还需要满足许多其他条件,以确保没有中断可以不被服务(比如产生的任务必须保证在下一个中断之前完成)。
发布于 2016-10-09 15:06:02
1.启用抢占:
这很容易做到。
FreeRTOS的所有配置选项都在FreeRTOSConfig.h下
#define configUSE_PREEMPTION 1您可以将其设置为1以使用抢占式RTOS调度器,或设置为0以使用协作式RTOS调度器。
有关更多信息,请查看this link
ISR 2.使用中的临界区
void taskENTER_CRITICAL( void );
//action
void taskEXIT_CRITICAL( void );RTOS在这个关键部分中不会做任何额外的事情
参考:here
https://stackoverflow.com/questions/39940487
复制相似问题