嵌入式操作系统-ucos是什么?

一句话概括ucos系统:一款源代码开放的,抢占式多任务实时操作系统。其在整个嵌入式产品的架构中的角色和主要功能代码如下图所示:ucos 系统建立了用户程序和底层硬件之间沟通的渠道。通过ucos系统的管理和调度,一方面可以很好的对硬件进行驱动;另一方面可以为上层用户软件提供系统级别的软件支撑。

ucos的任务】:

前面我们提到:前后台系统的后台部分,作为软件的核心处理主体,一直处于无限循环状态。同样,ucos的任务和这个后台系统及其他的多任务系统一样,每个任务都是一个独立功能的无限循环。不同的是,ucos支持任务的参数输入

任务如何实现状态变迁】:

世间万物,在其存在期间都有各种各样的生存状态。软件领域里的任务也不例外。在ucos系统中,任务也有着自己的状态表示,同时还可以根据“外界环境”的变化和系统内部提供的指令接口在各个状态之间进行变迁。

任务睡眠状态

睡眠状态下的任务,驻留在内存中,或者可以理解为用户已经在代码实现上完成了coding,但是并没有让ucos接管该任务的管理权。即在这种状态下,ucos系统是不会对这类任务进行调度和处理的。通过ucos系统的指令接口OsTaskCreate和OsTaskDel,实现用户和ucos间对任务管理权的交接。

任务就绪状态

当任务被创建并由ucos接管后,即进入到就绪状态。换句话说,就是等待CPU资源进行任务的运行。但是什么时候能够获取到CPU资源,将由ucos系统调度来决定。

任务运行状态

当任务获取到CPU资源,即进入到运行状态。在该中状态下,任务占用CPU和其他资源按照任务的设定功能执行相关代码,提供相关任务的服务。

任务等待状态

多任务系统中,很多资源都是所有任务共享的。当任务试图获取某项资源失败后,都会进入到等待状态。在等待状态中,该任务会释放CPU资源,进入被等待资源的等待队列中。当被等待资源被释放后,ucos会从等待队列中,找到优先级最高的等待任务恢复到运行状态继续执行。

同时,ucos系统也提供了另一种等待策略:任务延时等待。即运行状态下的任务,可以通过延时等待功能进入到等待状态,此时释放CPU资源。当等待超时后,会重新抢夺CPU资源,至于那个时候能不能抢到,就看超时后调度的时刻是否有优先级更高的任务了。

任务中断状态

中断状态,即任务在执行过程中,被硬件中断处理过程打断执行过程,被迫放弃CPU资源。进入到中断服务函数中。当中断结束后,重新对CPU资源进行抢占。同理,能否抢到CPU资源,就要看任务调度时刻,是否有更高优先级的任务就绪。下图优先级B>C>A。所以当ISR结束后,CPU资源被任务B抢占。

任务信息如何存储】:

现实生活中,每个人都有个人档案用于存放个人的历史和关键信息。同样的,ucos为每个任务专门制作了各自对应的档案,档案对应的数据结构(数据结构体),就被我们称为TCB(Tack Control Block)即任务控制块。有了这些TCB帮助,当任务从切换或者打断中恢复执行,能够保证从被打断点继续执行。具体任务的TCB细节说明,将会在下一个章节的任务管理中,详细介绍。

任务就绪表】:

如上文提到,任务需要进入到就绪状态后,才能够在合适的时间内被ucos系统进行调度。为了便于索引,ucos系统在内部建立了就绪组OsRdyGrp(8个bit单位)和就绪位数组OsRdyTbl[](每个元素为8个bit单位)两个变量,用于和任务的优先级建立索引关系。ucos系统中,共定义0-63,即64个任务优先级。0的优先级最高,63优先级最低。

OsRdyGrp的定义:

OsRdyGrp与OsRdyTbl[]之间的映射图:

:当OsRdyTbl[x]任何一个bit置位,对应的OsRdyGrp的第x位bit也相应置位。x=0-7。

任务如何调度的】:

按照我们前文的介绍,ucos总是让处在就绪状态并且优先级最高的那个任务占用CPU资源运行。那么从64个任务中,如何找到就绪并且优先级最高的任务,就是任务调度器的工作了。部分任务调度器的源码如下:

我们需要重点关注:

  • - 第二个if语句。判断从就绪队列获取的任务最高有限,与当前运行任务的有限级的比较
  • - OS_TASK_SW()的调度:该函数宏定义,用于出发一次任务的调度。

注:在操作系统中,调度总是认为由中断引起。这里很多处理器提供了一种模拟硬中断的机制:软中断语句,让CPU误以为的确发生了中断事件,需要进行任务的调度检查从而进行任务的调度。具体任务的调度细节,如任务现场如何保存,堆栈如何恢复,将会在后面ucos的任务管理里面,重点讲解。

ucos系统的初始化和启动】:

ucos的系统初始化比较简单,直接调用OSInit()即可。需要注意的是:ucos借鉴了模块化的思想,在配置文件OS_CFG.H文件中,定义了一些配置宏定义,可以根据项目的需要进行使能或者去使能。当系统初始化后,我们直接调用OSStart接口,启动ucos系统。调用接口后,调度器将会开始工作,从就绪队列中寻找到优先级最高的那个任务开始执行。

以上内容,仅仅是个人的经验总结,如有疏漏和错误地方,还请各位知友批评指正共同进步。另外如果想对嵌入式操作系统有深入和权威的了解,还可以自行阅读以下书籍。本文章系列仅仅站在答主个人的理解角度,力求用通俗的语言向嵌入式爱好者们普及嵌入式的一些理论和实战知识。

  • 50
    点赞
  • 207
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
嵌入式实时操作系统μC/OS-III是一款非常流行且广泛应用的实时操作系统。它被设计用于嵌入式系统中,满足实时性要求高的应用程序的需求。 uCos-III的电子书是对该实时操作系统的详细介绍和使用指南。这本电子书可以帮助读者了解嵌入式系统的基本概念、实时操作系统的工作原理和应用开发方面的技术。它提供了一系列有关uCos-III的知识和实例,使读者能够快速了解和掌握该实时操作系统的使用方法。 这本电子书主要涵盖以下内容: 1. uCos-III的基本概念:介绍了实时操作系统的定义、特点和应用领域,让读者了解操作系统嵌入式系统中的重要性和作用。 2. uCos-III的架构和特性:介绍了uCos-III的体系结构和主要特性,如任务调度、时钟管理、内存管理、同步与通信等。 3. uCos-III的安装和配置:详细介绍了如何安装和配置uCos-III实时操作系统,包括编译器设置、硬件支持、内核配置等。 4. uCos-III的任务管理:讲解了任务的创建、删除、挂起和恢复等管理操作,同时介绍了任务优先级和实时调度算法。 5. uCos-III的管理服务和通信机制:介绍了信号量、互斥锁、消息队列、事件标志等管理服务和通信机制,帮助读者实现任务间的同步和通信。 6. uCos-III的中断处理和硬件驱动:讲解了中断处理的机制和方法,以及如何编写硬件驱动程序与uCos-III集成。 这本电子书适合嵌入式系统开发人员、学生以及对实时操作系统感兴趣的人阅读。通过学习这本电子书,读者可以准确理解uCos-III实时操作系统的概念和工作原理,并掌握如何使用uCos-III开发和调试嵌入式应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

被大佬糊弄的只会点灯的小菜鸡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值