FreeRTOS Task 2026.7.11

Task创建函数:

image
其中各个参数的含义:
image
一个简单的创建Task示例:
image


接下来是Task删除:

image
简单示例,先创建,根据创建的Task的句柄进行删除:
image
也可以在Task内部将自己删除:
image


输入给Task函数的参数,也就是xTaskCreate()的第四个参数:

它要传一个void*的指针
传个整数示例:
image
传个整数数组示例:
image
传个字符串示例:
image


Task Priority:

获取任务优先级的函数:
image
这里默认优先级最大只能设置为24,创建Task时就算优先级写30,那也是24

相同优先级的多个任务会按照"时间片轮转"(Round-Robin)的方式轮流执行,每个任务运行一个固定的时间片(通常为 1 个 tick),然后切换到下一个同优先级任务。

image

高优先级任务会立即抢占(Preempt)低优先级任务,只要高优先级任务处于就绪态,CPU 就会立即执行它,低优先级任务只能在高优先级任务阻塞或主动让出时才能运行。


修改任务优先级的函数:

image


任务挂起函数:

image
可以在app_main通过句柄挂起Task,也可以在Task内部挂起自己,此时参数直接就是NULL

从挂起态到就绪态的函数:
image

挂起调度器的函数:当前Task调用这个函数,调度器挂起,就是不执行别的Task了,专心执行当前Task。直到恢复调度器才执行别的Task
image

恢复调度器的函数:
image

使用示例:
image


打印出当前所有的Task

image
不同字母所代表的state
image
使用示例:
image


设置任务Stack的大小,也就是下图的第三个参数:并且这个值乘4才是Stack有多少个字节

image
在实际情况中,我们很难知道一个Task需要多大的Stack的空间,我们可以先创建一个较大的空间,然后用下面的函数查看剩余的空间
下面这个函数范围的值的单位依旧是字(四个字节)
image
用上面的VTaskList函数也可以看剩余空间,但是这个函数消耗资源大

调用示例:
image
如果设置的Stack大小 小于实际需要的,那么整个系统就会不断重启


Task Watch Dog

FreeRTOS中有两种看门狗,分别如下面两个图所示:
现在我们要说的是任务看门狗
image
image
触发任务看门狗的代码示例:
image
image

这个优先级为1的任务由于比idle任务(优先级为0)的优先级高,同时没有阻塞情况,所以一直占用CPU

解决办法就是去调用阻塞函数(Delay函数),或者将优先级从1变成0

下面是将我们的Task进入任务看门狗的监控列表,就是让任务看门狗监控我们的Task
image
示例代码:一个函数是将Task2加入任务看门狗的监控列表,一个函数是定期喂狗
image


Queue Delivery Data

队列可用于两个Task之间的数据发送和接收

下图队列创建函数,参数分别为队列的长度和宽度
image
示例代码:
image

往队列中放数据的函数:一般就用第一个
image
示例代码:
image

接受数据的函数:
image
示例代码:
image

看队列中是否有数据的函数:
image


Queue Multiple In Single Out(队列多进单出)

posted @ 2026-07-11 11:04  Gninrael_Peek  阅读(15)  评论(0)    收藏  举报