FreeRTOS的任务与调度

本文介绍了FreeRTOS的任务调度机制,包括抢占式调度、任务状态(就绪态、运行态、阻塞态、挂起态)的转换以及如何通过配置FreeRTOSConfig.h文件调整系统参数。在任务调度中,滴答时钟中断用于执行任务切换,确保高优先级任务得到执行。此外,还讨论了任务的创建规范,强调任务不应有返回值并以无限循环运行。xTaskCreate()函数用于创建任务,任务优先级由uxPriority参数决定。最后,提到了通过API接口对任务进行管理,如改变优先级、挂起和删除任务等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先FreeRTOS可以通过抢占式/时间片方式进行任务调度,这可以通过配置FreeRTOSConfig.h文件中的对应的宏值configUSE_PREEMPTION/configUSE_TIME_SLICING来完成。我使用了抢占式调度的方式,在FreeRTOS中的任务基本满足如下方式:

 

 

当我们创建一个任务后,这个任务就处于就绪态,处于就绪态的所有任务,挂在同一条任务链表上,当任务开始调度,进行任务切换时,就绪态的任务中具有最高优先级的任务就进入运行态。而运行态的任务在任务执行过程中,可能需要等待某个内容,若一直等待将会占用处理器资源,此时可以令其进入阻塞态,阻塞态可以通过使用等待队列阻塞/延时阻塞/等待互斥信号阻塞等方式进入,而进入阻塞态的任务一旦等待的事件触发,则进入就绪态,等待下次任务调度继续执行。当我们不需要一个任务,而且又不希望删除任务的时候,可以利用创建任务时生成的任务句柄,让任务进入挂起态,且当我们需要任务回归时,只需要重新注册一下这个任务句柄就好。所有提到的阻塞态、就绪态、挂起态均有一个链表,大家有兴趣可以看一下内核代码实现。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在FreeRTOS中,当开始任务调度后,内核通过滴答时钟中断实现任务调度,而滴答时钟可以通过配置FreeRTOSConfig.h文件中的宏configTICK_RATE_HZ来实现,当滴答中断发生时,内核会查询就绪任务表,并使就绪任务表中具有最高优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ArvinXD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值