您的位置 首页 应用

再说经典:μC/OS-II

μC/OS-II嵌入式实时操作系统自1998年推出以来,因其方便移植、代码量小、实时性强、可靠性高、内核可剪裁等优点,成为我国计算机嵌入式应用领域最受喜爱的实时操作系统(Real-Time Opr

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

  什么是μ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的使命优先级较高,这段程序无法完结预期的功用,会呈现什么问题呢?

  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中必不可少的?没有时钟节拍体系是否能够作业?

  答案是:没有时钟节拍,体系照样能够作业,仅仅无法进行延时或许超时判别,无法调用延时函数来进行使命调度,可是依然有其它办法能够进行使命切换。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/117510.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部