FreeRTOS学习笔记(2)---- 任务的挂起与恢复

在这里插入图片描述

实验内容:
(1)start_task任务,用于

按键任务函数key_task

void key_task( void * pvParameters )
{
	u8 key;
	while(1)
	{
		key = KEY_Scan(0);
		switch (key)
		{
			case WKUP_PRES:
				vTaskSuspend(Task1Task_Handler);
				printf("任务1挂起\r\n");
				break;
			case KEY1_PRES:
				vTaskResume(Task1Task_Handler);
				printf("任务1恢复\r\n");
				break;
			case KEY2_PRES:
				vTaskSuspend(Task2Task_Handler);
				printf("任务2挂起\r\n");
				break;
		}
		vTaskDelay(10);
	}
}

中断服务程序

中断服务程序的的中断优先级必须低于宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,优先级比该宏高的不归FreeRTOS管

void EXTI4_IRQHandler(void)
{
	BaseType_t YieldRequired;
	
	delay_xms(20);	//消抖
	if(KEY0==0)	 
	{				 
		YieldRequired=xTaskResumeFromISR(Task2Task_Handler);//恢复任务2
		printf("任务2恢复\r\n");
		if(YieldRequired==pdTRUE)
		{
			/*如果函数xTaskResumeFromISR()返回值为pdTRUE,那么说明要恢复的这个
			任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务),所以在
			退出中断的时候一定要进行上下文切换!*/
			portYIELD_FROM_ISR(YieldRequired);
		}
	}		 
	 EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位  
}

实验现象
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值