【FreeRTOS】04 FreeRTOS 创建任务相关API函数

任务创建和删除API函数

函数 描述
xTaskCreate() 使用动态的方法创建一个任务。
xTaskCreateStatic() 使用静态的方法创建一个任务。
xTaskCreateRestricted() 创建一个使用 MPU 进行限制的任务,相关内存使用动态内存分配。
vTaskDelete() 删除一个任务。

xTaxkCreate()动态创建任务

1.此函数用来创建一个任务,自动的从 FreeRTOS 的堆中分配任务堆栈,管理方式为我们前文提到选用的heap4.c

2.宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1

函数原型

c 复制代码
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,//任务函数
						const char * const pcName,//任务函数名称,字符串
						const uint16_t usStackDepth,//堆栈深度
						void * const pvParameters,//可能的其他参数
						UBaseType_t uxPriority,//优先级
						TaskHandle_t * const pxCreatedTask )//任务句柄

参数
pxTaskCode: 任务函数。
pcName: 任务名字,一般用于追踪和调试,任务名字长度不能超过。configMAX_TASK_NAME_LEN。
usStackDepth: 任务堆栈大小,注意实际申请到的堆栈是 usStackDepth 的 4 倍。其中空闲任务的任务堆栈大小为 configMINIMAL_STACK_SIZE。
pvParameters: 传递给任务函数的参数。
uxPriotiry: 任务优先级,范围 0~ configMAX_PRIORITIES-1。
pxCreatedTask: 任务句柄,任务创建成功以后会返回此任务的任务句柄,这个句柄其实就是任务的任务堆栈。此参数就用来保存这个任务句柄。其他 API 函数可能会使用到这个句柄。

xTaskCreateStatic()静态创建任务

1.使用此函数创建的任务所需的RAM(任务堆栈也就是任务句柄,任务控制块)由用户自行实现(实际上就是声明定义一块内存)。

2.宏configSUPPORT_STATIC_ALLOCATION 定义为 1。
函数原型

c 复制代码
TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,//任务函数
								const char * const pcName,//任务名称
								const uint32_t ulStackDepth,//任务中栈大小
								void * const pvParameters,//参数
								UBaseType_t uxPriority,//优先级
								StackType_t * const puxStackBuffer,//栈
								StaticTask_t * const pxTaskBuffer )//控制块

参数
pxTaskCode: 任务函数。
pcName: 任务名字,一般用于追踪和调试,任务名字长度不能超过。configMAX_TASK_NAME_LEN。
usStackDepth: 任务堆栈大小,由于本函数是静态方法创建任务,所以任务堆栈由用户给出,一般是个数组,此参数就是这个数组的大小。
pvParameters: 传递给任务函数的参数。
uxPriotiry: 任务优先级,范围 0~ configMAX_PRIORITIES-1。
puxStackBuffer: 任务堆栈,一般为数组,数组类型要为 StackType_t 类型。
pxTaskBuffer: 任务控制块。

xTaskCreateRestricted() 创建任务

此函数也是用来创建任务的,只不过此函数要求所使用的 MCU 有 MPU(内存保护单元),用此函数创建的任务会受到 MPU 的保护。其他的功能和函数 xTaxkCreate()一样。
函数原型

c 复制代码
BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, 
									TaskHandle_t * pxCreatedTask )

参数
pxTaskDefinition: 指向一个结构体 TaskParameters_t,这个结构体描述了任务的任务函数、堆栈大小、优先级等。此结构体在文件 task.h 中有定义。
pxCreatedTask: 任务句柄。

vTaskDelete() 删除任务

删除一个用函数 xTaskCreate()或者 xTaskCreateStatic()创建的任务。由系统自动分配的内存会释放掉。用户分配给任务的内存需要用户自行释放。

相关推荐
国科安芯10 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
梁朝辉15 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
崇山峻岭之间17 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious17 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng21 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计1 天前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
kebidaixu1 天前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片详解
stm32
kebidaixu1 天前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片调试实录:四个关键问题与解决方案
stm32
wuyk5551 天前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机