FreeRTOS Task 2026.7.11
Task创建函数:

其中各个参数的含义:

一个简单的创建Task示例:

接下来是Task删除:

简单示例,先创建,根据创建的Task的句柄进行删除:

也可以在Task内部将自己删除:

输入给Task函数的参数,也就是xTaskCreate()的第四个参数:
它要传一个void*的指针
传个整数示例:

传个整数数组示例:

传个字符串示例:

Task Priority:
获取任务优先级的函数:

这里默认优先级最大只能设置为24,创建Task时就算优先级写30,那也是24
相同优先级的多个任务会按照"时间片轮转"(Round-Robin)的方式轮流执行,每个任务运行一个固定的时间片(通常为 1 个 tick),然后切换到下一个同优先级任务。

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

任务挂起函数:

可以在app_main通过句柄挂起Task,也可以在Task内部挂起自己,此时参数直接就是NULL
从挂起态到就绪态的函数:

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

恢复调度器的函数:

使用示例:

打印出当前所有的Task

不同字母所代表的state

使用示例:

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

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

用上面的VTaskList函数也可以看剩余空间,但是这个函数消耗资源大
调用示例:

如果设置的Stack大小 小于实际需要的,那么整个系统就会不断重启
Task Watch Dog
FreeRTOS中有两种看门狗,分别如下面两个图所示:
现在我们要说的是任务看门狗


触发任务看门狗的代码示例:


这个优先级为1的任务由于比idle任务(优先级为0)的优先级高,同时没有阻塞情况,所以一直占用CPU
解决办法就是去调用阻塞函数(Delay函数),或者将优先级从1变成0
下面是将我们的Task进入任务看门狗的监控列表,就是让任务看门狗监控我们的Task

示例代码:一个函数是将Task2加入任务看门狗的监控列表,一个函数是定期喂狗

Queue Delivery Data
队列可用于两个Task之间的数据发送和接收
下图队列创建函数,参数分别为队列的长度和宽度

示例代码:

往队列中放数据的函数:一般就用第一个

示例代码:

接受数据的函数:

示例代码:

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


浙公网安备 33010602011771号