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
我正在使用 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