RTOS(6)任务管理

编程入门 行业动态 更新时间:2024-10-28 06:31:04

<a href=https://www.elefans.com/category/jswz/34/1768029.html style=RTOS(6)任务管理"/>

RTOS(6)任务管理

任务状态理论

我们是怎么实现,两个同优先级的任务之间交替执行的呢?
任务切换的基础:tick中断!




tick为1ms一个周期,可以通过修改时钟配置修改;
running:正在进行的任务3为running;
ready:任务1和任务2处于ready;
blocked(阻塞状态):等待某事,比如小孩口中的饭还没吃完,就得等吃完才喂;
suspend(暂停状态):主动休息或者被命令休息;

如何管理这些任务呢?
链表readylist:A->B->C

任务状态实验

创建三个任务
任务一:进入suspend再resume回来

任务二:进入blocked,delay一会,再进入ready状态

vTaskDelay和vTaskDelayuntil


dosomething()的时间不定,如何才能保证它的执行周期是不变的呢?
vTaskDelay只能保证延时的时间,不考虑dosomething的时间;
vTaskDelay:等待指定个数的Tick count才能ready,继续执行;

vTaskDelayuntil:等待到指定的绝对时刻,才能reday,继续执行;

区别:

空闲任务及其钩子函数


idel task:0
task1:1
task2:2

FreeRtos是封装好的,不会让你随随便便修改它的源代码,所以他开放了钩子函数让用户使用;

任务调度

阻塞状态(blocked)的任务,它在等待“事件”,这个事件有两种类型:时间相关的事件,同步事件;

有三个配置在Freertosconfig中,可以决定我们的调度策略
configUSE_PREEMPTION 可以决定是否可以抢占;
configUSE_TIME_SLICING 可以决定同优先级是否轮流进行,无法进行时间片轮转;
如果置于0,除非任务主动放弃cpu,进入blicked或suspend状态,否则直接霸占,其他任务无法执行;
configIDLE_SHOULD_YIELD 可以决定空闲任务是否礼让别的任务;

更多推荐

RTOS(6)任务管理

本文发布于:2023-12-08 07:39:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672480.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:RTOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!