[极客嵌入式应用笔记]FreeRTOS动态创建任务

1_xTaskCreate动态创建任务

如何动态创建一个任务?
[[#4 动态创建任务例子]]

1.开启功能

修改配置文件:FreeRTOSconfig.h

//配置支持动态分配
#define configSUPPORT_DYNAMIC_ALLOCATION 		1

2.函数接口

函数定义头文件:task.h

 //动态创建任务函数声明

BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,//任务函数名
						const char * const pcName,//任务的名称  
						unsigned short usStackDepth,//任务堆栈大小  
						void *pvParameters, 
						UBaseType_t uxPriority,//任务优先级   
						TaskHandle_t *pxCreatedTask//任务句柄 
						);

3.函数参数与返回值说明

参数:

  • pxTaskCode (函数名):
    任务函数必须是无法返回的,即无return且内含无限循环

  • pcName (名称):
    任务名称字符串,只是方便调试时使用的,
    字符串长度包含’\0’,最大长度由宏定义configMAX_TASK_NAME_LEN决定
    字符串超出长度自动则以’\0’截断

  • usStackDepth (堆栈大小):
    任务堆栈的大小,实际申请到的内存空间为usStackDepth的4倍
    任务函数占用的内存大小不可以超过这个任务栈申请到的内存空间。

空闲任务的堆栈大小由宏定义configMINIMAL_STACK_SIZE决定,可以根据需求更改其大小
任务所需栈空间,一般都是估算后取较大值防止溢出,但是这样可能会导致不必要的内存浪费
等学到后面就可以调试来查看任务执行过程中的内存占用情况,再来取一个合理的值。

  • pvParameters(参数):
    需要传递给任务函数的参数,如同mian函数的参数一样,
    通过这个参数可以实现对任务采用不同的模式等。

  • uxPriority(优先级):
    0是最低优先级,最高优先级是configMAX_PRIORITIES-1
    configMAX_PRIORITIES是任务优先级个数宏定义常量

  • pxCreatedTask(任务句柄):
    任务句柄可以引索到任务任务的堆栈,是指向任务控制块的指针
    后面所有对任务的操作都需要通过这个句柄。

返回值:

  • 返回 1 (pdPASS):
    表明任务创建成功
  • 返回 0 (pdFAIL):
    表示任务创建失败,表明任务没有创建,因为可供FreeRTOS使用的内存堆空间不足,
    无法分配任务堆栈所需要的空间,保存不了任务数据结构和任务栈,所以任务创建失败了。

4.动态创建任务例子

任务定义:



//放在.h头文件的一些声明接口
#define TASK_HARDWAVE_INIT_STACK_SIZE 512//宏定义任务堆栈大小(单位*4byte)
#define TASK_HARDWAVE_INIT_TASK_PRIORITY 5//宏定义任务优先级
void task_hardwave_init(void *pvParameters);//任务函数声明
extern TaskHandle_t Handler_hardwave_init;//声明任务句柄全局变量

//句柄变量定义应放在.c文件
TaskHandle_t Handler_hardwave_init;//定义任务句柄全局变量


任务创建:



//创建硬件初始化任务

 xTaskCreate(
			 task_hardwave_init,
			 "hardwave_init", 
			 TASK_HARDWAVE_INIT_STACK_SIZE,
			 NULL,
			 TASK_HARDWAVE_INIT_TASK_PRIORITY, 
			 &Handler_hardwave_init
	        );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值