FreeRtos学习笔记【4】-----任务的挂起与恢复

任务的挂起与恢复

一、任务挂起和恢复的含义

挂起意思其实就是让任务暂停,与删除任务相似,但是任务的堆栈和内存都没有被删除。
恢复顾名思义就是恢复被挂起的任务

二、任务挂起与恢复使用的API函数

vTasksuspend()          //挂起函数
vTaksResume()           //恢复任务的运行
vTaskResumeFromISR()    //中断服务函数中恢复任务的运行

其中 vTaskResumeFromISR()有返回值

返回值含义
pdTRUE被恢复的任务的优先级比当前的优先级高
pdFAULSE被恢复的任务的优先级比当前的优先级低

三、创建一个使用按键来挂起和恢复其他任务的任务

#define Task3_Size    128
#define Task3_PRIO    4
StackType_t Task3_stack[StartTaskSize];
StaticTask_t Task3TCB;

TaskHandle_t  Task3_Handler;


  Task3_Handler =  xTaskCreateStatic(  (TaskFunction_t) task3,
                                         (char * ) "task3", /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                                         (uint32_t) Task3_Size,
                                         (void *) NULL,
                                         (UBaseType_t) Task3_PRIO,
                                         (StackType_t *) Task3_stack,
                                         (StaticTask_t * ) &Task3TCB );	

void task3(void *Parameters)
{
	while(1)
	{
		if( KEY_Scan(1) == 0)
		{	
		vTaskSuspend(Task2_Handler); //挂起任务二
		}
				vTaskDelay(10);
	}

}
/*要注意在KEY_scan中含有一个延时函数delay_ms(10)来做软件消抖,要替换成vTaskDelay(10)才可以正常使用KEY_scan()函数*/

	

按键配置和检测代码

void key_Init(void)
{
	
	GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //KEY 对应引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
	
	
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
	
	 
}

u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键按松开标志
	if(mode)key_up=1;  //支持连按		  
	if(key_up&&(KEY0==0))
	{
		vTaskDelay(10);//去抖动 
		key_up=0;
		if(KEY0==0)return 1;
		
	}else if(KEY0==1)key_up=1; 	    
 	return 0;// 无按键按下
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值