一、任务的创建与删除
1.任务的基本概念
RTOS系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习 RTOS 系统的工程 师或者学生主要就是为了使用 RTOS 的多任务处理功能,初步上手 RTOS 系统首先必须掌握的 也是任务的创建、删除、挂起和恢复等操作,由此可见任务管理的重要性
2.什么是多任务系统?
回想一下我们以前在使用 51、STM32 单片机裸机(未使用系统)的时候一般都是在 main 函数里面用 while(1)做一个大循环来完成所有的处理,即应用程序是一个无限的循环,循环中调用相应的函数完成所需的处理。有时候我们也需要中断中完成一些处理。相对于多任务系统而言,这个就是单任务系统,也称作前后台系统,中断服务函数作为前台程序,大循环 while(1)作为后台程序,
3.任务创建与删除相关函数
任务创建与删除相关函数有如下三个:
函数名称
|
函数作用 |
xTaskCreate() |
动态方式创建任务
|
xTaskCreateStatic() | 静态方式创建任务(不常用) |
vTaskDelete() | 删除任务 |
- 动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。
- 通常情况下使用动态方式创建任务。
xTaskCreate 函数原型
pxTaskCode: 指向任务函数的指针。
pcName: 任务名称的字符串。
usStackDepth: 任务堆栈的大小,以字节为单位。
pvParameters: 传递给任务函数的参数指针。
uxPriority: 任务的优先级,数值越大表示优先级越高。
pxCreatedTask: 任务句柄的指针,用于返回创建的任务句柄。
返回值
|
描述 |
pdPASS | 任务创建成功 |
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY | 任务创建失败 |
vTaskDelete 函数原型
void vTaskDelete(TaskHandle_t xTaskToDelete);
- 只需将待删除的任务句柄传入该函数,即可将该任务删除。
- 当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)。
创建任务
在FreeRTOS中,任务的创建主要包括以下步骤:
定义任务句柄变量:
任务句柄是一个指向任务控制块(TCB)的指针,用于引用和管理任务。您需要在任务函数外定义一个任务句柄变量,例如:
TaskHandle_t xTaskHandle;
编写任务函数:
任务函数是实现任务功能的函数,可以在函数内部调用FreeRTOS提供的各种API函数来实现任务通信、同步、延时等功能。任务函数的原型如下:
void vTaskFunction(void *pvParameters);
参数 pvParameters 是一个指向参数的指针,可以将任务函数的输入参数通过 pvParameters 传递给任务函数。
创建任务:
使用API函数 xTaskCreate() 创建任务。该函数原型如下:
BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,
constchar * const pcName,
const configSTACK_DEPTH_TYPE usStackDepth,