首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 软件水平考试 > 复习资料 > 系统架构设计师 > 正文

嵌入式系统关键技术分析与开发应用

来源:考试吧Exam8.com) 2007-1-15 10:06:49 考试吧:中国教育培训第一门户 模拟考场


2.2.2 字节对齐

  有的嵌入式处理器的寻址方式决定了在内存中占2字节的int16、uint16等类型数据只能存放在偶数内存地址处,占4字节的int32 、uint32 等类型数据只能存放在4的整数倍的内存地址处;占8字节的类型数据只能存放在8的整数倍的内存地址处;而在内存中只占1字节的类型数据可以存放在任意地址处。由于这些限制,在这些平台上编程时有很大的不同。首先,结构体成员之间会有空洞,比如这样一个结构:

typedef struct test{
char a;
uint16 b;
}TEST

  结构TEST在单字节对齐的平台上占内存三个字节,而在以上所述的嵌入式平台上有可能占三个或四个字节,视成员a的存储地址而定。当a存储地址为偶数时,该结构占四个字节,在a与b之间存在一个字节的空洞。对于通信双方都是对结构成员操作的,这种情况不会出错,但如果有一方是逐字节读取内容的(通信协议大都如此),就会错误地读到其它字节的内容。其次,若对内存中数据以强制类型转换的方式读取,字节对齐的不同会引起数据读取的错误。因为假如指针指在基数内存地址处,我们想取得占内存两个字节的数据存放在uint16型的变量中,强制类型转换的结果是取得了该指针所指地址与前一地址处的数据,并没有按照我们的愿望取该指针所指地址与后一地址处的数据,这样就导致了数据读取的错误。   解决字节对齐有许多方法,比如可以在GCC的项目管理文件MakeFile中增加编译选项--pack-struct;但这种方法只能去除结构中的空洞,并不能解决强制类型转换引起的错误。为了增强软件的可移植性以及和同类其它平台产品的互通性,我们在收数据包处增加了拆包的函数,发数据包处增加了组包的函数。这两个函数解决了字节序的问题,也解决了字节对齐的问题。即组包时根据参数中的格式字符串将内存中的不同数据类型的某段数据放在指定地址处,组成包发给下层;拆包时,根据参数中的格式字符串将收到的内存中的数据存放在不同类型的变量或结构成员中。在函数中针对不同的数据类型作不同的处理。 2.2.3 位 段

  由于位段的空间分配方向因硬件平台的不同而不同,对X86平台,位段是从右向左分配的;而一些嵌入式平台,位段是从左向右分配的。分配顺序的不同导致了数据存取的错误。解决这一问题的一种方法是采用条件编译的方式,针对不同的平台定义顺序不同的位段;也可以在前面所述的两个函数中加上对位段的处理。

2.2.4 代码优化

  嵌入式系统对应用软件的质量要求更高,因而在嵌入式开发中尤其须注意对代码进行优化,尽可能地提高代码的效率,减少代码的大小。虽然现代C和C++编译器都提供了一定程度的代码优化,但大部分由编译器执行的优化技术仅涉及执行速度和代码大小的平衡,不可能使程序既快又小,因而必须在编写嵌入式软件时采取必要的措施。 

(1)提高代码的效率

  ①switch-case 语句。在程序中经常会使用switch-case语句,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要做什么,就浪费了处理器时间。为了提高速度,可以把具体的情况按照它们发生的相对频率排序。即把最可能发生的情况放在第一,最不可能发生的情况放在最后,这样会减少平均的代码执行时间。

  ② 全局变量。使用全局变量比向函数传递参数更加有效率,这样做去除了函数调用前参数入栈和函数完成后参数出栈的需要。当然,使用全局变量会对程序有一些负作用。

(2)减小代码的大小 

  嵌入式系统编程应避免使用标准库例程,因为很多大的库例程设法处理所有可能的情况,所以占用了庞大的内存空间,因而应尽可能地减少使用标准库例程。

(3)避免内存泄漏

  用户内存空间(堆)为RAM中全局数据和任务堆栈空间都分配后的剩余空间,为了使程序能有足够的内存运行,必须在申请的内存不用后及时地将其释放,以确保再次申请时能有空间。如果程序中存在内存泄漏(即申请内存后没有及时释放)的情况,程序最终会因为没有足够的内存空间而无法运行。 3 嵌入式系统的广泛应用

  嵌入式系统的应用前景是非常广泛的,人们将会无时无处不接触到嵌入式产品,从家里的洗衣机、电冰箱,到作为交通工具的自行车、小汽车,到办公室里的远程会议系统等等。特别是以蓝牙为代表的小范围无线接入协议的出现,使嵌入式无线电的概念悄然兴起。当嵌入式的无线电芯片的价格可被接受时,它的应用可能会无所不在。在家中、办公室、公共场所,人们可能会使用数十片甚至更多这样的嵌入式无线电芯片,将一些电子信息设备甚至电气设备构成无线网络;在车上、旅途中,人们利用这样的嵌入式无线电芯片可以实现远程办公、远程遥控,真正实现把网络随身携带。下面介绍几种具体的应用。 

(1)嵌入式移动数据库

  所谓的移动数据库是支持移动计算的数据库,有两层含义:① 用户在移动的过程中可以联机访问数据库资源。② 用户可以带着数据库移动。典型的应用场合有在开着的救护车上查询最近的医院。该系统由前台移动终端、后台同步服务器组成,移动终端上有嵌入式实时操作系统和嵌入式数据库。中国人民大学正在开发该系统,他们和Hopen公司合作,开发了前台移动终端"小精灵"。

(2)嵌入式系统在智能家居网络中的应用

  智能家居网络(E-Home)指在一个家居中建立一个通信网络,为家庭信息提供必要的通路;在家庭网络操作系统的控制下,通过相应的硬件和执行机构,实现对所有家庭网络上家电和设备的控制和监测。其网络结构的组成必然有家庭网关。家庭网关主要实现控制网络和信息网络的信号综合并与外界接口,以便作远程控制和信息交换。不论是网关还是各家电上的控制模块,都需有嵌入式操作系统。这些操作系统必须具有内嵌式、实时性好、多用户的特点。南京东大移动互联技术有限公司研制的智能多媒体家庭网关,就是以嵌入式Linux作为该嵌入式设备的操作系统,设备之间的相互通信遵从蓝牙通信协议,可以支持多个设备同时接入到固定电话网、国际互联网等其它外部网络。

更多软考资料请访问:考试吧软件水平考试栏目

希望与更多网友交流,请进入考试吧软件水平考试论坛

上一页  1 2 3 4 5 下一页
文章搜索
软件水平考试栏目导航
版权声明:如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。