基于嵌入式OS的任务设计-----任务划分
在《前后台系统VS嵌入式OS,何时该上OS?》一文中介绍了何时应该将OS应用于嵌入式设计中,本文将介绍基于OS的任务设计,一般来说,应用程序设计包括两个方面,一个是业务逻辑的设计,另一个是业务逻辑的调度设计(这个由OS来完成)。有了OS,我们现在可以把更多的精力转到业务逻辑的设计上,前面讲了,业务逻辑只是电影的剧本,剧本要动起来,还的交由播放器播放(OS调度),所以在设计业务逻辑的同时,必须要考虑业务逻辑的调度,这就是我们今天要讲的任务设计。任务设计包括任务的划分;任务的优先级按排;任务的函数结构设计;任务之间的同步设计。
1任务的划分
任务的划分好坏直接关系到系统的设计的成败,往往好的任务划分,能够使设计更简单,任务多了,资源开销多,增加了任务之间的同步及频繁切换的开销,任务少了,可以减少共享资源的数量,降低了任务之间切换及同步的开销,不利于业务逻辑的并发调用。
(1)设备依赖性任务的划分
我们知道,并发性是任务的基本特性,而控制输入/输出设备的程序具有先天的并发性,把它们分别封装为不同的任务是合理的,这样,就可以划分出第一批任务,如键盘任务,显示任务、数据采集任务,控制任务和通信任务。
(2)关键任务的划分
所谓关键任务就是该任务不能遗漏,即使一次遗漏也不可以,这类任务往往交由中断处理程序来处理,若不能交给中断处理,则应给该任务安排最高优先级,保证其能得到及时调度,由于其优先级最高,为了不影响其他任务的调度,因此这类任务应尽量简短快速,若这类任务执行时间长,应将任务的处理交由优先级较低的任务去处理,该任务仅保存关键任务的通知信息(这些信息往往通过队列方式保存,只要保证消费能力大于生产能力就ok了)。
(3)数据处理任务的划分
这类任务往往需要消耗CPU过多时间,而对实时性要求不高,只需要数据的生产能力小于数据的消费能力就行了,它们的优先级必须安排的比较低,只使用其它任务剩余的机时来进行数据处理。
(4)触发条件相同的任务的划分
如果若干功能由相同的事件触发,则可以将这些功能组合为一个任务,从而免除将事件发给多个任务的工作量。
(5)运行周期相同任务的划分
将周期相同的功能组合在一起封装为一个任务,就可以避免一个时间事件触发几个任务,省去事件分发操作和他们之间的通信。
(6)顺序操作任务的划分
如果若干功能按固定顺序进行流水作业,相互之间完全没有并发性,则应该将这些功能组合为一个任务。这样一来也可以减少任务之间的同步过程。
(7)功能聚合任务的划分
将关系密切的若干功能组合成为一个任务,达到功能聚合的效果。这样也会减少任务之间的同步过程。
最后,若按照上述步骤,还存在多过任务之间需要同步的情况,可以试着将这些任务合并,但前提是不影响系统性能的情况下。总而言之,任务的划分首先要满足系统的性能,其次,就要使设计简单,再就是尽可能降低任务之间的同步过程,能不用同步尽量不用。
基于嵌入式OS的任务设计-----任务划分的更多相关文章
- 基于Linux的嵌入式文件系统构建与设计
摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...
- 基于cocos2d-x的游戏框架设计——李成
视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...
- 基于raw os 的事件触发系统
Raw os的事件触发系统有以下特点: 1 基于UML的状态机理念设计,实现了有限状态机(fsm)以及层次状态机(HSM). 2 实现了活动对象(ACTIVE OBJECT)的特性,一个活动对象包含了 ...
- DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)
这篇文章入选CSDN极客头条 http://geek.csdn.net/news/detail/71572 当前,要保证业务的市场竞争力,仅靠设计一个可用并且好看的产品,已经完全不能满足要求.全球消费 ...
- 基于嵌入式Linux的千兆以太网卡驱动程序设计及测试
一. 引言 千兆以太网是一种具有高带宽和高响应的新网络技术,相关协议遵循IEEE 802.3规范标准.采用和10M以太网相似的帧格式.网络协议和布线系统,基于光纤和短距离同轴电缆的物理层介质,更适用于 ...
- 【miscellaneous】【ARM-Linux开发】ARM平台基于嵌入式Linux Gstreamer 使用
1). 简介 随着ARM平台性能的日益强大和嵌入式设备的发展,对于多媒体处理如音视频播放,摄像头,流媒体处理等需求也日益增多,本文就通过几个基于嵌入式Linux下多媒体应用的示例来简单展示下使用Gst ...
- 基于DDD的微服务设计和开发实战
你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴 ...
- 走进MEasy的世界:基于STM32MP1的IOT参考设计
前言:在万物互联快速发展的趋势下,板卡处理器性能.内存大小.接口外设等都是人们非常关心的硬件参数,但是如何让硬件的作用实现它的功能最大化,一套完善的软件支持尤为重要. 背景:随着HTML5技术的发展, ...
- 基于Verilog HDL整数乘法器设计与仿真验证
基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...
随机推荐
- JSCover+WebDriver/Selenium获得JS
代码覆盖
我们看JSCover(http://tntim96.github.io/JSCover/manual/manual.xml)介绍及使用说明的时候,往往被图形界面所吸引.这样的方式比較适合手工操作,点击 ...
- iOS:删除小程序
//Applet的批次从父视图中移除 NSArray *subViews = [_scrollView subviews]; if([subViews count] != 0) { [subViews ...
- rman(上)
CHANGE命令更改备份和副本的状态 1.change backupset 100 unavailable CATALOG命令是用来备份的碎片和复制信息到RMAN数据库 1.息增加到RMAN ...
- Ubuntu 14.1 构造NFS
主办IP:129.1.4.189.目标计算机IP:129.1.22.96 1.运行命令:apt-get install nfs-kernel-server ; 2.运行命令:mkdir /tftpbo ...
- POJ3690 Constellations 【KMP】
Constellations Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 5044 Accepted: 983 Des ...
- js之with
网上找资料的时候看到有js代码里出现了大量的with语句,有点好奇,这里做下总结: 1)简要说明 with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性. ...
- C#中四个判等函数的认识
donet提供了四个判等函数,分别是referenceEqual,静态Equal,具体类型Equal,和==. 首先来说,object.referenceEqual和静态Equal public st ...
- 用windows性能监视器监控sqlserver的常见指标
用windows性能监视器监控sqlserver的常见指标 上边文章中提到win的性能监视器是监控数据库性能必备的工具,接下来我就给大家介绍一些常见的监控指标,其实无非就是磁盘,cpu,内存等硬件 ...
- Linux学习笔记——怎样在交叉编译时使用共享库
0.前言 在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如: [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件 ...
- Hibernat之关系的处理一对多/多对一
第一步:编写两个pojo,比如一个学生表一个班级表 这里使用注解. 需要 班级表: package com.qcf.pox; import java.util.HashSet; import jav ...