四、FreeRTOS的stm32任务的挂起和恢复(标准库)

四、FreeRTOS的stm32任务的挂起和恢复(标准库)

4.1、任务挂起和恢复函数介绍:

(1)注意:

挂起:挂起任务类似暂停、可恢复。

恢复:恢复被挂起的任务。

"FromISR":带有FromISR后缀是在中断函数中专用的API函数。

任务优先级是数字越大越高优先级,中断优先级是数字越小越高优先级

(2)介绍:

①任务挂起:

void vTaskSuspend(TaskHandle_t xTaskToSuspend),参数为待挂起任务句柄。

此函数用于挂起任务,使用时需要将宏INCLUDE_vTaskSuspend配置为1。

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

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

②任务恢复(任务中恢复):

void vTaskResume(TaskHandle_t xTaskToResume),参数为待恢复任务句柄。

此函数用于恢复挂起的任务,使用需要进行宏INCLUDE_vTaskSuspend为1。

注意:任务无论被vTaskSuspend()挂起多少次,只需要在任务中调用vTaskResume()继续运行。并且被恢复的任务会进行就绪态!

③任务恢复(中断中恢复):

BaseType_t xTaskResumeFromlSR(TaskHandle_t xTaskToResume),参数为待恢复的任务句柄。

使用该函数需要注意宏:INCLUDE_vTaskSuspend和INCLUDE_xTaskResumeFromISR必须定义为1。

此函数专用于中断服务函数中,用于解挂被挂起任务

注意:中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理的最高优先级。

4.2、任务挂起和恢复实验:

(1)实验目的:学会使用FreeRTOS中的任务挂起和恢复函数。

(2)实验设计:按键挂起任务,按键恢复任务,按键中断恢复任务。

(3)代码操作:

复制我发布的FreeRTOS的动态任务创建。只需要修改两个部分:

        ①一个部分是FreeRTOSConfig.h头文件里对INCLUDE_vTaskSuspendINCLUDE_xTaskResumeFromISR置1。

        ②另一个部分是修改myTask3的函数即可(按键1按下挂起,按键2按下恢复,按键3在中断恢复)

//——————task_demo.c————————//
void myTask3(void *arg )
{
	while(1)
	{
		//printf("task3正在运行\n");
		KNum=Key_GetNum();
		if(KNum==1)
		{
			printf("guaqi\t\n");
			vTaskSuspend(myTaskHandler1);//挂起任务
		}
		else if(KNum==2)
		{
			printf("huifu\t\n");
			vTaskResume(myTaskHandler1);//恢复任务
		}
		vTaskDelay(10);
	}
}

外部中断恢复的操作,我没能成功,后续在进行尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值