1.任务创建
1.1.xTaskCreate
BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,
const char * const pcName,
configSTACK_DEPTH_TYPE usStackDepth,
void *pvParameters,
UBaseType_t uxPriority,
TaskHandle_t *pxCreatedTask );
configSUPPORT_DYNAMIC_ALLOCATION 被设置为 1
参数和返回值:
参数 | 说明 |
pxTaskCode | 指向任务入口函数的指针(即 实现任务的函数名称,请参阅如下示例)。任务通常 以 无限循环的形式实现;实现任务的函数决不能试图返回 或退出。 但是,任务可以 自我删除。 |
pcName | 任务的描述性名称。主要是为了方便 调试,但也可用于 获取任务句柄。任务名称的最大长度由 中的 FreeRTOSConfig.h的configMAX_TASK_NAME_LEN 定义。 |
usStackDepth | 要分配用于 任务堆栈的 字数(不是字节)。例如,如果堆栈的宽度为 16 位,usStackDepth 为 100,则将分配 200 字节用作该任务的堆栈。 再举一例,如果堆栈的宽度为 32 位,usStackDepth 为 400,则将分配 1600 字节用作该任务的堆栈。堆栈深度与堆栈宽度的乘积不得超过 size_t 类型变量所能包含的最大值。 |
pvParameters | 作为参数传递给创建的任务的一个值。如果 pvParameters 设置为变量的地址, 则在执行创建的任务时该变量必须仍然存在——因此 传递堆栈变量的地址是无效的 |
uxPriority | 创建任务执行的优先级 。包含 MPU 支持的系统可在特权(系统)模式下选择性地创建任务, 方法是在 uxPriority 中设置 portPRIVILEGE_BIT 位。 例如,要创建一个优先级为 2 的特权任务,可将 uxPriority 设置为 ( 2 portPRIVILEGE_BIT)。断言优先级低于 configMAX_priority。 如果未定义 configASSERT,则优先级会被静默限制为 ( configMAX_priority - 1)。 |
pxCreatedTask | 用于将句柄传递至由 xTaskCreate() 函数创建的任务 。 pxCreatedTask 是可选的,可设置为 NULL。 |
返回值 | |
pdPASS | 成功 |
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY | 失败 |
1.2.xTaskCreateStatic
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 );
configSUPPORT_STATIC_ALLOCATION 设置为 1
参数和返回值:
参数 | 说明 |
pxTaskCode | 指向任务入口函数的指针(即实现任务的函数名称,请参阅如下示例)。任务通常以无限循环的形式实现;实现任务的函数决不能尝试返回或退出。但是,任务可以自行删除。 |
pcName | 任务的描述性名称。此参数主要用于方便调试,但也可用于获取任务句柄。任务名称的最大长度由 FreeRTOSConfig.h 中的 configMAX_TASK_NAME_LEN 定义 |
ulStackDepth | puxStackBuffer 参数用于将 StackType_t 变量数组传递给 xTaskCreateStatic()。必须将 ulStackDepth 设置为数组中的索引数。 |
pvParameters | 传递给已创建任务的参数值。如果将 pvParameters 设置为变量的地址,则在创建的任务执行时变量必须仍然存在,因此传递堆栈变量的地址无效。 |
uxPriority | 所创建任务执行的优先级。包含 MPU支持的系统可选择通过在 uxPriority 中设置位 portPRIVILEGE_BIT,以特权(系统)模式创建任务。例如,要创建优先级为 2 的特权任务,请将 uxPriority 设置为 (2 |portPRIVILEGE_BIT)。断言优先级低于 configMAX_priority。如果未定义 configASSERT,则优先级会被静默限制为 (configMAX_PRIORITIES - 1)。 |
puxStackBuffer | 必须指向至少具有 ulStackDepth 索引的 StackType_t 数组(请参阅上面的 ulStackDepth 参数),该数组用作任务的堆栈,因此必须是永久性的(而不是在函数的堆栈上声明)。 |
pxTaskBuffer | 必须指向 StaticTask_t 类型的变量。该变量用于保存新任务的数据结构体 (TCB) ,因此必须是持久的(而不是在函数的堆栈中声明)。 |
返回值 | |
任务句柄 | 成功 |
NULL | 失败 |
1.3.xTaskCreateRestrictedStatic
BaseType_t xTaskCreateRestrictedStatic( TaskParameters_t *pxTaskDefinition,
TaskHandle_t *pxCreatedTask );
configSUPPORT_STATIC_ALLOCATION 必须 在 FreeRTOSConfig.h 中设置为 1
参数返回值:
参数 | 返回值 |
pxTaskDefinition | |
pxCreatedTask | 用于传回可以引用所创建任务的句柄。 |
返回值 | |
pdPASS | 成功 |
其他 | 失败 |
1.4.vTaskDelete
void vTaskDelete( TaskHandle_t xTask );
参数和返回值:
参数 | 说明 |
xTask | 待删除的任务的句柄。传递 NULL 将导致调用任务被删除。 |
2.任务控制
2.1.vTaskDelay
void vTaskDelay( const TickType_t xTicksToDelay );
参数和返回值:
参数 | 说明 |
xTicksToDelay | 调用任务应阻塞的 tick 周期数。 |
2.2.vTaskDelayUntil
void vTaskDelayUntil( TickType_t *pxPreviousWakeTime,
const TickType_t xTimeIncrement );
参数和返回值:
参数 | 说明 |
pxPreviousWakeTime | 指向一个变量的指针,该变量 任务上次被取消阻止。 该变量在第一次使用前 必须用当前时间进行初始化(见下方示例)。 在这之后,该变量 会在 vTaskDelayUntil() 中自动更新。 |
xTimeIncrement | 周期时间段。 该任务将在 (*pxPreviousWakeTime + xTimeIncrement)时间解除阻塞。 配合相同的 xTimeIncrement 参数值 调用 vTaskDelayUntil 将导致任务 以固定的间隔期执行。 |
2.3.xTaskDelayUntil
BaseType_t xTaskDelayUntil( TickType_t *pxPreviousWakeTime,
const TickType_t xTimeIncrement );
参数和返回值:
参数 | 说明 |
pxPreviousWakeTime | 指向一个变量的指针,该变量 用于保存任务最后一次解除阻塞的时间。 该变量在第一次使用前 必须用当前时间进行初始化(见下方示例)。 在这之后,该变量 会在 xTaskDelayUntil() 中自动更新。 |
xTimeIncrement | 周期时间段。 该任务将在 (*pxPreviousWakeTime + xTimeIncrement)时间解除阻塞。 以相同的 xTimeIncrement 参数值调用 xTaskDelayUntil 将导致任务以固定的间隔期执行。 |
返回值 | 一个可用于检查任务是否实际延迟的值 |
pdTRUE | 任务延迟 |
pdFALSE | 如果下一个预计唤醒时间已过,则任务将不会延迟。 |
2.4.uxTaskPriorityGet
UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask );
参数和返回值:
参数 | 说明 |
xTask | 待查询的任务句柄。传递 NULL 句柄会导致返回调用任务的优先级。 |
返回值 | |
XTask 的优先级 | |
2.5.vTaskPrioritySet
void vTaskPrioritySet( TaskHandle_t xTask,
UBaseType_t uxNewPriority );
参数和返回值:
参数 | 说明 |
xTask | 正在设置优先级的任务的句柄。空句柄会设置调用任务的优先级。 |
uxNewPriority | 将要设置任务的优先级。断言优先级低于 configMAX_priority。如果未定义 configASSERT,则优先级会被静默限制为 (configMAX_PRIORITIES - 1)。 |
2.6.vTaskSuspend
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
参数和返回值:
参数 | 说明 |
xTaskToSuspend | 被挂起的任务句柄。传递空句柄将导致调用任务被暂停。 |
2.7.vTaskResume
void vTaskResume( TaskHandle_t xTaskToResume );
参数和返回值:
参数 | 说明 |
xTaskToResume | 要恢复的任务句柄。 |
2.8.xTaskResumeFromISR
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume );
参数和返回值:
参数 | 说明 |
xTaskToResume | 要恢复的任务句柄。 |
返回值 | ISR 使用此信息来确定 ISR 之后是否需要上下文切换。 |
pdTRUE | 恢复任务导致上下文切换 |
pdFALSE | 不切换任务 |
2.9.xTaskAbortDelay
BaseType_t xTaskAbortDelay( TaskHandle_t xTask );
参数和返回值:
参数 | 说明 |
xTask | 将被强制退出阻塞状态的任务的句柄 。要获得任务句柄,请使用 xTaskCreate() 创建任务并使用 pxCreatedTask 参数,或使用返回值创建任务 xTaskCreateStatic() 并存储该值,或在 xTaskGetHandle() 时使用任务的名字。 |
返回值 | |
pdFAIL | xTask 引用的任务不在“阻塞”状态 |
pdPASS | xTask 引用的任务在“阻塞”状态 |
3.任务使用程序
3.1.
参数和返回值:
参数 | 说明 |
3.2.
参数和返回值:
参数 | 说明 |
3.3.
参数和返回值:
参数 | 说明 |
3.4.
参数和返回值:
参数 | 说明 |
3.5.
参数和返回值:
参数 | 说明 |
3.6.
参数和返回值:
参数 | 说明 |
3.7.
参数和返回值:
参数 | 说明 |