FreeRTOS任务无法恢复

时间:2016-08-18 10:15:50

标签: c freertos

我正在使用ARM Cortex-M4微控制器开发FreeRTOS应用程序。

对于精确计时,我想使用基于中断的计时器。中断具有适当的优先级,因此它应该能够调用FreeRTOS API。 ISR会定期调用,并应按照给定的代码唤醒任务:

/* This function is executed by the task I'd like to resume */
void hello_task() {
    while (1) {
        vTaskSuspend(task);
        printf("Tick\n");
    }
}

/* The ISR is called by an interrupt about 200 times per second */
void Timer_IRQHandler() {
    CLEAR_INTERRUPT_FLAG();
    xTaskResumeFromISR(task);
}

ISR正确执行但之后任务没有恢复。 有没有人对这种行为有解释?

谢谢!

1 个答案:

答案 0 :(得分:1)

阅读documentation for xTaskResumeFromISR()。它告诉你不要做你正在做的事情。

直接到任务通知提供了执行所描述内容的最佳(最轻量级和高效率)方法。以下页面上有一个有用的示例:http://www.freertos.org/RTOS_Task_Notification_As_Counting_Semaphore.html