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四种类型
  1. 参数为整数

参数为整数

参数为数组

数组名为地址,所以不需要取址

参数为数组

参数为结构体

结构体

参数为字符串常量

字符串常量

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

  1. 中断看门狗300ms、2.task看门狗5s

中断看门狗

中断看门狗调用的是定时器组一

中断看梦的配置

task看门狗

创建时引用

将任务加入任务看门狗,并喂狗,如果不喂狗则会报idle错误