ucosIII(1)---任务调度

本文详细介绍了uC/OS-III实时操作系统中的任务管理原理,包括任务调度与任务切换的区别、抢占式调度和时间片轮转调度的实现方式,并提供了具体的API函数和配置方法。

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

今天可算是把前几个月开的大坑给补上了,这段时间终于可以更RTOS的随笔了,有错的地方欢迎大家指出,毕竟我太菜。。

这里只是我对uC/OSIII系统的一些个人理解,并不是相关教程,这一部分的教程可以先看这个博客:
https://www.cnblogs.com/data-base-of-ssy/p/6408496.html

毕竟,这是我关于ucosIII的第一步,相关资料主要参照罗蕾老师的:<嵌入式实时操作系统及应用开发> 和邵贝贝老师的那本书:<嵌入式操作系统μC/OSIII>,不过在ucosIII中,邵老师已经从译者变成审校了,请大家支持正版

我在网上找了一本很类似的书籍,放在了csdn上供大家下载
资料书下载地址(内含windows平台下的uscosII的工程文件):

http://download.youkuaiyun.com/download/von_kent/10159097

关于嵌入式操作系统,一般来说都主要有以下几个功能:

这里写图片描述

这里标红的部分—任务管理,也是我这几篇博客一直要讲的东西,同时也是我们选择RTOS的主要目的。

首先要明确任务调度和任务切换的区别:

任务调度:从任务就绪表中找出最高优先级的任务,将该任务的PCB连接至队列开头,简而言之,就是明确下一个要运行的任务是什么

任务切换: 将当前任务的信息保存到TCB中,并进行任务的切换,简而言之,就是跳转到另一个任务中去。

在ucosIII中,不同的任务有不同的优先级,有的任务如果优先级相同的话,则使用时间片轮转调度法进行任务切换

抢占式调度:
这里写图片描述
参考资料:
http://blog.youkuaiyun.com/u013176681/article/details/39256191

时间片轮转调度:
这里写图片描述
参考资料:
https://baike.baidu.com/item/%E6%97%B6%E9%97%B4%E7%89%87%E8%BD%AE%E8%BD%AC%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95/7170554?fr=aladdin

->当高优先级任务就绪,且发生了调度,则高优先级任务挥霍的使用权

关于开启任务的时间片轮转调度法:
在初始化的时候,记得要将时间片函数初始化:

void  OSSchedRoundRobinCfg(CPU_BOOLEAN   en,
                           OS_TICK  dflt_time_quanta,
                           OS_ERR       *p_err)

其中,第一个入口参数为一个布尔变量,初始化时设置为1,第二个入口参数为时间片的个数,第三个式&err,初始化前设置的一个变量。
时间片长度=时间片个数* 时钟频率
所谓的时间片长度,就是rtos运行状态下给该任务运行的长度,运行完之后如果还没达到长度的话,可是使用

    OSSchedRoundRobinYield(&err);

使得任务进行切换。

关于uscoIII时钟频率可以在下图中配置:

这里写图片描述

关于任务的挂起与解,可参考
入口参数可以在代码中查询

OSTaskSuspend();
OSTaskResume();

同样,关于任务的删除可以参照API函数:

OSTaskDel();

大部分情况下,uC/OSIII的API函数都是OS****,如果是OS_***这种带了一个下划线格式的函数,一般都是系统内部或者中断服务函数调用。

所以,实际上,RTOS并不是让你建立的任务并行运行,使用RTOS的目的式提高了任务之间的切换时间,也就是提高任务的实时性(Real Time)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值