Task

Task 基本设置

xTaskCrate()

xTaskCreate

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

该宏被设置为1时,优先级不能超过32

系统配置

优先级的定义

优先级的定义

配置文件路径

配置文件路径

优先级的定义

优先级的定义

uxTaskPriorityGet()

获取任务优先级

获取任务优先级

get task priority

get task priority

Same Priority

相同优先级的task,则顺序运行,基于robin调度机制使用时间片共享一个进程时间段。

Same Priority

Same Priority

different Priority

优先级高的先执行,与顺序无关。

Modify Priority

修改优先级 vTaskPrioritySet(TaskHandle_t px, priority);

修改优先级

修改优先级

修改,马上根据新的优先级执行。

Task States

运行状态、准备状态、阻塞状态、挂起状态

task state

task state

注意:
对于阻塞状态有超时的概念,对于挂起状态则没有这种概念。

vTaskSuspend 挂起 & vTaskResume 恢复

task被挂起并恢复

task被挂起并恢复

vTaskSuspendAll() 挂起所有 & vTaskResumeAll() 恢复所有

挂起所有task,同时执行完后不能调用FreeRTOS API函数。必须通过vTaskResumeAll()进行恢复后才能继续直接FreeRTOS API。保证程序的独立运行

指的是系统被挂起后无法被调用

指的是系统被挂起后无法被调用

vTaskList() 任务状态信息

vTaskList展示task信息

vTaskList展示task信息

运行状态
X: 运行状态
B:阻塞状态
R:准备状态
S:挂起状态
D:删除状态

xTask堆栈

xTask堆栈的设置

xTask堆栈的设置

usStackDepth的理解: 为堆栈的深度。即如果堆栈的宽度为4bytes,深度为100,则堆栈空间为100* 4bytes。

usStackDepth

usStackDepth

uxTaskGetStackHighWaterMark() 查询剩余堆栈内存

调用vTaskList消耗内存较大,可以通过uxTaskGetStackHighWaterMark来获取内存信息。

可以用于调试代码

task Watchdogs

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

中断看门狗

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

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

中断看梦的配置

中断看梦的配置

task看门狗

创建时引用

创建时引用

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

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