热门IT资讯网

学习笔记-RTOS任务创建

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,任务的创建1 任务需要 RAM 来保存与任务有关的状态信息(任务控制块)2 需要一定的 RAM 来作为任务堆栈xTaskCreate()就会从FreeRTOS的堆中分配,必须提供内存管理文件默认使用h

任务的创建

1 任务需要 RAM 来保存与任务有关的状态信息(任务控制块)

2 需要一定的 RAM 来作为任务堆栈


xTaskCreate()就会从FreeRTOS的堆中分配,必须提供内存管理文件

默认使用heap_4.c


3 宏 configSUPPORT_DYNAMIC_ALLOCATION 必须为 1


4 函数 xTaskCreateStatic()创建的话这些 RAM 就需要用户来提供了

configSUPPORT_STATIC_ALLOCATION设置为1


5 任务调度器启动前还是启动后,都可以创建任务

最常用的一个

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,

const char * const pcName,

const uint16_t usStackDepth,

void * const pvParameters,

UBaseType_t uxPriority,

TaskHandle_t * const pxCreatedTask )

pxCreatedTask 任务句柄,就是任务的任务堆栈,其他API可能会用到


返回值 是反映任务创建成功或出错码

pdPASS: 任务创建成功。


6 不常用

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 )

pxTaskBuffer: 任务控制块。

返回值:NULL : 任务创建失败

其他值: 任务创建成功,返回任务的任务句柄。


7 vTaskDelete( TaskHandle_t xTaskToDelete )

xTaskToDelete: 要删除的任务的任务句柄。

可以使用NULL做参数,删除任务本身


8 关键实验(学习动态创建):

任务创建:

#define START_TASK_PRIO 1 //任务优先级

#define START_STK_SIZE 128 //任务堆栈大小

TaskHandle_t StartTask_Handler; //任务句柄

void start_task(void *pvParameters); //任务函数


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(); //开启任务调度


开始任务:

taskENTER_CRITICAL(); //进入临界区

//创建 TASK1 任务

。。。。。。

//创建 TASK2 任务

vTaskDelete(StartTask_Handler); //删除开始任务

taskEXIT_CRITICAL(); //退出临界区


任务堆栈、任务句柄、任务函数声明等,这样方便修改。这些东

西可以放到一个.h 头文件里面去,


开始任务:创建其他应用任务和信号量、队列等内核对象




























0