FreeRTOS基本介绍、列表、移植、值得注意的点

本文详细介绍了FreeRTOS的调度策略(抢占式和时间片),任务优先级设定,时间片长度,以及任务切换机制。此外,还探讨了FreeRTOS的移植步骤,包括配置文件调整和中断管理。重点强调了中断对任务调度的影响和堆栈设置的重要性。

1、FreeRTOS:

(1)调度策略使用了抢占式调度和时间片调度的结合,不同级别间的任务抢占式调度,同级别任务采用时间片调度。采用了动态内存申请。

(2)任务优先级:数字越高,任务优先级越高。STM32中最大为32-1

(3)时间片的长度,依据滴答定时器的设定。滴答定时器为最高优先级

(4)任务切换:高优先级会延时释放CPU控制权

电机控制任务balance:100Hz频率运行,优先级为4(vTaskDelayUntil()函数)

OLED显示任务show: 1Hz频率运行,优先级为3(vTaskDelayUntil()函数)

消息帧任务modbus:优先级为0,没有更高优先级任务抢占时会一直运行

 (但这样相当于一直占用空闲CPU的资源,设置为更高优先级可能会更好)

vTaskDelayUntil()函数:FreeRTOS中任务延时函数之一,让任务按照指定周期性方式运行。会使任务挂起,直至指定时间到达为止。时间为:上次此任务运行的时间+周期频率。

(5)任务堆栈:任务切换时,存储任务数据的内存区域。设置为了512

(6)滴答定时器

时间节拍频率设置为1000,周期1ms

初始化于delay_init(u8 SYSCLK)函数,SYSCLK=168

reload是滴答定时器的计数值。

reload = SYSCLK*100000/configTICK_RATE_HZ = 168*1000000/1000 = 168*1000

所以单次时间:reload/168M = 1ms

(7)开始任务start_task:用于创建其他任务

(8)临界区:相当于关中断,关闭所有优先级的中断

创建完start_task任务后退出临界区

(9)任务调度器的挂起:未关闭中断,只是停止任务的切换,不会被其他任务打断

仅仅防止了任务间的资源争夺

vTaskSuspend()、vTaskResume()挂起单个任务

(10)FreeRTOS的中断管理:

通常只能管理5~15优先级的,通过portDISABLE_INTERRUPTS(),优先级分组默认为4,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值