我正在使用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被正确地执行,但是任务之后不会继续。有人对这种行为有解释吗?
谢谢!
发布于 2016-08-18 14:59:44
读xTaskResumeFromISR()文档。它告诉你不要做你正在做的事。
直接到任务通知提供了最好的(最轻和最有效)的方法来完成你所描述的事情。下面的页面上有一个有用的示例:Semaphore.html
https://stackoverflow.com/questions/39015586
复制相似问题