一. 任务创建 xTaskCreate
创建新的任务并添加到任务队列中
BASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pvCreatedTask
);
parameter | description |
---|---|
pvTaskCode | 指向任务的入口函数. 任务必须执行并且永不返回 (即:无限循环). |
pcName | 描述任务的名字。主要便于调试。最大长度由configMAX_TASK_NAME_LEN.定义 |
usStackDepth | 指定任务堆栈的大小 ,堆栈能保护变量的数目- 不是字节数. 例如,如果堆栈为16位宽度,usStackDepth定义为 100, 200 字节,这些将分配给堆栈。堆栈嵌套深度(堆栈宽度)不能超多最大值——包含了size_t类型的变量 |
pvParameters | 指针用于作为一个参数传向创建的任务 |
uxPriority | 任务运行时的优先级 |
pvCreatedTask | 用于传递一个处理——引用创建的任务 |
return | pdPASS 是如果任务成功创建并且添加到就绪列中,另外错误代码在projdefs. H文件定义 |
二. 任务删除 vTaskDelete
从RTOS实时内核管理中移除任务。要删除的任务将从就绪,封锁,挂起,事件列表中移除。
void vTaskDelete( xTaskHandle pxTask );
parameter | description |
---|---|
pxTask | 处理要删除的任务。传递NULL将引起调用任务删除 |
三. 任务延时 vTaskDelay
使用此函数对任务延时,执行延时函数就会进行任务切换,并且此任务进入阻塞态,直到延时完成,任务重新进入就绪态
void vTaskDelay( portTickType xTicksToDelay );
parameter | description |
---|---|
xTicksToDelay | 时间数量,调用任务应该锁住的时间片周期 |
四. 代码示例
创建一个任务打印 “Hello world!” 后删除任务本身
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
void myTask(void *pvParam)
{
printf("Hello world!\n");
vTaskDelay(1000);
vTaskDelete(NULL);
}
void app_main(void)
{
xTaskCreate(myTask,"myTask1",1024,NULL,1,NULL);
}