【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()创建的任务。由系统自动分配的内存会释放掉。用户分配给任务的内存需要用户自行释放。

相关推荐
赋能大师兄7 小时前
单片机3.3V和5V电压等级
单片机·3.3v·5v
BreezeJuvenile7 小时前
外设模块学习(6)——DHT11温湿度传感器(STM32)
stm32·单片机·dht11·温湿度传感器
桃里桑7 小时前
【嵌入式软件】STM32 UART转485通信问题
stm32·单片机·嵌入式硬件
萧技电创EIIA9 小时前
基于wifi摄像头与单片机的串口透传及二次开发
单片机·51单片机·硬件工程·个人开发
三佛科技-134163842129 小时前
迷你加湿器方案开发,加湿器/香薰机MCU控制方案开发设计
单片机·嵌入式硬件·智能家居·pcb工艺
一支闲人10 小时前
带你了解STM32:SPI通信(硬件部分)
stm32·单片机·嵌入式硬件·基础知识
我先去打把游戏先12 小时前
VSCode通过SSH连接到Ubuntu虚拟机失败“找不到ssh安装”问题解决
笔记·vscode·单片机·嵌入式硬件·学习·ubuntu·ssh
XiangrongZ13 小时前
江协科技STM32课程笔记(三)—定时器TIM(输出比较)
笔记·科技·stm32
学工科的皮皮志^_^15 小时前
电压源和电流源学习理解
单片机·嵌入式硬件·学习
linweidong17 小时前
跨平台驱动开发:打造兼容多款MCU的硬核方案
驱动开发·单片机·嵌入式硬件·bsp·rtos·spi驱动·hal设计