ImageVerifierCode 换一换
格式:DOC , 页数:45 ,大小:1.18MB ,
资源ID:774483      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-774483.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统软件架构设计.DOC)为本站会员(国***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统软件架构设计.DOC

1、 嵌入式系统软件架构设计张志明目录1. 前言 .42. 决定架构的因素和架构的影响 .42.1. 常见的误解 .52.1.1. 小型的系统不需要架构 .52.1.2. 敏捷开发不需要架构 .73. 嵌入式环境下软件设计的特点 .73.1. 和硬件密切相关 .73.2. 稳定性要求高 .73.3. 内存不足 .83.3.1. 虚拟内存技术 .83.3.2. 两段式构造 .93.3.3. 内存分配器 .103.3.4. 内存泄漏 .113.4. 存储设备易损坏,速度较慢 .113.4.1. 损耗均衡 .113.4.2. 错误恢复 .123.5. 故障成本高昂 .124. 软件框架 .134.1.

2、嵌入式软件架构面临的问题 .134.2. 什么是框架 .134.2.1. 软件复用的层次 .134.2.2. 针对高度特定领域的抽象 .144.2.3. 框架可以实现和规定非功能性需求 .154.3. 一个框架设计的实例 .164.3.1. 基本架构 .164.3.2. 功能特点 .164.3.3. 分析 .164.3.4. 实际效果 .204.4. 框架设计中的常用模式 .204.4.1. 模板方法模式 .204.4.2. 创建型模式 .214.4.3. 消息订阅模式 .214.4.4. 策略模式 .224.5. 框架的缺点 .225. 自动代码生成 .235.1. 机器能做的事就不要让人来

3、做 .235.2. 举例 .235.2.1. 消息的编码和解码 .235.2.2. GUI 代码 .245.2.3. 小结 .255.2.4. Google Protocol Buffer.256. 面向语言编程(LOP) .276.1. 从自动化代码生成更进一步 .276.2. 优势和劣势 .296.3. 在嵌入式系统中的应用 .297. 测试 .307.1. 可测试性是软件质量的一个度量指标 .307.2. 测试驱动的软件架构 .317.3. 系统测试 .317.3.1. 界面自动化测试 .317.3.2. 基于消息的自动化测试 .337.3.3. 自动化测试框架 .337.3.4. 回归

4、测试 .357.4. 集成测试 .357.5. 单元测试 .357.5.1. 圈复杂度测量 .387.5.2. 扇入扇出测量 .387.5.3. 框架对单元测试的意义 .398. 维护架构的一致性 .399. 一个实际嵌入式系统架构的演化 .409.1. 数据处理 .419.2. 窗口管理 .419.3. MVC 模式 .429.4. 大量类似模块,低效的复用 .439.5. 远程控制 .439.6. 自动化的 TL1 解释器 .449.7. 测试的难题 .449.8. 小结 .4410. 总结 .451. 前言嵌入式是软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一

5、些问题又具有相当的通用性,可以推广到其他的领域。本课程试图从嵌入式软件架构设计出发,启发大家对软件架构设计的理解。本课程的很多内容是对谢老师课程在嵌入式领域的具体阐述。提起嵌入式软件设计,传统的印象是单片机,汇编,高度依赖硬件。传统的嵌入式软件开发者往往只关注实现功能本身,而忽视诸如代码复用,数据和界面分离,可测试性等因素。从而导致嵌入式软件的质量高度依赖开发者的水平,成败系之一身。随着嵌入式软硬件的飞速发展,今天的嵌入式系统在功能,规模和复杂度各方面都有了极大的提升。比如,Marvell 公司的 PXA3xx 系列的最高主频已经达到 800Mhz,内建 USB,WIFI,2D 图形加速,32

6、 位 DDR 内存。在硬件上,今天的嵌入式系统已经达到甚至超过了数年前的 PC 平台。在软件方面,完善的操作系统已经成熟,比如 Symbian, Linux, WinCE。基于完善的操作系统,诸如字处理,图像,视频,音频,游戏,网页浏览等各种应用程序层出不穷,其功能性和复杂度比诸 PC 软件不遑多让。原来多选用专用硬件和专用系统的一些商业设备公司也开始转换思路,以出色而廉价的硬件和完善的操作系统为基础,用软件的方式代替以前使用专有硬件实现的功能,从而实现更低的成本和更高的可变更,可维护性。2. 决定架构的因素和架构的影响架构不是一个孤立的技术的产物,它受多方面因素的影响。同时,一个架构又对软件

7、开发的诸多方面造成影响。软件架构软件规模生命周期非功能性需求非功能性需求团队组成开发模式下面举一个具体的例子。摩托车的发动机在出厂前必须通过一系列的测试。在流水线上,发动机被送到每个工位上,由工人进行诸如转速,噪音,振动等方面的测试。要求实现一个嵌入式设备,具备以下基本功能:1. 安装在工位上,工人上班前开启并登录。2. 通过传感器自动采集测试数据,并显示在屏幕上。3. 记录所有的测试结果,并提供统计功能。比如次品率。如果你是这个设备的架构师,哪些问题是在设计架构的时候应该关注的呢?2.1.常见的误解2.1.1. 小型的系统不需要架构有相当多的嵌入式系统规模都较小,一般是为了某些特定的目的而设

8、计的。受工程师认识,客户规模和项目进度的影响,经常不做任何架构设计,直接以实现功能为目标进行编码。这种行为表面上看满足了进度,成本,功能各方面的需求,但是从长远来看,在扩展和维护上付出的成本,要远远高于最初节约的成本。如果系统的最初开发者继续留在组织内并负责这个项目,那么可能一切都会正常,一旦他离开,后续者因为对系统细节的理解不足,就可能引入更多的错误。要注意,嵌入式系统的变更成本要远远高于一般的软件系统。好的软件架构,可以从宏观和微观的不同层次上描述系统,并将各个部分隔离,从而使新特性的添加和后续维护变得相对简单。举一个城铁刷卡机的例子,这个例子在前面的课程中出现过。简单的城铁刷卡机只需要实

9、现如下功能:开始读取刷卡器信息余额充足 ?Y扣费 CMySimpleClass();.private:int SomeData;CMyCompoundClass:class CMyCompoundClass public:CMyCompoundClass();CMyCompoundClass();.private:CMySimpleClass* iSimpleClass; ;在 CMyCompoundClass 的构造函数里初始化 iSimpleClass 对象。CMyCompoundClass:CMyCompoundClass()iSimpleClass = new CMySimpleCla

10、ss; 当创建 CMyCompoundClass 的时候会发生什么呢?CMyCompoundClass* myCompoundClass = new CMyCompoundClass;1. 为 CMyCompoundClass 的对象分配内存2. 调用 CMyCompoundClass 对象的构造函数3. 在构造函数中创建一个 CMySimpleClass 的实例4. 构造函数结束返回一切看起来都很简单,但是如果第三步创建 CMySimpleClass 对象的时候发生内存不足的错误怎么办呢?构造函数无法返回任何错误信息以提示调用者构造没有成功。调用者于是获得了一个指向 CMyCompoundC

11、lass 的指针,但是这个对象并没有构造完整。如果在构造函数中抛出异常会怎么样呢?这是个著名的噩梦,因为析构函数不会被调用,在创建 CMySimpleClass 对象之前如果分配了资源就会泄露。关于在构造函数中抛出异常可以单讲一个小时,但是有一个建议是:尽量避免在构造函数中抛出异常。所以,使用两段式构造法是一个更好的选择。简单的说,就是在构造函数避免任何可能产生错误的动作,比如分配内存,而把这些动作放在构造完成之后,调用另一个函数。比如:AddressBook* book = new AddressBook()If(!book-Construct()delete book;book = NULL;这样可以保证当 Construct 不成功的时候释放已经分配的资源。在最重要的手机操作系统 Symbian 上,二段式构造法普遍使用。3.3.3. 内存分配器不同的系统有着不同的内存分配的特点。有些要求分配很多小内存,有的则需要经常增长已经分配的内存。一个好的内存分配器对嵌入式的软件的性能有时具有重大的意义。应该在系统设计时保证整个系统使用统一的内存分配器,并且可以随时更换。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。