林大侠
2018.08.09
第一节 Task管理
(一)Task管理常用API
创建Task API
static BaseType_t xTaskCreate(TaskFunction_t pvTaskCode,
const char *constpcName,
const uint32_t usStackDepth,
void *constpvParameters,
UBaseType_t uxPriority,
TaskHandle_t *constpvCreatedTask)
功能
创建一个新任务,并将其添加到准备运行的任务列表中
参数描述
pvTaskCode: 指向任务实现函数的指针。
constpcName :任务名称,只是单纯的用于描述任务方便记忆,不会被freeRTOS使用。
usStackDepth:栈深度,这个值指定的是栈空间可以保存多少个字(word),而不是多少个字节(byte)。
比如说,如果是32位宽的栈 空间,传 入的usStackDepth值为100,则将会分配400 字节的栈空间(100 * 4bytes)。栈深度 乘以栈宽度的结果千万不能超过一个size_t 类型变量所能表达的最大值。
constpvParameters: 任务的传参。可以为NULL。
uxPriority: 任务优先级。最小优先级为0,最高优先级没有上限,但一般用户会自定义一个上线。
根据使用情况,数值尽量 设置小一点。
constpvCreatedTask:任务句柄。可以使用该句柄对任务进行引用,比如删除任务和改变任务优先级等。可以为NULL。
返回值
pdPASS : 任务创建成功。
其它值 :任务创建失败,可以根据返回的错误值在 projdefs.h文件中找到错误原因。
删除Task API
void vTaskDelete(TaskHandle_t xTaskToDelete)
功能
从RTOS实时内核管理中删除任务。删除的任务将从所有就绪、阻塞、暂停和事件列表中删除
参数描述
xTaskToDelete:创建任务时传出的句柄。如果传入参数为NULl,将会删除正在调用的任务。
返回值
NULL
开始调度Task API
void vTaskStartScheduler()
功能
开始执行任务调度
参数描述
NULL
返回值
NULL
Task延时阻塞API
void vTaskDelay(const TickType_t xTicksToDelay)
功能
从调用 vTaskDelay()开始阻塞任务,直到指定的滴答计数次数。
参数描述
xTicksToDelay:阻塞时间(ticks 时钟数)。一般使用参数 ms/ portTICK_RATE_MS来阻塞以毫秒为单位的时间。
ms为需要阻塞单位为毫秒的数值。
返回值
NULL
将Task阻塞到指定时间API
void vTaskDelayUntil(TickType_t *constpxPreviousWakeTime, const TickType_t xTimeIncrement)
功能
将任务阻塞到指定的时间。利用此API可以实现任务周期性调用。
参数描述
constpxPreviousWakeTime:指向一个变量的指针,该变量保存了任务最后一次解除阻塞的时间。
变量在首次使用之前必须用当前时间初始化。在此之后,变量将在vTaskDelayUntil中自动更新。
xTimeIncrement:周期时间。任务将在*pxPreviousWakeTime + xTimeIncrement时被解除阻塞。
使用相同的xTimeIncrement参数值调用vTaskDelayUntil将导致任务以固定的接口周期执行。
返回值
NULL
获取Task优先级API
UBaseType_t uxTaskPriorityGet(TaskHandle_t xTask)
功能
获取已经创建的任务的优先级
参数描述
xTask: 创建任务时传出的句柄。当传入参数为NULL,则返回当前运行任务的优先级。
返回值
需要获取任务的优先级。
设置Task优先级API
void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority)