FreeRTOS任务相关API函数一

任务创建函数

函数xTaskCreate() //任务动态分配

BaseType_t xTaskCreate(	TaskFunction_t pxTaskCode,         		//①任务实现函数指针(函数名)
							const char * const pcName,		 	//②任务名称,用于追踪调试,名字长度不超过configMAX_NAME_LEN
							const uint16_t usStackDepth,		//③任务堆栈大小,是usSTACKDepth的4倍
							void * const pvParameters,			//④传递给任务函数的参数
							UBaseType_t uxPriority,				//⑤任务优先级,范围0~configMAX_STACK_SIZE.
							TaskHandle_t * const pxCreatedTask )//⑥句柄,任务创建成功后会返回任务句柄,是任务的任务堆栈。

返回值:
pdPASS:创建任务成功
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:因内存不足,任务创建失败。
任务句柄:实际上是一个void * 的指针,他指向的地址是任务控制块TCB
注意:configSUPPORT_DYNAMIC_ALLOCATION 必须置为1

函数xTaskCreateStatic //任务静态分配

TaskHandle_t xTaskCreateStatic(	TaskFunction_t pxTaskCode,			//①任务实现函数指针(函数名)
									const char * const pcName,		//②任务名称,用于追踪调试,名字长度不超过configMAX_NAME_LEN
									const uint32_t ulStackDepth,	//③任务堆栈大小,静态创建任务,任务堆栈需要用户给出,一般是个数		      				     																						组,此参数是这个数组的大小  
									void * const pvParameters, 		//④任务传入参数
									UBaseType_t uxPriority,			//⑤任务优先级
									StackType_t * const puxStackBuffer,//⑥任务堆栈指针
									StaticTask_t * const pxTaskBuffer )//⑦任务控制块指针

返回值:
NULL:创建任务失败
其他值:任务创建成功,返回值是任务句柄

任务删除函数:vTaskDelete()

函数原型:void vTaskDelete( TaskHandle_t xTaskToDelete )
参数:
xTaskToDelete :要删除的任务句柄
返回值:无
任务的静态分配,需要手动定义栈空间和任务控制块TCB的空间,将他们的指针传到函数里面
注意:configSUPPORT_STATIC_ALLOCATION 必须置为1

任务创建和删除实验:

1、配置任务优先级、任务堆栈大小、任务句柄、任务函数


```c
//任务优先级
#define START_TASK_PRIO		1
//任务堆栈大小	
#define START_STK_SIZE 		128  
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);

//任务优先级
#define LED0_TASK_PRIO		2
//任务堆栈大小	
#define LED0_STK_SIZE 		50  
//任务句柄
TaskHandle_t LED0Task_Handler;
//任务函数
void led0_task(void *pvParameters);

//任务优先级
#define LED1_TASK_PRIO		3
//任务堆栈大小	
#define LED1_STK_SIZE 		50  
//任务句柄
TaskHandle_t LED1Task_Handler;
//任务函数
void led1_task(void *pvParameters);

2、任务函数

//开始任务任务函数——动态方法
void start_task(void *pvParameters)
{
    //创建LED0任务
    xTaskCreate((TaskFunction_t )led0_task,     	
                (const char*    )"led0_task",   	
                (uint16_t       )LED0_STK_SIZE, 
                (void*          )NULL,				
                (UBaseType_t    )LED0_TASK_PRIO,	
                (TaskHandle_t*  )&LED0Task_Handler);   
    //创建LED1任务
    xTaskCreate((TaskFunction_t )led1_task,     
                (const char*    )"led1_task",   
                (uint16_t       )LED1_STK_SIZE, 
                (void*          )NULL,
                (UBaseType_t    )LED1_TASK_PRIO,
                (TaskHandle_t*  )&LED1Task_Handler);         
    vTaskDelete(StartTask_Handler); //删除开始任务
}
/*开始任务任务函数——静态方法*/
/*void start_task(void *pvParameters)
{
    //创建TASK1任务
	Task1Task_Handler=xTaskCreateStatic((TaskFunction_t	)task1_task,		
										(const char* 	)"task1_task",		
										(uint32_t 		)TASK1_STK_SIZE,	
										(void* 		  	)NULL,				
										(UBaseType_t 	)TASK1_TASK_PRIO, 	
										(StackType_t*   )Task1TaskStack,	
										(StaticTask_t*  )&Task1TaskTCB);	
    //创建TASK2任务
	Task2Task_Handler=xTaskCreateStatic((TaskFunction_t	)task2_task,		
										(const char* 	)"task2_task",		
										(uint32_t 		)TASK2_STK_SIZE,	
										(void* 		  	)NULL,				
										(UBaseType_t 	)TASK2_TASK_PRIO, 	
										(StackType_t*   )Task2TaskStack,	
										(StaticTask_t*  )&Task2TaskTCB);
    vTaskDelete(StartTask_Handler); //删除开始任务
}*/
//LED0任务函数 
void led0_task(void *pvParameters)
{
    while(1)
    {
        LED0=~LED0;
        vTaskDelay(500);
    }
}   

//LED1任务函数
void led1_task(void *pvParameters)
{
    while(1)
    {
        LED1=0;
        vTaskDelay(200);
        LED1=1;
        vTaskDelay(800);
    }
}

主函数创建开始任务并进行任务调度

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4	 	 
	delay_init();	    				//延时函数初始化	  
	uart_init(115200);					//初始化串口
	LED_Init();		  					//初始化LED
	
	 
	//创建开始任务
    xTaskCreate((TaskFunction_t )start_task,            //任务函数
                (const char*    )"start_task",          //任务名称
                (uint16_t       )START_STK_SIZE,        //任务堆栈大小
                (void*          )NULL,                  //传递给任务函数的参数
                (UBaseType_t    )START_TASK_PRIO,       //任务优先级
                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄              
    vTaskStartScheduler();          //开启任务调度
}

任务挂起函数

函数原型:void vTaskSuspend( TaskHandle_t xTaskToSuspend )
参数:xTaskToSuspend ——要挂起任务的任务句柄,当传入NULL时,挂起任务自己
返回值:无

任务恢复函数

函数原型:void vTaskResume( TaskHandle_t xTaskToResume )
参数:xTaskToResume ——要恢复任务的任务句柄
返回值:无
注意:只能在正在运行的任务中调度,在调度器未开启之前不能使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值