FreeRTOS-stm32f407学习笔记-任务挂起和恢复

挂起恢复相关函数

挂起,即让函数停止运行
恢复,即让函数恢复运行
相关函数如下:

vTaskSuspend();//挂起一个任务,参数为任务对应句柄
vTaskResume();//恢复一个任务
vTaskResumeFromISR();	//	中断服务函数中恢复一个任务的运行,根据实际情况,如果恢复的任务优先级比中断任务高,需要转换;如果低,则不用

具体使用较为简单,挂起和解挂一行代码即可
下边为应用:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"

#include "FreeRTOS.h"
#include "task.h"


void start_task(void *pvParameters);
TaskHandle_t *StartTask_Handler; 

void task1_task(void *pvParameters);
TaskHandle_t *Task1Task_Handler; 

void task2_task(void *pvParameters);
TaskHandle_t *Task2Task_Handler; 

void key_task(void *pvParameters);
TaskHandle_t *KeyTask_Handler; 

int main(void)
{ 
 
  u8 key;           
	delay_init(168);  
	LED_Init();				
	KEY_Init();
	LED0=1;
	LED1=1;
	xTaskCreate((TaskFunction_t) start_task,
							(const char *  )  "start_task",
							(const uint16_t) 50,
							(void *        )  NULL,
							(UBaseType_t   ) 1,
							(TaskHandle_t *) &StartTask_Handler );
	
	vTaskStartScheduler() ;

}

void start_task(void *pvParameters)
{
	xTaskCreate((TaskFunction_t) task1_task,
							(const char *  )  "task1_task",
							(const uint16_t) 50,
							(void *        )  NULL,
							(UBaseType_t   ) 2,
							(TaskHandle_t *) &Task1Task_Handler );
							
							
							
		xTaskCreate((TaskFunction_t) task2_task,
							(const char *  )  "task2_task",
							(const uint16_t) 50,
							(void *        )  NULL,
							(UBaseType_t   ) 3,
							(TaskHandle_t *) &Task2Task_Handler );
							
		xTaskCreate((TaskFunction_t) key_task,
							(const char *  )  "key_task",
							(const uint16_t) 50,
							(void *        )  NULL,
							(UBaseType_t   ) 4,//优先级最高
							(TaskHandle_t *) &KeyTask_Handler );

	vTaskDelete(NULL);

}

void task1_task(void *pvParameters)
{
	while(1){
		LED0=~LED0;
		vTaskDelay(500);
		LED0=~LED0;
		vTaskDelay(500);
	}
}
void task2_task(void *pvParameters)
{
	while(1)
	{
	LED1=~LED1;
	vTaskDelay(400);
	LED1=~LED1;
	vTaskDelay(400);
	}
}
void key_task(void *pvParameters)
{
	u8 key;
	while(1)
	{
		key=KEY_Scan(0);
		vTaskDelay(10);
		switch(key)
		{
			case 1:vTaskSuspend(Task1Task_Handler);		break;//此处挂起函数1
			case 2:vTaskResume(Task1Task_Handler);break;//解挂任务1
			case 3:vTaskSuspend(Task2Task_Handler);	break;//挂起任务2
			case 4:vTaskResume(Task2Task_Handler);	break;//解挂任务2
		}
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值