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

1任务的划分

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

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

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

(2)关键任务的划分

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

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

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

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

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

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

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

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

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

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

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

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

基于嵌入式OS的任务设计-----任务划分的更多相关文章

  1. 基于Linux的嵌入式文件系统构建与设计

    摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...

  2. 基于cocos2d-x的游戏框架设计——李成

    视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...

  3. 基于raw os 的事件触发系统

    Raw os的事件触发系统有以下特点: 1 基于UML的状态机理念设计,实现了有限状态机(fsm)以及层次状态机(HSM). 2 实现了活动对象(ACTIVE OBJECT)的特性,一个活动对象包含了 ...

  4. DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)

    这篇文章入选CSDN极客头条 http://geek.csdn.net/news/detail/71572 当前,要保证业务的市场竞争力,仅靠设计一个可用并且好看的产品,已经完全不能满足要求.全球消费 ...

  5. 基于嵌入式Linux的千兆以太网卡驱动程序设计及测试

    一. 引言 千兆以太网是一种具有高带宽和高响应的新网络技术,相关协议遵循IEEE 802.3规范标准.采用和10M以太网相似的帧格式.网络协议和布线系统,基于光纤和短距离同轴电缆的物理层介质,更适用于 ...

  6. 【miscellaneous】【ARM-Linux开发】ARM平台基于嵌入式Linux Gstreamer 使用

    1). 简介 随着ARM平台性能的日益强大和嵌入式设备的发展,对于多媒体处理如音视频播放,摄像头,流媒体处理等需求也日益增多,本文就通过几个基于嵌入式Linux下多媒体应用的示例来简单展示下使用Gst ...

  7. 基于DDD的微服务设计和开发实战

    你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴 ...

  8. 走进MEasy的世界:基于STM32MP1的IOT参考设计

    前言:在万物互联快速发展的趋势下,板卡处理器性能.内存大小.接口外设等都是人们非常关心的硬件参数,但是如何让硬件的作用实现它的功能最大化,一套完善的软件支持尤为重要. 背景:随着HTML5技术的发展, ...

  9. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

随机推荐

  1. JavaScript之函数作用域

    有过类似C语言编程经验的同学应该都知道“块级作用域(block scope)”:花括号内的每一段代码都具有各自的作用域,而且在声明它们的代码段之外是不可见的.而在JavaScript中是没有块级作用域 ...

  2. 探测器 C++ Singleton(辛格尔顿)

    一.静态模式不是单一的情况下, 刚开始学习的人可能误, 误以为所有的成员变量和成员方法用于 static , 就是单例模式了: class Singleton { public:     /* sta ...

  3. react.js 从零开始(二)组件的生命周期

    什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...

  4. ExtJs在disabled和readOnly美学分析

    ExtJs中disabled和readOnly美观度的分析 ExtJs中.假设设置输入框为仅仅读属性,一般第一考虑的都是readonly=true 它的效果和正常输入框一样,可是不同意输入: 然而,它 ...

  5. 在MVC5中的使用Ninject

    在MVC5中的使用 Ninject 从MVC3中就开始接触Ninject这个IOC工具.也一直是MVC Framework系列书籍中推荐的IOC工具,当然还有优秀的Autofac等.性能和使用上面个有 ...

  6. 框架搭建资源 (二) 添加M(模型)

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  7. 使用Heartbeat实现双机热备

    使用Heartbeat实现"双机热备"或者称为"双机互备"heartbeat的工作原理:heartbeat最核心的包含两个部分,心跳监測部分和资源接管部分,心跳 ...

  8. Instruments-Automation: 通过命令行执行测试用例

    为了实现该脚本的自己主动定时执行.我们需要开始在命令行和脚本,详细代码如下所示的: instruments -t /Applications/Xcode.app/Contents/Applicatio ...

  9. 再谈IE的浏览器模式和文档模式

    原文:再谈IE的浏览器模式和文档模式 以前在 “IE8兼容视图(IE7 mode)与独立IE7的区别”一文中曾经涉及过浏览器模式和文档模式,但二者的区别却不甚了了,现在有了新的认识,再补充一下. 1. ...

  10. python算法题

    python几道简单的算法题   最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都 ...