基于ESP32S3的FreeRTOS之Task(二)
Task
Task 基本设置
xTaskCrate()
xTaskCreate
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
该宏被设置为1时,优先级不能超过32
系统配置
优先级的定义
配置文件路径
优先级的定义
uxTaskPriorityGet()
获取任务优先级
get task priority
Same Priority
相同优先级的task,则顺序运行,基于robin调度机制使用时间片共享一个进程时间段。
Same Priority
different Priority
优先级高的先执行,与顺序无关。
Modify Priority
修改优先级 vTaskPrioritySet(TaskHandle_t px, priority);
修改优先级
修改,马上根据新的优先级执行。
Task States
运行状态、准备状态、阻塞状态、挂起状态
task state
注意:
对于阻塞状态有超时的概念,对于挂起状态则没有这种概念。
vTaskSuspend 挂起 & vTaskResume 恢复
task被挂起并恢复
vTaskSuspendAll() 挂起所有 & vTaskResumeAll() 恢复所有
挂起所有task,同时执行完后不能调用FreeRTOS API函数。必须通过vTaskResumeAll()进行恢复后才能继续直接FreeRTOS API。保证程序的独立运行
指的是系统被挂起后无法被调用
vTaskList() 任务状态信息
vTaskList展示task信息
运行状态
X: 运行状态
B:阻塞状态
R:准备状态
S:挂起状态
D:删除状态
xTask堆栈
xTask堆栈的设置
usStackDepth的理解: 为堆栈的深度。即如果堆栈的宽度为4bytes,深度为100,则堆栈空间为100* 4bytes。
usStackDepth
uxTaskGetStackHighWaterMark() 查询剩余堆栈内存
调用vTaskList消耗内存较大,可以通过uxTaskGetStackHighWaterMark来获取内存信息。
可以用于调试代码
task Watchdogs
- 中断看门狗300ms、2.task看门狗5s
中断看门狗
中断看门狗调用的是定时器组一
中断看梦的配置
task看门狗
创建时引用
将任务加入任务看门狗,并喂狗,如果不喂狗则会报idle错误
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吾辈之人,自当自强不息!!
评论