首页 > 嵌入式软件 > Uc/os II

 μC/OS-II嵌入式实时操作系统自1998年推出以来,因其方便移植、代码量小、实时性强、可靠性高、内核可剪裁等优点,成为我国计算机嵌入式应用领域最受喜爱的实时操作系统(Real-Time Opreating System)之一。由于其源码开源,至今,已经成功在诸多厂家的MCU上移植并应用在各行各业的电子产品之中,因而备受瞩目。此文帮助有意向学习μC/OS-II的初学者全面的、系统的了解实时系统的核心思想,也为正在学习μC/OS-II的童鞋们理清思路,更上层楼。

本文引用地址: http://embed.21ic.com/software/ucos/201703/45058.html

什么是μC/OS-II?

μC/OS-II是一种基于优先级可剥夺型的多任务实时内核,包含了任务调度与管理、时间管理、任务间通信与同步等基本功能。

如何实现多任务?

在μC/OS-II系统中,大多数情况下,1个任务就是一个死循环,特殊情况是,有的任务执行1次后直接销毁自己。既然是死循环如何实现多任务呢?这就涉及到一个完整的任务调度机制,简单来说,就是给每个任务设置合适的优先级,CPU只有一个,优先级高的任务可以抢占优先级低的任务,而独占CPU。在μC/OS-II中,系统可以管理64个任务,有8个任务预留给系统,用户最多可以创建56个任务,而实质上用户不应该创建过多的任务,因为这样的话,优先级最低的任务可能无法得到执行。

何时执行任务调度

简单来说,高优先级的就绪任务发生时,会抢占低优先级任务的CPU,这时系统就会自动执行任务调度。在任务销毁时,挂起时,延时时,中断退出时都会启动任务调度。

这里举个例子,假如下面这段程序具有2个用户任务LED1_TASK,和KEY_TASK。KEY_TASK的任务优先级较高,这段程序无法实现预期的功能,会出现什么问题呢?

1.jpg

 

LED闪灯任务无法得到执行,因为程序一直的执行按键扫描,其优先级较高(这里假定没有中断发生)一直在独占CPU,而没有释放,也就是无法执行任务调度,在LED任务中,调用OSTimeDly()函数的同时,LED任务即被挂起,交出CPU的控制权,同时执行任务调度,系统会选择一个处于就绪状态的优先级最高的任务来执行。

举上面这个例子是为了说明任务调度是在一定情况下发生的,因为是抢占式的,为了让低优先级的任务得到执行,高优先级任务必须在适当的情况下交出CPU,如果在KEY_TASK任务中,在获取按键信息后面调用OSTimeDly()函数,即可使LED闪灯任务得到执行。

关于中断

中断在实时操作系统中具有举足轻重的作用,所以中断程序的设计无疑是编程的要点及难点,在多任务实时操作系统中,不同的中断任务被安排不同的优先级,在允许中断嵌套的情况下,最高优先级的中断总能得到及时响应。中断级的任务可以看成是比最高优先级的任务级任务的优先级还要高。在用户中断服务程序内部,要尽可能的缩短代码量,不要做耗时的操作,正确的做法是调用任务级任务进行相关的数据处理。

同样,问题来了,在中断服务程序中触发某个任务级任务就绪,是否立即进行任务调度,答案是否定的,因为任务级任务的优先级不够,需等待中断服务程序退出,那系统如何知道中断服务程序是否结束了呢,这就需要的中断程序内部调用系统服务函数OSIntExit();以此来触发任务调度。

硬实时与软实时

这里说一下硬实时与软实时的区别,能够在指定的期限完成实时任务(即便在最坏的处理负载下也能如此)的操作系统称为硬实时系统。但并不是任何情况下都需要硬实时支持。如果操作系统在平均情况下能支持任务的执行期限,则称它为软实时系统。

RTOS的优势是硬实时控制,硬实时不是指“快”,而是指可精确预测可控制,能保证在规定时间内完成任务。因为执行时间可预测,所以当你想快时,只要选一个速度合适的CPU即可,这个需要的速度在μC/OS-II系统中是可以精确算出来的。软实时系统的时限是一个柔性灵活的,它可以容忍偶然的超时错误。失败造成的后果并不严重。

举个例子,汽车发生危险时,汽车气囊弹出必须在一定时间内完成,晚一秒都会造成致命伤害(硬实时)。而在图像传输过程中,偶尔丢失1帧图像数据是可以容忍的(软实时)。

任务同步与数据通信

毫无疑问,任务之间都不是相互割裂的,需要进行数据或者信息的交互,为此,μC/OS-II系统提供了用于任务间通信的手段。任务之间可以通过信号量,事件标志组,消息邮箱,消息队列进行同步。而数据通信最简单的方式是采用全局变量来共享资源,这里面涉及到保障数据可靠性的问题,比如,当一个任务正在读数据的时候,还没有读完,这时一个中断触发高级别的任务运行,高级别的任务要更新数据,这就会导致低级别任务读出来的数据是错误的。未解决此问题,可以采用关中断、关调度、使用互斥信号量、使用计数信号量来解决,关中断与关调度比较生硬,也违反了系统的实时性设计原则,因此推荐使用互斥信号量来解决,所谓互斥信号量,相当于一个钥匙,钥匙只有一个,当一个任务要访问该资源时,必须先取得该钥匙。

时钟节拍

μC/OS-II需要用户提供一个周期性的中断来实现延时和超时等操作,这个周期性的时钟叫“时钟节拍”,其频率范围通常在10~1000Hz之间。时钟节拍的频率大小取决于对定时精度的要求,频率越高,系统的负担越重。

问题:时钟节拍是否是μC/OS-II中必不可少的?没有时钟节拍系统是否能够工作?

答案是:没有时钟节拍,系统照样可以工作,只是无法进行延时或者超时判断,无法调用延时函数来进行任务调度,但是仍然有其它方法可以进行任务切换。

换一批

延伸阅读

[真心话] 工程师在工厂上班很丢人?写给在工厂上班的兄弟们

工程师在工厂上班很丢人?写给在工厂上班的兄弟们

或许你现在背井离乡,生活过的马马虎虎,拿着2-3千的工资,有电视看有电脑玩就够了,但是未来在哪里?下面的话请耐心看完,也许会对你有一些的帮助!......

关键字:工程师

[真心话] 硬件工程师“流派”之争:开发实战派 VS 开发理论派

硬件工程师“流派”之争:开发实战派 VS 开发理论派

我之前遇到过一个资深硬件工程师,四十多岁了。那个年代的大学生,比现在年代的学习用功多了,理论功底非常扎实,需要计算的都头头是道。但是做出来的产品就是不行。......

关键字:硬件工程师 实战派 理论派

[疯狂史] PCB设计软件大解析,哪一款才是你的菜?

PCB设计软件大解析,哪一款才是你的菜?

PCB(Printed Circuit Board)设计软件经过多年的发展、不断地修改和完善,或优存劣汰、或收购兼并、或强强联合,现在只剩下Cadence和Mentor两家公司独大。“......

关键字:PCB设计软件

[破谣言] 如果电脑技术最初是中国人发明的,那现在编程是不是就是中文的?

如果电脑技术最初是中国人发明的,那现在编程是不是就是中文的?

现在的编程代码全部都是英文,有没有可能有一天编程代码全是中文呢?而且如果当年计算机由中国人发明,编程代码是否就是以中文为主呢?......

关键字:编程 中文 英文

[新鲜事] 难道你真想到了50岁还靠编程养家吗?

难道你真想到了50岁还靠编程养家吗?

老实说,我在 20 岁时可没打算这样。我编程就是为了挣钱。只要编程还能挣钱,我就愿意一直这样挣下去,差不多就是这样。......

关键字:编程
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14