“用于自学,学到哪儿更到哪儿“
1.xTaskCreate
- 创建一个新任务,并将其添加到准备运行的任务列表中。
- 在内部,在 FreeRTOS 实施中,任务使用两个内存块。第一个块用于保存任务的数据结构。第二个块被任务用作其堆栈。如果使用
xTaskCreate() 创建任务,则两个内存块都会在 xTaskCreate() 函数中自动动态分配。 - xTaskCreate() 只能用于创建对整个微控制器内存映射具有不受限制访问权限的任务。包含 MPU 支持的系统也可以使用 xTaskCreateRestricted() 创建 MPU 约束任务。
函数原型:
static inline BaseType_t xTaskCreate(TaskFunction_t pxTaskCode, const char *const pcName, const configSTACK_DEPTH_TYPE usStackDepth, void *const pvParameters, UBaseType_t uxPriority, TaskHandle_t *const pxCreatedTask)
参数:
pxTaskCode -- 指向任务输入函数的指针。必须实现任务以永不返回(即连续循环)。
pcName -- 任务的描述性名称。这主要用于方便调试。最大长度由 configMAX_TASK_NAME_LEN 定义 - 默认值为 16。
usStackDepth -- 指定为 NUMBER OF BYTES 的任务堆栈的大小。请注意,这与原版 FreeRTOS 不同。
pvParameters -- 将用作正在创建的任务的参数的指针。
uxPriority -- 任务应运行的优先级。包含 MPU 支持的系统可以选择通过设置优先级参数的位portPRIVILEGE_BIT来在特权(系统)模式下创建任务。例如,要创建优先级为 2 的特权任务,
uxPriority 参数应设置为 ( 2 | portPRIVILEGE_BIT )。
pxCreatedTask -- 用于传回一个句柄,通过该句柄可以引用创建的任务。
返回值:
pdPASS,如果任务已成功创建并添加到就绪列表,否则会在文件 projdefs.h 中定义错误代码
2. xTaskCreateStatic
- 创建一个新任务,并将其添加到准备运行的任务列表中。
- 使用 xTaskCreateStatic() 创建任务,则应用程序编写器必须提供所需的内存。因此,xTaskCreateStatic()允许在不使用任何动态内存分配的情况下创建任务。
函数原型:
static inline 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 -- 任务的描述性名称。这主要用于方便调试。字符串的最大长度由 FreeRTOSConfig.h 中的configMAX_TASK_NAME_LEN定义。
ulStackDepth -- 指定为 NUMBER OF BYTES 的任务堆栈的大小。请注意,这与原版 FreeRTOS 不同。
pvParameters -- 将用作正在创建的任务的参数的指针。
uxPriority -- 任务运行的优先级。
puxStackBuffer -- 必须指向至少具有 ulStackDepth 索引的 StackType_t 数组 - 然后该数组将用作任务的堆栈,无需动态分配堆栈。
pxTaskBuffer -- 必须指向 StaticTask_t 类型的变量,然后该变量将用于保存任务的数据结构,无需动态分配内存。
返回值:
如果 puxStackBuffer 和 pxTaskBuffer 均不为 NULL,则将创建任务并返回已创建任务的句柄。如果 puxStackBuffer 或 pxTaskBuffer 为 NULL,则不会创建任务并返回 NULL。