FreeRTOS 任务未恢复

FreeRTOS task not resuming

我正在使用 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 执行正确,但任务之后没有恢复。 有人对此行为有解释吗?

谢谢!

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

直接任务通知提供了执行您描述的最佳(最轻量级和最有效)方法。下一页有一个有效的例子:http://www.freertos.org/RTOS_Task_Notification_As_Counting_Semaphore.html