6_ xTaskResumeFromISR任务从中断中恢复
如何在中断中恢复一个任务?
[[#4 从中断中恢复一个任务例子]]
1.开启功能
修改配置文件:FreeRTOSconfig.h
#define INCLUDE_xTaskResumeFromISR 1
2.函数接口
函数定义头文件:task.h
BaseType_t xTaskResumeFromISR( TaskHandle_t pxTaskToResume );
3.函数参数与返回值说明
参数:
- pxTaskToResume:
需要恢复任务的任务句柄,不可填NULL,因为被已经挂起的任务不参与调度,不可能恢复自己本身。
不管挂起多少次,只要恢复一次就能恢复任务
返回值:
返回值会比较中断发生的任务的优先级和恢复的任务的优先级
根据这个优先级决定在中断结束前是否需要切换上下文,让中断后返回到更高优先级的任务。
-
返回 1 (pdTRUE):
如果正在恢复(取消阻止)的任务具有等于或更高的优先级,则返回
而不是当前执行的任务(被中断的任务)–这意味着退出中断前应执行上下文切换。 -
返回0 (pdFALSE):
如果正在恢复的任务的优先级低于当前正在执行的任务,则返回
任务(被中断的任务)–意味着不需要退出中断之前切换上下文。
4.从中断中恢复一个任务例子
//在中断里写判断返回值来决定是否进行上下文切换
BaseType_t xYieldRequired;
xYieldRequired = xTaskResumeFromISR( task2_Handler );
if( xYieldRequired == pdTRUE )//恢复的任务优先级比中断发生的任务优先级高
{
portYIELD_FROM_ISR(); //需要进行上下文切换
}