何时使用嵌入式OS及任务划分

什么时候该使用OS?

前面我们介绍了嵌入式基于OS的软件设计和基于前后台系统的软件设计,那麽在什么情况下需要使用OS呢?我发现有好多开发人员把OS用于项目的开发,都有一种心态,似乎他们的系统只有使用过OS才是高明的系统,才是有技术含量的系统,完全没有考虑过应用实际。我要说的是一个系统的设计的高明与否,不是看你有没有使用OS,而是你的设计是否简单,简单能让你开发时间更短,简单能让你的系统更好维护。简单来源于良好的数据结构设计,来源于良好的编码风格(自注释代码),来源于好的框架设计,比如上面说的os调度框架,你的前后台系统也完全可以设计出一个更加适合你的应用的调度框架。以数据为驱动的设计,往往能使你的系统更简单,易于扩展和维护。哎,罗嗦了一大堆,似乎跑题了,那么在什么情况下应上OS呢?

1.当有多个任务都很耗时,而这些任务可以并发调用,这时候为了提高任务之间的调度并发性,应该考虑使用OS,这一点是使用OS的很重要的原因,有的人说os能提高程序的实时性,在这个方面os的确可以提高这些任务的实时性,对于那些关键性任务,一次调用都不能遗漏的任务,对于这种实时,还是要靠中断来完成,而非os系统来完成,这个可能是大家的一个误区,所以说,前后台系统通过中断系统来保证关键任务的实时性丝毫不逊于使用os的系统。相反,os系统在任务调度的时候,会使用定时器中断,这个也会影响系统的实时性,虽然任务切换很短。而使用前后台系统,往往只能通过排队的方式实现。

2.当业务逻辑(剧本)过于复杂,而通过自设计的调度器来调度这些剧本的时候,使得设计不能简单,相较于os往往趋于复杂,不易维护,为了使系统设计更加简单可靠,可以考虑使用os

3.当系统资源充足,你的团队熟悉OS的设计方法,而你不想写自己的调度方法,觉得这样更加节省开发时间

4.对于便携式设备,使用前后台系统比使用os方法更易控制系统的功耗,因为 os系统方式,为了使任务调度及时,往往定时器中断调度更频繁,cpu的唤醒频率更频繁,从这一点来看,前后台系统功耗处理上要优于os方式。
 

任务划分

在《前后台系统VS嵌入式OS,何时该上OS?》一文中介绍了何时应该将OS应用于嵌入式设计中,本文将介绍基于OS的任务设计,一般来说,应用程序设计包括两个方面,一个是业务逻辑的设计,另一个是业务逻辑的调度设计(这个由OS来完成)。有了OS,我们现在可以把更多的精力转到业务逻辑的设计上,前面讲了,业务逻辑只是电影的剧本,剧本要动起来,还的交由播放器播放(OS调度),所以在设计业务逻辑的同时,必须要考虑业务逻辑的调度,这就是我们今天要讲的任务设计。任务设计包括任务的划分;任务的优先级按排;任务的函数结构设计;任务之间的同步设计。

1任务的划分

任务的划分好坏直接关系到系统的设计的成败,往往好的任务划分,能够使设计更简单,任务多了,资源开销多,增加了任务之间的同步及频繁切换的开销,任务少了,可以减少共享资源的数量,降低了任务之间切换及同步的开销,不利于业务逻辑的并发调用。

(1)设备依赖性任务的划分

我们知道,并发性是任务的基本特性,而控制输入/输出设备的程序具有先天的并发性,把它们分别封装为不同的任务是合理的,这样,就可以划分出第一批任务,如键盘任务,显示任务、数据采集任务,控制任务和通信任务。

(2)关键任务的划分

所谓关键任务就是该任务不能遗漏,即使一次遗漏也不可以,这类任务往往交由中断处理程序来处理,若不能交给中断处理,则应给该任务安排最高优先级,保证其能得到及时调度,由于其优先级最高,为了不影响其他任务的调度,因此这类任务应尽量简短快速,若这类任务执行时间长,应将任务的处理交由优先级较低的任务去处理,该任务仅保存关键任务的通知信息(这些信息往往通过队列方式保存,只要保证消费能力大于生产能力就ok了)。

(3)数据处理任务的划分

这类任务往往需要消耗CPU过多时间,而对实时性要求不高,只需要数据的生产能力小于数据的消费能力就行了,它们的优先级必须安排的比较低,只使用其它任务剩余的机时来进行数据处理。

(4)触发条件相同的任务的划分

如果若干功能由相同的事件触发,则可以将这些功能组合为一个任务,从而免除将事件发给多个任务的工作量。

(5)运行周期相同任务的划分

将周期相同的功能组合在一起封装为一个任务,就可以避免一个时间事件触发几个任务,省去事件分发操作和他们之间的通信。

(6)顺序操作任务的划分

如果若干功能按固定顺序进行流水作业,相互之间完全没有并发性,则应该将这些功能组合为一个任务。这样一来也可以减少任务之间的同步过程。

(7)功能聚合任务的划分

将关系密切的若干功能组合成为一个任务,达到功能聚合的效果。这样也会减少任务之间的同步过程。

最后,若按照上述步骤,还存在多过任务之间需要同步的情况,可以试着将这些任务合并,但前提是不影响系统性能的情况下。总而言之,任务的划分首先要满足系统的性能,其次,就要使设计简单,再就是尽可能降低任务之间的同步过程,能不用同步尽量不用。
本文转自 https://blog.csdn.net/rabinsong/article/details/9635047

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值