第五章 FreeRTOS的任务挂起与恢复

本文详细介绍了FreeRTOS中任务的挂起与恢复机制,包括常规的vTaskSuspend和vTaskResume,以及在中断服务函数中使用的vTaskResumeFromISR,涉及挂起流程、恢复流程和注意事项。
摘要由CSDN通过智能技术生成

目录

一. 任务的挂起

1.1 任务挂起函数介绍

1.2 任务挂起流程

1.3 任务挂起函数内部实现流程(概括)

二. 任务的恢复

2.1“任务中的恢复”

2.1.1任务恢复函数介绍

2.1.2 任务恢复流程

2.1.3任务恢复函数内部实现流程(概括)

2.2 “中断中的恢复”

2.2.1任务恢复函数介绍

2.2.2 任务恢复流程

2.2.3 任务恢复函数内部实现流程(概括)

2.2.4 示例代码


一. 任务的挂起

1.1 任务挂起函数介绍

void vTaskSuspend(TaskHandle_t xTaskToSuspend) 

参数介绍

xTaskToSuspend:待挂起任务的任务句柄(想挂起哪个任务,就传入哪个任务的任务句柄

1.2 任务挂起流程

使用时需将宏 INCLUDE_vTaskSuspend  配置为 1 即可。

注意:

        ① 当传入的参数为NULL,则代表挂起任务自身(当前正在运行的任务)。

        ② 无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复 。


1.3 任务挂起函数内部实现流程(概括)


二. 任务的恢复

2.1“任务中的恢复”

2.1.1任务恢复函数介绍

void vTaskResume(TaskHandle_t xTaskToResume)

 参数介绍

xTaskToResume待恢复任务的任务句柄。

2.1.2 任务恢复流程

使用时需将宏 INCLUDE_vTaskSuspend  配置为 1 即可,和挂起任务需要配置的宏是同一个。

注意:

        任务无论被vTaskSuspend()挂起多少次,只需在任务中调用vTaskResume()恢复一次,就可以继续运行,且被恢复的任务会进入就绪态


2.1.3任务恢复函数内部实现流程(概括)


2.2 “中断中的恢复”

2.2.1任务恢复函数介绍

BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume)  

参数介绍

xTaskToResume待恢复任务的任务句柄。

函数返回值描述
pdTrue任务恢复后需要进行任务切换(恢复的任务优先级,大于当前正在执行的任务优先级)
pdFALSE任务恢复后不需要进行任务切换

2.2.2 任务恢复流程

使用时,将宏INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR配置为1

注意:

        ① 该函数专用于中断服务函数中,用于解挂(恢复)被挂起的任务。

        ② 中断服务函数中要调用FreeRTOS中的API函数,则中断优先级不能高于FreeRTOS所管理的最高优先级。(FreeRTOS所管理的中断优先级是5~15,中断优先级必须在此范围内,如果中断优先级在0~4(FreeRTOS任务优先级是越大越高,而中断优先级是越小越高。),0~4数值比5~15小,优先级高,不属于FreeRTOS所管理的范围)。

        ③ 函数带有“FromISR”后缀的,为中断服务函数中专用API函数


2.2.3 任务恢复函数内部实现流程(概括)

2.2.4 示例代码

void EXTI4_IRQHandler(void)
{
	delay_xms(10);//消抖
	BaseType_t YieldRequired;
	
	if(KEY0==1)	 //按键KEY0
	{
		YieldRequired = xTaskResumeFromISR(task1_handler);	//在中断中恢复被挂起的任务

		printf("中断恢复任务1的运行!\r\n");
		if(YieldRequired == pdTRUE)	
		{
			 portYIELD_FROM_ISR(YieldRequired);				//任务切换
		}
	}		 
	EXTI_ClearITPendingBit(EXTI_Line4);  //清除LINE4上的中断标志位  
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值