(计算机应用技术专业论文)解释型嵌入式系统软件开发环境研究.pdf_第1页
(计算机应用技术专业论文)解释型嵌入式系统软件开发环境研究.pdf_第2页
(计算机应用技术专业论文)解释型嵌入式系统软件开发环境研究.pdf_第3页
(计算机应用技术专业论文)解释型嵌入式系统软件开发环境研究.pdf_第4页
(计算机应用技术专业论文)解释型嵌入式系统软件开发环境研究.pdf_第5页
已阅读5页,还剩95页未读 继续免费阅读

(计算机应用技术专业论文)解释型嵌入式系统软件开发环境研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 嵌入式软件开发环境是嵌入式技术研究的重要组成部分,为了使嵌入式软件 开发具有平台无关、轻量级、快捷高效、低成本等特点,文章提出了一种基于动 态中间语言的解释型嵌入式系统软件开发环境框架。 文章首先研究了国内外嵌入式软件开发环境的现状和嵌入式系统的特点及 发展趋势;其次分析了在程序执行方式上编译过程和解释过程的异同,并在经典 分析一综合模型的基础上,研究了解释器模型各个阶段的相关技术;最后借鉴中 间语言在j a v a 和n e t 中的成功应用,以现代编译理论及技术为指导,结合动态 语言的特殊优势,提出了系统解决方案:以r u b y 作为嵌入式软件的开发语言, 利用语法制导翻译技术结合回填技术将r u b y 语言源程序转换成自定义的动态中 间语言,设计一个基于动态中间语言的解释型运行时环境。将动态特性引入到中 间语言是文章主要的创新点。 在详细设计过程中,文章在技术细节方面也作了一些创新或改进:如程序重 构器的引入和语法分析器模型的扩展,类和方法的符号表原型模式,定位语句的 设计及与作用域的关联,解释型运行时中的对象一方法栈模型的设计及垃圾回收 过程中使用的基于对象一方法栈的分代收集法等。 为了评估设计方案的可行性和正确性,文章实现了一个p c 机上模拟的d e m o 版本,并开发了一个简易的可视化界面,用于调试和观察研究成果。文章全部设 计过程采用统一建模语言u m l 描述。 经测试代码验证,系统核心功能模块基本达到预期效果:动态中间语言的定 义;从r u b y 语言到动态中间语言的转换;动态中间语言代码的解释执行及垃圾 回收;中间代码级的断点和单步调试等。下一步的工作是进一步完善动态中间语 言及解释型运行时环境对r u b y 高级特性的支持,进一步完善系统功能,改进相 关环节算法,进一步提高解释型运行时的执行效率和安全性。 关键词: 嵌入式软件开发环境;平台无关;轻量级;动态中间语言;解释型 运行时 a b s t r a c t t h ed e v e l o p m e n te n v i r o n m e n tf o re m b e d d e ds y s t e mi sa ni m p o r t a n tp a r t o fs t u d y i n go ne m b e d d e ds y s t e mt e c h n o l o g y t om a k et h ed e v e l o p m e n to f e m b e 拙旧s t e ms o r t w a r e 山t 胁mt n 咖e n a e n t ,ll 曼i g h t w e i g h t , ta n g h e f f i c i e n c y ,1 0 w e rc o s t ,t h i sp a p e rp r e s e n ta ni n t e r p r e t e dd e v e l o p m e n t e n v i r o m e n tf r a m e w o r ko fe m b e d d e ds y s t e mb a s e do na ns e l f d e s i g n e dd y n a m i c i n t e r m e d i a t el a n g u a g e f i r s t l y ,t h i sp a p e rs t u d i e dt h ew o r l d w i d es t a t u so ft h ed e v e l o p m e n t e n v i r o n m e n tf o re m b e d e ds y s t e ma sw e l la st h ec h a r a c t e r i s t i c sa n d d e v e l o p m e n tt r e n do ft h ee m b e d d e ds y s t e m s e c o n d l y ,t h i sp a p e rd i s c u s s e d t h es i m i l a r i t i e sa n dd i f f e r e n c e sb e t w e e nc o m p i l e dp r o c e s sa n di n t e r p r e t e d p r o c e s so nt h ee x c u ti r em o d e ,a n dt h e ns t u d i e de a c hs t a g eo ft h ec l a s s i c a l i n t e r p r e t o rm o d e l f i n a ll y ,r e f e r i n go ft h es u c c e s s f u lu s eo fi n t e r m e d i a l a n g u a g ei nj a v aa n d n e t ,b a s e do nt h em o d e r nc o m p il e rp r i c i p l e sa n d t e c h n i q u e s ,t a k i n gt h ea d v a n t a g e so fd y n a m i cl a n g u a g e ,t h i sp a p e rg i v e n t h es o l u t i o n t a k i n gr u b ya sp r o g r a m m i n gl a n g u a g ef o re m b e d d e ds y s t e m , t r a n s f o r m i n gr u b yt os e l f - d e s i g n e dd y n a m i ci n t e r m e d i al a n g u a g ew i t h s y n t a x d i r e c t e da n db a c k f i11i n gt e c h n i q u e ,d e s i g n i n ga ni n t e r p r e t e d r u n n i n gt i m ef o rt a r g e tp l a t f o r mb a s e do nt h es e l f 。d e s i g n e dd y n a m i c i n t e r m e d i a t e l a n g u a g e i n t r o d u c i n gd y n a m i cc h a r a c t e r i s t i c si n t o i n t e r m e d i a t el a n g u a g ei st h em a i n c r e a t i v ep o i n t d u r i n gt h es t a g eo fd e t a il e dd e s i g n ,t h i sp a p e ra l s om a d es o m e c r e a t i o na n di m p r o v e m e n ts u c ha sp r o g r a mr e b u i i d i n ga n ds y n t a xa n a l y s i s m o d e le x t e n d i n g ,p r o t o t y p em o d e lo fs y m b o lt a b l ef o rc l a s sa n dm e t h o d , l o c a t i n gs t a t e m e n ta n ds c o p e l i n k i n g ,d e s i g n i n go fo b j e c t m e t h o ds t a c k m o d e li nr u n n i n gt i m ea n dg e n e r a t i o ng a r a g ec o l l e c t i o nb a s e do ni t f o re v a l u a t i n gf e a s i b i l i t ya n dv a l i d i t yo ft h es o l u t i o n ,t h i sp a p e r r e a l i z e dad e m os y s t e mo np c ,a n das i m p l ev i s u a li n t e r f a c ef o rd e b u g g i n g a n dc h e c k a 1 ld e s i g n sw e r ed e s c r i b e db yu m l v e r if i e db yt e s tc o d e ,s y s t e mk e r n e lf u c t i o nr e a c he x p e c t e dt a r g e t d e f i n i n go fd y n a m i ci n t e r m e d i a t el a n g u a g e ,t r a n s f o r m i n gr u b yt ot h e d y n a m i ci n t e r m e d i a t el a n g u a g e ,i n t e r p r e t e dr u n n i n gt i m eb a s e do nd y n a m i c i n t e r m e d i a t el a n g u g ea n dg e n e r a ti o ng a r a g ec o ll e c ti o n ,b r e a k p o i n ta n d s t e pd e b u g g i n ga tai n t e r m e d i a t el a n g u g el e v e le t c n e x ts t e pi st o i m p r o v i n gt h es u p p o r tf o rr u b yh i g h l e v e lc h a r a c t e r i s t i c se i t h e rd y n a m i c i n t e r m e d i a t el a n g u a g eo ri n t e r p r e t e dr u n n i n gt i m e ,c o n s u m m a t i n gs y s t e m f u n c t i o n s ,i m p r o v i n gt h ea l g o r i t h mo rm o d e lo fr e l e v a n t1 i n k s ,i m p r o v i n g t h ee x e c u t i n ge f f i c i e n c ya n ds e c u r i t yo ft h ei n t e r p r e t e dr u n n i n gt i m e k e y w o r d :d e v e l o p m e n te n v i r o n m e n t f o re m b e d d e d s y s t e m ;p l a t f o r m i n d e p e n d e n t :l i g h t w e i g h t :d y n a m i ci n t e r m e d i a t el a n g u a g e :i n t e r p r e t e d r u n n i n gt i m e i i i 浙江理工大学学位论文原创性声明 本人郑重声明:我恪守学术道德,崇尚严谨学风。所呈交的学位论文,是本人在导师 的指导下,独立进行研究工作所取得的成果。除文中已明确注明和引用的内容外,本论文 不包含任何其他个人或集体已经发表或撰写过的作品及成果的内容。论文为本人亲自撰 写,我对所写的内容负责,并完全意识到本声明的法律结果由本人承担。 带谬;月帮 浙江理工大学学位论文版权使用授权书 学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家 有关部门或机构送交论文的复印件和电子版,允许论文被查阅或借阅。本人授权浙江理工 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印 或扫描等复制手段保存和汇编本学位论文。 本学位论文属于 保密口,在 不保密。 年解密后使用本版权书。 指导教师签名:易华 日期:如拜r 月i 解释执行机构是硬件c p u ; 程序执行相对较快。 2 ) 在解释方法中 得到的中间形式是一些特定系统的数据结构,属于高级到中级形式; 解释执行机构是一个( 软件) 程序; 程序执行相对较慢。 图2 3 可以直观地表示这种关系: 编译过程 2 1 2 解释器模型 解释过程 图2 3 编译过程和解释过程的比较 根据经典的编译器分析一综合模型 2 ,结合解释器的特点,解释器模型也大 致可分为六个阶段,如图2 4 所示。 1 6 浙江理1 :人学硕十学位论文 源程序 执行结果 图2 4 解释器的各个阶段 1 ) 词法分析 词法分析是编译过程的第一阶段,它的主要任务是读取输入字符流,产生用 于语法分析的词法记号序列。实际上,编译过程一些阶段的活动会交错进行,图 2 5 给出了词法分析器和语法分析器的一种典型关系,即词法分析器通常作为语 法分析器的一个子程序来实现。当收到来自语法分析器的“取下一个记号”命令 时,词法分析器读取输入字符直到它能够确认下一个词法记号为止。 源程序 图2 5 词法分析器和语法分析器的相互作用 词法分析器是读源程序的部分,因而它还通常完成和用户接口的一些其它任 务。其一是删去源程序的注释和( 由空格、制表符或换行符等引起的) 空白。另 1 7 浙江理r :大学硕+ 学位论文 一任务是记录当前处理字符的文件和行号,从而可以将后续阶段发现的错误信息 与源程序对应位置联系起来。如果源语言支持宏定义的预处理,该功能一般也可 以在词法分析阶段实现。 构造词法分析器的一种简单办法是用状态图来描述源语言词法记号的结构, 然后手工把这种状态图翻译成识别词法记号的程序。用这种方法可以产生高效的 词法分析器。另外,这项工作也可以由词法分析器自动生成工具l e x 来完成。 2 ) 语法分析 每一种程序设计语言都具有描述程序语法结构的规则,这些规则可以用上下 文无关文法或b n f 范式来描述。 编译过程常用的文法分析方法有自上而下和自下而上两种。前者分析器建立 分析树是从根结点到子结点,而后者恰好相反。它们的共同点是从左向右地扫描 输入,每次一个符号。虽然两种方法都只能处理上下文无关文法的子类,但这些 子类足以描述程序设计语言的大多数语法结构,其中l l 文法订。的分析器通常用 手工实现,而l r 文法”的分析器通常利用自动工具( 如y a c c ) 构造。 语法分析器的任务是接受词法分析器提供的记号串,检查它们是否能由源程 序的文法产生,如图2 6 所示。另外,语法分析器还负责提示语法错误,并能从 常见的错误中恢复过来,以便后面的输入能继续处理下去。 源程序 图2 6 语法分析器在解释器模型中的位置 语法分析器的输出是对词法分析器产生的记号流的分析树的某种表示。事实 上,语法分析和后续的语义分析,甚至中间代码生成过程都可能交错在一起,所 以在分析过程中还可能完成许多其它任务。例如,把与各种记号有关的信息收集 到符号表、进行类型检查和其他一些语义分析检查,并产生中间代码。 3 ) 语义分析 语义分析阶段的任务是检测源程序的语义错误,并收集代码生成阶段要用到 的类型信息。语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中 1 8 浙江理:大学硕七学位论文 的操作符和操作数。 语义分析的一个重要组成部分是类型检查,它负责检验每个操作符的操作数 是否满足源语言的说明。特别的,在动态语言中,类型检查的任务通常会延迟到 运行时才进行! 。 4 ) 中间代码生成 完成语法分析和语义分析以后,可以产生源程序的一个显式中间表示,这种 中间表示可以看成是某种抽象机的程序。源程序的中间表示应该具有两个重要性 质:一是易于产生,二是易于翻译成目标程序。尽管产生显式中间表示不是必须 的,但是使用与机器无关的中间形式具有如下优点: 再目标比较容易:不同机器上的编译器或解释器可以在已有前端的基础 上附加一个适合这台新机器的后端来生成。 可以在中间语言表示上应用与机器无关的代码优化器。 “将某种高级语言编译为一种公共的中间语言 的观念,是现代编译技术 的主题之一。- ,j a v a 二进制字节码和m s i l 是目前比较成功的显式中间代码形式 主要代表。 c l a s s 文件j a v a 语言无疑取得了巨大的成功,其中最主要的原因就是其平台 无关性础训碱钉一+ ,而这种特性很大程度上是得益于j a v a 采用了一种平台无关的 中间语言,并以虚拟机来执行。j a v a 编译器生成的是平台无关的二进制字节码文 件( c l a s s 文件) ,只要不同目标机上配有相应版本的j a v a 虚拟机,源程序无需修 改就可以在不同平台上运行同一个j a v a 程序。 m s i l n e t 的成功进一步证明了中间语言技术的优越性,在n e t 框架中, 所有的语言( c ,v b n e t ,e f f i l n e t 等) 最后都被转换为了一种通用语言:微软 中间语言( m s i l ) 。它是一种介于高级语言和基于i n t e l 的汇编语言的伪汇编 语言,当用户编译一个n e t 程序时,编译器将源代码翻译成一组可以有效地转换 为本机代码且独立于c p u 的指令。当执行这些指令时,实时( j i t ) 编译器将它 们转化为c p u 特定的代码。由于公共语言运行库支持多种实时编译器,因此同 一段m s i l 代码可以被不同的编译器实时编译并运行在不同的结构上。从理论上 来说,m s i l 将消除多年以来业界中不同语言之间的纷争。 1 9 浙江理j :大学硕十学位论文 5 ) 代码优化 所谓优化,是指在保证程序的语义不发生变化的前提下,对中间代码或目标 代码进行重排、删除、合并等变换,以提高后端对最终代码的执行效率。代码优 化以代价最小,收益最大为准则。 中间代码的优化与具体目标机无关,是独立于目标机的优化,因此更具有通 用性和可移植性,是很重要的优化途径。如果中间代码结构设计良好的话,优化 会收到比较好的效果。针对目标机器的优化,如寄存器的优化和特殊机器指令序 列的利用,虽然可以最大限度发挥目标机的性能,但是移植性和可维护性差。 从优化所涉及的程序范围来看,可分为全局优化和局部优化。其中全局优化 通常需要进行控制流分析和数据流分析,由于从大范围求得信息,因此优化率很 高,但是比较复杂,开销也较大。在解释方式中,全局优化一定程度上可以弥补 其运行时效率相对编译方式较低的不足。局部优化又可分为基本块上的优化( 如 常量表达式节省、公共子表达式节省等) 和循环上的优化( 如循环不变式外提、 削减运算强度等) 。 6 ) 解释型运行时 解释型运行时不是通过翻译来产生目标程序,而是直接执行源程序中蕴含的 操作。一种比较好的方式是,前端产生一种机器无关的中间代码,解释型运行时 执行这种中间代码。处理名字和数据对象之间的关系是运行时关心的基本问题。 数据对象的分配和释放由运行时支撑程序包管理。它由一些例行子程序组 成,运行时支撑程序包的设计受数据对象的封装及过程语义的影响。过程的每次 执行称为一个活动,每个活动可以使用专门分配给它的数据对象和某个封装模块 中共享的数据对象。数据对象运行时的表示由它的类型决定。通常,像字符、整 数和实数这样的基本数据类型可以由c 语言中等价的数据对象表示。但是,像数 组、字符串、哈希表和类这样的集合数据类型通常由一组基本对象表示。 7 ) 符号表管理 符号表管理的一个基本任务是记录源程序使用的标识符并收集每个标识符 相关的各种属性信息。标识符的属性信息表明了该标识符的存储位置、类型、作 用域等信息。当一个标识符是方法名时,它的属性信息还包括诸如参数的个数, 可见性等信息;当一个标识符是类名时,它的属性信息还将包含被其封装的实例 浙江理j :人学硕十学位论文 变量和方法过程的相关信息。 符号表是一个数据结构。每个标识符在符号表中都有一条记录,记录的每个 域对应于该标识的一个属性。这种数据结构允许我们快速地找到每个标识符的记 录,并在该记录中快速地存储和检索信息。 符号表管理涉及程序的整个解析和解释执行过程,词法分析和语法分析阶段 陆续将标识符信息写入符号表,语义分析阶段对标识符引用正确性等一些静态错 误信息进行处理,中间代码生成阶段要将指令序列中的变量与符号表建立联系, 并要正确设置临时变量等的域信息,代码优化、连接、执行等过程都需要频繁地 对符号表中的标识符及相关信息进行存取和处理。 8 ) 错误处理 程序编译和解释执行的每个阶段都可能遇到错误,各阶段检测到错误后,必 须以适当的方式进行错误处理,以便确定源程序错误的原因和位置。词法分析、 语法分析及语义分析阶段通常能处理源程序中的大部分静态错误信息。在动态语 言中通常不进行类型检查,所以于此类型相关的某些操作错误只有在执行时才能 被发现,好在解释器根本不用编译源程序就可以直接运行,可以很方便、迅速地 找到出错位置。 9 ) 垃圾收集 , 垃圾收集不是编译过程经典分析一综合模型的组成阶段,但是现代的高级语 言一般都具备垃圾收集器。 在堆中分配且通过任何程序变量形成的指针都无法到达的记录称之为垃圾。 垃圾占据的存储空间应当被回收,以便分配给新的记录,这一过程叫做垃圾收集。 垃圾收集不是由编译过程完成的,而是由运行时完成的6 一。 理想情况下,可以将所有动态不再活跃的纪录都视为垃圾。但是事实上并不 是总能知道一个变量是否是活跃的,因此,通常采用的是一种保守的近似方法, 即保留所有可能到达的记录,尽管其中有些记录可能不是活跃的。 现在,理论上成熟的垃圾收集方法有很多种,如标记一清扫式收集法,引用 计数法,复制式收集法,分代收集法,增量式收集法等“。 2 1 3 工具软件简介 现代编译技术中使用的两种最有用的抽象是正则表达式和上下文无关文法。 浙江理i :人学硕十学位论文 正则表达式用于词法分析,上下文无关文法用于语法分析。为了更好地利用这两 种抽象,较好的做法是借助一些专门的工具,例如l e x ”:( 它将一个说明性的规 范转换成一个词法分析器) 和y a c c ( 它将文法转换成一个语法分析器) 。 1 ) l e x l e x 是一种词法分析程序的生成器,它使用的标记描述称为j 下则表达式。l e x 将这些正则表达式转变为词法分析程序能够用来极快地扫描输入文本的形式,而 且速度不依赖于词法分析程序尝试匹配的表达式的数量。 l e x 程序由三部分组成:定义段、规则段和用户子例程段,段间以隔开。 定义段 规则段 用户子例程段 ( 1 ) 定义段 定义段介绍了将拷贝到最终程序中的原始c 程序代码,包括文字块、定义、 内部声明表、起始条件和转换,用特殊的定界符 和 括起来。l c x 将以空白 开始的行或包围在 和 之间的内容逐字拷贝到c 文件中。 ( 2 ) 规则段 。 规则段包含模式行和c 代码。当l e x 扫描程序运行时,它把输入与规则段的 模式进行匹配,每次发现一个匹配时就执行与那种模式相关联的c 代码。 ( 3 ) 用户子例程段 用户子例程段是一些用c 语言编写的供规则中调用支持例程。这段的内容 被l e x 逐字拷贝到c 文件。 2 ) y a c c y a c c 是一种语法分析程序的生成器,它的文法描述用巴科斯范式( b n f , b a c k u sn a u rf o r m ) 来书写。 y a c c 程序也由3 部分组成:定义段、规则段和用户子例程段,段间以隔 开( l e x 模仿了y a c c 的结构) 。 定义段 浙江理i :人学硕十学位论文 规则段 用户子例程段 ( 1 ) 定义段 y a c c 程序的定义段由可任选的两节组成。第一节处于分界符 和) 之间, 它是一些普通的c 语言声明,第二部分和第三部分的翻译规则或过程所使用的 所有临时声明都放在这里。第二节是文法记号的声明,可能有u n i o n 、s t a r t 、 t o k e n 、t y p e 、l e f t 、r i g h t 和n o n a s s o c ,如t o k e n d i g i t 将d i g i t 声明 为记号。 ( 2 ) 规则段 规则段用于放置翻译规则,每条规则由一个文法产生式和相关的语义动作组 成。语义动作是c 语句序列,在语义动作中,符号$ $ 表示左部非终结符的属性 值,而$ i 表示右部第i 个文法符号的值。每当归约个产生式时,就执行与之相 关联的语义动作,所以语义动作一般是根据$ i 的值计算$ $ 的值。 ( 3 ) 用户子例程段 用户子例程段是一些用c 语言编写的支持例程。必须提供名字为y y l c x o 的词 法分析器,其它的过程,如错误恢复例程等也可以加上。词法分析器y y l e x o 返 回二元组( 记号,属性值) 。返回的记号,如d i g i t ,必须在y a c c 说明的第一部 分声明。属性值必须通过y a c c 定义的变量y y l v a l 传递给语言分析器。 2 2 需求分析与对策 本文课题来自杭州富士制冷有限公司横向合作项目“解释型嵌入式系统软件 开发平台的研制”,研究性阶段的项目需求主要包括以下几个方面: 基于该平台开发的软件具有较好的移植性 支持软件模块化、可复用性,方便组件连接 支持快速建模、开发效率高 r u b y 作为程序设计语言 具有较高的安全性和可靠性 平台体系结构框架具有先进性,支持多语言混合编程扩展和功能包扩展 可以调用c 库函数以及用c 语言编写的驱动程序 浙江理i :大学硕十学何论文 下面结合嵌入式系统的特点及发展趋势对项目需求作简单的分析,并指出相 应的解决思路。 1 ) 软件的可移植性 提高嵌入式软件的可移植性已成为嵌入式应用软件开发的主要考虑因素之 一,嵌入式软件与通用软件的不同在于,嵌入式软件高度依赖于目标应用的软硬 件环境,以往为了追求高效率和高实时性通常编写出与目标平台紧密相关的软 件,导致可移植性很差。随着嵌入式技术的发展,在目标平台软硬件资源相对丰 富,可满足系统需求的情况下,应当尽可能地考虑可移植性和可重用性,致力于 开发正确性、实时性、模块化、可移植性和可重用性相对均衡的嵌入式应用软件。 要提高软件的可移植性和可重用性,通常的办法是采用高级语言、将不可移 植部分局域化、提高代码的模块化程度。在综合考虑各种影响程序开发效率、开 发成本、应对需求变化时的灵活性、模块化、可扩展性、可移植性和可重用性等 因素的情况下,采用中间层技术、3 i 舯:可以在系统性能和可维护性之间取得很好 的平衡,j a v a 在通用软件领域和消费电子领域的成功就是很好的启示。有了中 间层的协调,一方面可以利用面向对象的高级语言进行嵌入式应用软件的丌发, 大大提高模块化程度;另一方面,可以将与目标平台有关的部分限制在中间层的 后端,并且对应用程序开发人员透明,既解决了可移植性问题,同时也可减轻开 发人员的负担、提高开发效率。 一一 2 ) 软件的模块化和可复用性 提高软件产品质量、缩短开发周期、降低开发成本是软件开发的迫切要求, 软件产品的模块化和可复用性是满足这一要求的必由之路。而采用面向对象“尊1 的设计方法和设计模式的思想是实现嵌入式软件开发模块化、提高软件可复用性 的有效途径。 目前嵌入式系统开发中普遍采用面向对象的方法。 3 a 扎进行上层软件的设计 和实现还有很多困难,最主要原因就是底层r t o s 没有提供有力支持,即使上层 软件勉强采用了面向对象的方法,代码的模块化、可复用性也难有提高;并且在 具体实现时增加了程序开发人员的技术和熟练程度要求。因此,需要在r t o s 和 上层软件之间加入一层,以屏蔽底层各类r t o s 的差异,为上层应用提供一个统 一的、面向对象的开发环境。如此可以使软件开发人员完全采用面向对象的方法 浙江理r :大学硕十学何论文 和成熟有效的设计模式进行嵌入式应用软件的设计和实现,对缩短开发周期、降 低开发成本,提高代码的模块化程度和可复用性有着重要的理论意义和实用价 值。 然而面向对象的模型通常比面向过程的模型在程序代码量要稍大一些,相应 地完成同样任务时执行效率要求也更高。这对于通用计算机似乎没什么,但是对 于嵌入式系统资源有限的情况,有必要设法进一步减少代码量、提高程序执行效 率,并且这种改变不应该增加程序设计人员的负担。由于动态语言可以用更少的 代码完成更多的任务,并且模块化和可复用程度也比静态语言要好,所以用面向 对象的动态语言作为开发语言是一种比较好的选择。 3 ) 支持快速建模和提高开发效率 快速变化的市场要求我们采用能快速应对变化的技术,动态语言是支持快速 建模、提高开发效率和适应需求变化的明智选择。许多设计模式的目的就是改善 系统模型的动态特性、提高系统的可伸缩性和应变能力;动态语言是种在运行 时可以改变其结构的语言,通常使用无类型定义来简化组件间的联系川。,实现高 级编程,其与生俱来的动态特性是静态语言所望尘莫及的,采用动态语言建模可 大大提高系统灵活性,提高开发效率。动态语言由于在执行效率上逊色于静态语 言,所以其优势很长时间以来都没有得到充分的发挥。随着处理器速度的不断提 高、混合应用的增长、需求变化越来越频繁使得动态语言的优点成为人们关注的 焦点,专家预测动态语言将成为今后编程技术发展的新方向1 佩6 0 。 r u b yo nr a il s 是一个在r u b y 语言基础上开发的完整的w e b 应用程序框架, 由于其开发效率1 0 倍于j a v a 而震惊世界1 引。虽然这与r u b yo nr a i l s 的w e b 程 序开发框架设计精良有关,但其中动态语言的优势尽显无遗。动态语言实现了数 据和程序的统一,基本不需要x m l ,程序易于变化,任何一处均可随时修改。尽 管在嵌入式领域动态语言目前尚处于起步阶段,但随着嵌入式系统需求的日益增 加,与i n t e r n e t 的融合和瞬息万变的客户需求,动态语言在某些领域参与嵌入 式系统应用软件的开发是必然趋势。利用动态语言的特点可以使嵌入式系统快速 适应市场变化、方便系统升级、简化组件扩展和组件间的连接川;,对提高开发效 率和系统灵活性有着非常重要的理论意义与实用价值。 浙江理1 人学硕 学位论文 4 ) r u b y 作为程序设计语言 r u b y 作为嵌入式系统应用软件的程序设讨语言,具自如下优势: ( 1 ) 程序代码量少,开发效率高 r u b y 是一种简洁的脚本语占,脚本语占比系统程序设计语言更高级,平均 个指令可以做更多的工作。一个典型的脚本语言指令执行成百上千条机器指 令,而一个典型的系统程序设计语占指令执行大约5 条机器指令,参考图2 7 。 1 0 1 0 o e g r e t , 0 t t v p i n g 图27 各种程序设计语言代码量比较 ( 2 ) 有利于软件模块化,提高可复用性,简化模型 r u b y 是纯而向对象的动态语青,只要目标平台或其中问层有足够的支持, 就町以完全采用面向对象的方法和成熟有效的设计模式构造嵌入式系统应用程 序。并且由于r u b y 变量使用前无需类型声明,所以其模块化程度可复用程度 及模型的简化程度是非动态语言所无法比拟的。下面以虽简单的例子说明。 在r u b y 中我们可以用如下代码简单地实现任意类型的两个对象相加,对象 a r 以是任意类型的数字、宁符串或者重载了“,运算的任意复杂对蒙。 d e fa d d ( a b ) r e t u r na + b e n o 但是如果用非动态语吾如c + + 、j a v a 束实现同样功能时,就需要为每一种类 型编写一个具体实现,虽然用模板或宏可以解决但是模型却没法简化。一个小问 题足以反映出本质差别,在模块化程度上,模块的通用性上和模型的简化程度上, rrb#5;r罟co一6prc 浙江理r 人学硕十学位论文 动态语言有着无法比拟的优势。 ( 3 ) 简化组件连接,模块的粘合更加便捷 r u b y 语言的变量在使用前无需类型声明,这使组件更容易连在一起,在使 用时没有优先级限制,并且所有的组件及其值都用统一的方式描述。除此之外, 任何组件和值都可以在任何情况下使用,为某一目的而设计的组件可以被用于设 计者完全没有预见过的完全不同的目的。此外,r u b y 支持模块的混合插入 ( m i x i n ) 、迭代器、闭包懈嘣”,使模块的粘合更加便捷“o :。 ( 4 ) 更好地支持网络、图形界面等编程 除了组件的连接,胶着式应用的实例还有因特网和图形界面等。因特网只是 一种胶着工具,它不创建任何新的计算结果或数据,而只是简单地把大量已经存 在的事物联系起来。因特网编程的完美工作之一是让所有连接的组件在一起工作 州“。图形界面的目标也不是创建新的功能,而是把图形控制集合和应用程序内部 函数联系起来。随着图形用户界面和网络的普及,动态语言会越来越流行。 ( 5 ) 支持与c 的混合编程 当决定使用一种解释性语言比如r u b y 时,意味着拿原始速度交换使用的方 便程度。用更高级的语言开发程序更加容易,但是牺牲了一定的运行速度。实际 的情况是,有时候可能需要程序的某个特殊部分十分快速地运行,或者可能想要 使用c 语言实现的库函数,又或者想要调用c 语言编写的设备驱动程序,这时就 需要这种更高级的语言和c 进行混合编程。 庆幸的是,与其他动态语言相比,在r u b y 里编写c 扩展程序更容易。需要 理解的接口很容易使用,并且在某几个头文件里有清楚的定义,在r u b y 标准库 中,有大量可用示例,甚至有帮助访问c 库而完全不用编写c 代码的工具u ! 。 5 ) 安全性及其它 从文献撼可以知道,使用解释器比使用编译器更加便于错误检查和报告,并 从错误中恢复,可以获得更高的安全性和可靠性。动态中间语言的使用,使得平 台体系结构具有平台及语言无关性,可支持多语言混合编程扩展和功能包扩展。 另外,系统采用纯c 开发,最大限度地保证了对c 库函数以及用c 语言编写的驱 动程序的重用。 综合各项需求分析,我们可以得到表2 1 。 浙江理t :大学硕十学位论文 表2 1 需求与对策分析 项目需求针对嵌入式系统的特点有利条件或趋势 软件移植性好 多种处理器、多种操作系统, 行业标准的形成:中间语言有 软硬件密切相关 利于消除平台差异 r u b y 作为程序设计语言关注成本,资源有限r u b y 是自由软件,代码鼍小 调用c 库、c 编写的驱动程序关注实时性、关注成本c 资源丰富、成本低、速度快 r u b y 支持与c 混合编程 支持快速建模、开发效率高市场需求变化快动态语言建模简单、开发高效 软件模块化、复用程度高周期、效率、成本r u b y 是纯面向对象语言 支持组件连接市场对联网、互动、图形化、脚本语言擅长胶着式应用,方 多媒体、二次开发的需求便组件连接 系统运行安全、可靠要求安全、可靠解释运行环境更安全、可靠 2 3 系统框架与分解 通常一个完整的嵌入式系统集成开发环境包括一个文本编辑器、工程编译工 具、一个连接器、源代码浏览器、集成调试工具,以及一套联机文档,它可以完 成创建、调试、修改应用程序等的各种操作。“。但是从设计者的角度,实际上就 是一个语言处理内核粘着一些辅助工具。本文研究的重点是语言处理内核,内 核决定了源代码的编译方式、连接方式和执行方式。 综合上一节各项需求分析,结合嵌入式系统的特点,以现代编译理论为依据, 在借鉴当前典型嵌入式开发环境设计思想的基础上,本文提出了基于动态中间语 言的解释型嵌入式系统软件开发环境框架。 该框架的基本构思如下: ( 1 ) r u b y 语言作为嵌入式系统应用程序设计语言; ( 2 ) 设计种平台无关的动态中间语言( d y n a m i ci n t e r m e d i al a n g u a g e ) ; ( 3 ) 设计中间代码生成器,将r u b y 语言翻译成( 2 ) 中的动态中间语言; ( 4 ) 构建基于( 3 ) 生成的动态中间语言的解释型运行时环境; ( 5 ) 中间代码生成器和运行时环境分别设计为独立的服务例程并用纯c 语 浙江理1 :大学硕十学位论文 言开发,中间代码生成器方便被第三方i d e 引用,运行时环境可植入目标平台, 并可以重用已有的c 语言歼发的设备驱动程序和c 库函数等。 图2 8 描绘了解释型嵌入式系统软件开发环境框架。 图2 8 解释型嵌入式系统软件开发环境框架 如图2 8 所示,以r u b y 语言编写的源代码,首先由语言处理器转换为基于 动态中间语言描述的中间代码,并显式输出中间代码文件;程序被调用时由加载 器导入中间代码文件,再由解释器执行中间代码,适时调用垃圾回收器。 另外,为了便于观察研究成果,同时也为了更好地说明核心部件的相互协作 关系,本文设计了一个简易的可视化开发界面,具有编辑、编译、调试、运行代 码等基本功能。 图2 9 展示了简易可视化开发界面与开发环境核心部件的相互协作关系,这 也是基于本系统开发嵌入式程序的基本模式。r 。j 图2 9 可视化界面与开发环境核心部件的相互协作关系 浙江理+ r :人学硕十学位论文 2 3 1 动态中间语言模块 “将某种高级语言编译为一种公共的中问语言”的观念,是现代编译技术的 主题之一h 订。v i s u a ls t u d i o6 中的编译器就是将不同的编程语言转换为相同的 中间语言,然后使用一个共同后端将它们编译成机器相关的二进制码;j a v a 的 编译器将程序转换为j a v a 虚拟机可以识别的字节码;对n e t 框架程序员来说, 安装时拷贝到磁盘上的并非机器相关的二进制码,而是程序的m s i l 。 使用中问代码的好处是很明显的,首先是移植能力的潜在可能;其次是安全 性和可靠性的潜在可能,中间代码不像二进制代码可以包含对任意内存地址的引 用,被装载至内存时,中间代码可进行类型安全校验,这使得某些错误以及很大 一部分的攻击不再具有可能性。当然,使用中问语言的一个潜在缺点是可能导致 较慢的运行速度,但是硬件速度的不断提高一定程度上可以弥补这个缺点。 目前为止,通常使用的中间语言都是静态的,这使得要将一种动态语言完全 语义等价地转换成这些中间语言几乎不可能。随着图形界面、互联网等粘着式应 用在嵌入式系统的普及,消除组件类型、平台异构等的差异显然很有必要。为此, 设计一种动态的中间语言是必然的选择。 动态中间语言的设计主要考虑以下几方面的内容: ( 1 ) 关键字、标识符和符号 标识符是程序中变量、类型、函数和标号的名称,它可以由程序设计者命名, 也可以由系统指定。在任何一种中高级语言中,都保留有一部分的标识符,它们 具有专门的意义和用途,这些标识符称为关键字。此外,文件的组织、程序模块 的封装、运算关系和控制关系的描述、语句的分割和注释机制有时需要使用一些 特殊的符号。 ( 2 ) 变量结构和数据类型 在使用动态语言进行程序设计时,变量在使用前通常不需要声明其类型。这 并不意味着变量完全没有类型,恰恰相反,动态语言变量的类型是在程序运行时 根据上下文动态确定的,也就是说,它内部有一套标准的变量类型参考机制。因 此,设计动态中间语言时必须建立一套标准的变量类型集,并且为了使同一个变 量能够随需要变换成任意其它的类型,必须设计一种合理的变量存储结构。 ( 3 ) 元数据和指令体系结构 浙江理i :大学硕十学位论文 程序本质上是由数据和操作构成的,作为辅助机制的通常有文件的组织、模 块的封装等等。从数据的角度来看,不外乎数据的静态组织关系和数据的动态操 作关系。描述程序中数据的各种静态组织关系的数据称为元数据,元数据的基本 构成元素取决于被描述语言的构成元素,相对比较简单;对程序中数据的操作指 令的集合称为指令体系结构,选择中间语言指令形式以及允许的操作符是设计中 间语言的重要问题。 2 3 2 中间代码生成模块 中间代码生成模块的任务是读取r u b y 源代码并将其转换成动态中间语言, 从2 1 2 小节的分析可以知道,编译过程首先是对源代码进行词法和语法分析。 由于r u b y 是一种开源自由软件,为了尽可能利用已有的代码并使开发的系统不 会因为r u b y 的升级而引起较大范围的改动,本文采取了程序重构的策略。 1 ) 程序重构 程序重构是在不改变程序语义的f i 提下,对程序的内部结构进行重组,程序 重构阶段主要考虑以下方面的内容: ( 1 ) 信息提取的范围和深度 决定哪些信息应当展开提取而哪些信息应当作为整体提取是程序重构阶段 的难点,无论信息提取不足或者过份都是不合适的。如果信息提取不足,后续环 节可能无法正确完成程序的转换任务;如果提取过份,主要是展开的层次过深, 会使重构过程非常复杂并且后期还要重新负责正确组合,不但效率低、容易出错 而且在不必要的情况下反复处理同样的信息,浪费了宝贵的转换时间。 ( 2 ) 重构例程与语法分析例程的接口 重构例程与语法分析例程接口位置和参数也至关重要,由于语法分析过程是 一个归约过程,接口的位置和参数将直接影响后期重构过程的分析器模型和复杂 程度。此外,虽然r u b y 是一种开源的自由软件,但是并没有提供有助于对源代 码进行解读的详细设计文档,接口位置和参数的合理选择对了解r u b y 语言程序 信息的组织结构有很大的帮助。 ( 3 ) 语法分析器模型 在通常的编译过程中,语法分析器接受词法分析器提供的记号串,检查它们 是否能由源程序语言的文法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论