基于ESP32S3的FreeRTOS之Task(二)
Task
Task 基本设置
xTaskCrate()
pvTaskCode: task函数。
pcName: task name。
usstackDepth: 表示分配的内存。
*pvParmeters: 为task函数的参数指针 ==(void *) #FF9800== ,可以由xTaskCreate函数传递到pvTaskCode。
uxPriority: task执行优先级,空闲状态为0,所以一般设置值大于0。
*pxCreatedTask: task的handle,可以获得task很多信息,类似与于进程的ID。
TASK四种类型
- 参数为整数
参数为数组
数组名为地址,所以不需要取址
参数为结构体
参数为字符串常量
vTaskDelete(xHandle)
删除Task
vTaskDelay()
时延
Task Priorities
系统优先级的范围为[0, max-1],当task设置的优先级超过最大值时会默认为最大值。
==尽量不要修改配置中的优先级最大值,会占用很大内存 #FF572
系统配置
uxTaskPriorityGet()
Same Priority
相同优先级的task,则顺序运行,基于robin调度机制使用时间片共享一个进程时间段。
different Priority
优先级高的先执行,与顺序无关。
Modify Priority
修改优先级 vTaskPrioritySet(TaskHandle_t px, priority);
修改,马上根据新的优先级执行。
Task States
运行状态、准备状态、阻塞状态、挂起状态
注意:
对于阻塞状态有超时的概念,对于挂起状态则没有这种概念。
vTaskSuspend 挂起 & vTaskResume 恢复
vTaskSuspendAll() 挂起所有 & vTaskResumeAll() 恢复所有
挂起所有task,同时执行完后不能调用FreeRTOS API函数。必须通过vTaskResumeAll()进行恢复后才能继续直接FreeRTOS API。保证程序的独立运行
vTaskList() 任务状态信息
运行状态
X: 运行状态
B:阻塞状态
R:准备状态
S:挂起状态
D:删除状态
xTask堆栈
usStackDepth的理解: 为堆栈的深度。即如果堆栈的宽度为4bytes,深度为100,则堆栈空间为100* 4bytes。
uxTaskGetStackHighWaterMark() 查询剩余堆栈内存
调用vTaskList消耗内存较大,可以通过uxTaskGetStackHighWaterMark来获取内存信息。
可以用于调试代码
task Watchdogs
- 中断看门狗300ms、2.task看门狗5s
中断看门狗
task看门狗
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吾辈之人,自当自强不息!!
评论