(光学工程专业论文)代码自动生成技术在汽车电子实时控制软件中的应用.pdf_第1页
(光学工程专业论文)代码自动生成技术在汽车电子实时控制软件中的应用.pdf_第2页
(光学工程专业论文)代码自动生成技术在汽车电子实时控制软件中的应用.pdf_第3页
(光学工程专业论文)代码自动生成技术在汽车电子实时控制软件中的应用.pdf_第4页
(光学工程专业论文)代码自动生成技术在汽车电子实时控制软件中的应用.pdf_第5页
已阅读5页,还剩143页未读 继续免费阅读

(光学工程专业论文)代码自动生成技术在汽车电子实时控制软件中的应用.pdf.pdf 免费下载

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

文档简介

摘要 摘要 随着硬件技术的飞速发展,性价比的直线上升,汽车电子实时控制软件 的开发,从高级语言时代逐步迈入图形语言的代码自动生成时代。在开发 模式全面转移到图形语言代码自动生成技术上之前,有必要做一些实验和 分析工作,在尝试利用图形语言开发汽车电子实时控制软件的同时,分析 代码自动生成过程、代码生成结构、以及代码组织结构,着重研究一下自 动代码在控制软件中的实时调度策略。这些前沿研究工作对汽车电子实时 控制领域全面引入代码自动生成技术而言十分重要。 论文选用了m a t l a br t w 代码自动生成技术作为硕士研究项目的自动代 码软件工具,结合m p c 5 5 5 平台的v m s 整车控制器软件开发项目,以及 d s pf 2 8 1 2 平台的车载d c d c 系统开发项目,进行了全面的m a t l a br t w 代 码自动生成开发实践。前者是汽车电子系统级的软实时控制软件开发,后 者带有汽车电子部件级的硬实时控制软件开发。 论文对r t w 生成的自动代码进行了代码自动生成过程、代码生成结 构、代码组织结构、实时调度策略等方面进行了详细全面的剖析。同时, 以此为基础,结合项目实践结果,提出了能够提高m a t l a br t w 代码自动生 成技术实用性的二次开发技术,并将二次开发的带积分矫正的p i d 模块普 遍用于车载d c d c 的实时控制软件中,得到了很好的应用效果。 论文通过d c d c 项目,举例阐述了代码自动生成技术背景下,在m a t l a b 强大的物理模型建模环境中,进行控制算法十物理模型仿真的汽车电子实时 控制软件设计新模式。最后,论文对m a t l a br t w 图形语言自动代码和高级 语言手工代码的时间效率和空间效率等性能作了比较,提出了一些分析方 法和观点供代码自动生成技术的读者和研究人员参考。 论文结合实践项目肯定了代码自动生成技术在汽车电子实时控制软件 中的应用,总结了相关应用开发技术。 关键字:汽车电子代码自动生成技术i 汀w 嵌入式软件实时系统 a b s t r a c t w i t ht h e 缸td e v e l o p m e n to fh a r d w a r et e c h n o l o g y a n ds k y - r o c k i n g p e 墒m a i l c ep r i c er a t i o ,t h ed e v e l o p m e n t m o d eo fa u t o m o t i v e e l e c t r o l l i c s r e a l t i m ec o n t r o ls o 小a r ei sg r a d u a l l ys t e p p i n gi n t og r a p hl a n g u a g ea u t o c o d e g e n e r a t i o nt e c h n o l o g y f r o mh i g hl a n g u a g et e c h n o l o g y b e f o r ec o m p l e t e l y i n 仃o d u c i n gt h ea u t o c o d et e c h n o l o g y i n t oa u t o m o t i v ee l e c t r o n i c sr e a i 。t l m e c o n t r o ls o r w a l c ,s o m ee x p e r i m e n ta n da n a l y s i sm u s tb e c a r d e do u t ,s u c ha st h e p r o c e s so fa u t o c o d eg e n e r a t i o n ,c o d eg e n e r a t i o ns t r u c t u r e ,c o d eo r g 锄z a t l o n , p u tm o r ee m p h a s i so nr e a l t i m es c h e d u l e rs t r a t e g yo fa u t o 。c o d eg e n e r a t i o n ,e t c 1 1 1 e s ep r e r e s e a r c h e sa r ev e r yi m p o r t a n tw h e n w eu s et h ea u t o c o d eg e n e r a n o n t h i sp o s t g r a d u a t et h e s i s c h o o s e sm a t l a br t wa u t o c o d eg e n e r a t i o n t e 血l o l o g y a sh i ss o f t w a r et o o lw h i l ed o i n gh i s r e s e a r c hp r o j e c t s ,a n d t h o r o u 龇yc a r r i e d o u ta u t o m o t i v ee l e c t r o n i c s r e a l t i m ec o n t r o ls o r w a r e e x p e r i m e n tw i t h i nr t we n v i r o n m e n t d u r i n gp r o j e c t s o fv m ss o f t w a r e d e v e l o p m e n t u n d e rm p c 5 5 5p l a t f o r m a n d p r o j e c t o fd c d cs y s t e i l l d e v e l o p m e n tu n d e rd s pf 2 8 12p l a t f o r m r e g a r d i n gt h ea u t o m o t i v es o 脚a r e s v s t e m m ef o r m e ro n ei sas y s t e ml e v e lc o n t r o ls o f t w a r ed e v e l o p m e n ta n dt h e l a t t e ri sap a r tl e v e lc o n t r o ls o f t w a r ed e v e l o p m e n t t h et h e s i sd e t a i u ya n a l y z e st h ep r o c e s so fa u t o c o d eg e n e r a t i o n ,c o d e g e n e r a t i o ns t r u c t u r e ,c o d eo r g a n i z a t i o n ,a sw e l la sr e a l _ t i m es c h e d u l e rs t r a t e g y b a s e do nc o d ea n a l y s i sa n dp r o j e c te x p e r i m e n t s ,t h e t h e s i sb r i n g st o 刑a r d s e v e r a lp r a c t i c a lp l u g i nd e v e l o p m e n tt e c h n o l o g yw h i c hs i g n i f i c a n t l yl r e p r o v e d a c c e p t a n c ea n dp r a c t i c a b i l i t yo fa u t o c o d eg e n e r a t i o nt e c h n o l o g y s u c ha sm a t i a b r t w a tl a s t t h et h e s i sp r o v i d e sa n e wd e v e l o p m e n tm o d eo fc o n t r o la l g o r i t h m p l u s i n gp h y s i c a lm o d e li nm a t l a bu n d e r t h eb a c k g r o u n do fa u t o - c o d eg e n e r a t l o n t e c h n 0 1 0 9 y a tt h et a i lo f t h i st h e s i s ,p e r f o r m a n c ec o m p a r i s o nb e t w e e n a u t o 。c o d e a n dh a n d c o d es u c ha ss p a c ea n de x e c u t i o ne f f i c i e n c yi s d i s c u s s e dw i t hs o m e a n a l y s i sm e t h o da n do p i n i o n sp r o v i d e d k e yw o r d s :a u t o m 。t i v ee l e c t r o n i c s ,a u t o - c 。d eg e n e r a t i o nt e c h n 。l o g y , m a t l a b r t w , e m b e d d e ds o f t w a r e ,r e a l - t i m es y s t e m n 学位论文版权使用授权书 本人完全了解同济大学关于收集、保存、使用学位论文的规定, 同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版 本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、 扫描、数字化或其它手段保存论文;学校有权提供目录检索以及提供 本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有 关部门或者机构送交论文的复印件和电子版;在不以赢利为目的的前 提下,学校可以适当复制论文的部分或全部内容用于学术活动。 学位论文作者签名:移八。 同济大学学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师指导下,进行 研究工作所取得的成果。除文中已经注明引用的内容外,本学位论文 的研究成果不包含任何他人创作的、已公开发表或者没有公开发表的 作品的内容。对本论文所涉及的研究工作做出贡献的其他个人和集 体,均已在文中以明确方式标明。本学位论文原创性声明的法律责任 由本人承担。 学位论文作者签名: 彩氓 别年弓月日 第1 章引言 1 1 概述 第1 章引言 一切自动化是人类的一个梦想,人们为了实现这个梦想不断努力。人们 利用计算机软件与硬件实现办公自动化、管理自动化的同时,也在考虑程 序代码的自动生成。 在软件工程发展过程中,计算机科学家为了降低软件开发得强度,缩短 开发周期,减少代码的重复书写,从而减轻程序员的编程负担,一直以来 都致力于代码自动生成方面的研究。随着现代化信息环境同趋复杂,各种 应用软件的开发难度随之加大,这需要更有技巧,更有方法地从事软件开 发,开发团队之间也必须更无障碍地沟通,否则极可能无法在有限的开发 时间中完成任务。由于时间上的压力,一般人只注重程序的编写速度,却 忽略其完成后的实用性与维护性,加上大型程序多人共同参与开发,每个 人都有各自的程序风格,容易造成严重的差异性,随着系统规模越来越大, 这将造成系统完成后在测试及维护上沉重的负担,代码自动生成技术更显 出了其显著的优越性。尽管这些应用没有代码生成工具也能开发完成,但 利用代码生成技术可以大大加速软件的开发进度,提高软件的质量。 1 2 代码生成的优势与劣势分析 传统的代码开发调试工作流包括“编辑、编译、以及测试”,如图1 1 所示。代码生成增加了一些新的工作流元素,传统的编辑、编译、以及测 试阶段仍然适用。在代码生成的工作流中,首先编辑模版和定义配置( 或者 生成器本身) ,然后运行生成器创建代码文件,接着对输出文件进行编泽测 试,如图1 2 所示。 第1 章引言 幽1 1 传统开发 图1 2 代码自动生成开发 代码生成技术是关于自动生成程序的技术。与手工书写代码相比,代码 生成器提供了下面的一些好处: 1 ) 所有软件实体的一致的代码质量和代码风格,代码的质量依赖且只 依赖于代码生成的模板、文件和模型。与此相比,手工经常采用的 拷贝粘贴的方法为前后代码质量的一致性带来了隐患。 2 ) 提高了代码变更的能力,特别在需要大量更改代码的情况下,只需 2 第1 章引言 要更改模板并重新运行代码生成器即可。 3 ) 提高了修复软件b u g 的能力,只需要修复模板的b u g 然后重新运行 生成器就可以修复所有的生成文件的b u g 。 4 ) 灵活的同步机制,代码生成技术自动维护代码和数据模型的一致 性,通过重新运行生成器,对模型和配置的修改可以自动反映到代 码中,这种同步机制对维护数据的一致性是非常必要的。 5 ) 是代码学习的导师,由于生成的代码具有良好的风格和1 0 0 的健 壮性,程序开发者很容易模仿代码风格,从中学习。 6 ) 大幅度提高了工作效率,运用代码生成技术可以将更多的时间花费 在业务相关的设计和实现上,从而可以大大提高软件的开发效率和 软件质量。 当然,任何一种技术都有其缺点,代码生成器也不例外: 1 ) 代码生成器必须首先写好。 2 ) 只能适应指定的环境。 3 ) 不能1 0 0 生成想要得代码,还有一些代码需要手动修改。 1 3 代码生成的分类 在技术领域将代码生成技术分为两大类:被动模式和主动模式【2 】( 见图 1 3 和图1 4 ) 。在被动模式下,代码生成器产生一系列的代码,然后软件开 发者可以自由的修改、编辑这些代码,但代码生成器不再承担对代码的维 护工作。大多数软件集成开发环境( i d e ) 中的应用“向导”就是这种类型 的代码生成器。被动模式的代码生成技术有其应用的范围,但是被动模式 的生成系统有天生的局限性。生成器只运行一次,然后就不再承担对代码 的维护工作。 3 第1 章引言 图1 3 被动模式 与此相反,主动模式下的代码生成器则对生成的代码“长期”负责,可 以通过改变生成器的输入参数或者改变程序模型并重新运行生成器来改变 输出的代码,譬如,编译器生成器就是一种主动模式的代码生成器。 图1 4 主动模式 4 第2 章i d a t l a b 代码自动生成体系分析 第2 章m a t ia b 代码自动生成体系分析 m a t l a b 在实时嵌入式领域( 包括汽车、工业、航空等) 的代码自动生成 技术同趋成熟,其r t w ( r e a lt i m ew o r k s h o p ) 和e m b e d d e dt a r g e t 软件产品 支持英飞凌c 1 6 x 系列,飞思卡尔m p c 5 x x 系列,以及t id s pc 2 0 0 0 系列、 c 6 0 0 0 系列等多款嵌入式微控制器和微处理器。m a t l a br t w 和e m b e d d e d t a r g e t 把控制软件工程师从繁琐的芯片资料阅读和高级语言代码编写工作 中解脱出来,专注于利用形象的图形语言设计控制策略,而控制软件的生 成和编译下载则完全由r t w 和e m b e d d e dt a r g e t 自动完成,大大提高了控 制软件工程师开发控制软件的效率。 2 1r t w 技术 r e a l t i m ew o r k s h o pe m b e d d e dc o d e r 允许生成、测试和配置产品级的c 代码。r e a l t i m ew o r k s h o pe m b e d d e dc o d e r 针对产品级代码生成提供了一 个框架,提高了代码效率,优化了内存使用,同时保持代码的形式简洁。 汽车电子控制软件程序员通过使用e m b e d d e dc o d e r 可以轻松定制、测试以 及修改代码,而这些工作都可以在s i m u l i n k 环境下完成。 它有如下特点: 1 ) 生成产品级代码 2 ) 支持a n s i 以及i s o 浮点数学库 3 ) 只采用静态存储,可以指定生成单实例和多实例代码 4 ) 支持单速率,多速率,和异步速率的模型 5 ) 结合了用户定义的s i m u l i n k 数据对象和s - f u n c t i o n 6 ) 生成定制主程序细节,主要是在有或没有操作系统的情况下如何配 置生成的代码 7 ) 通过软件在回路测试,可以修改已生成的代码 8 ) 生成h t m l 报告 9 ) 通过复杂的数据定义扩展了r e a l t i m ew o r k s h o pa s a m a s a p 2 数据输出能力 5 第2 章m a t l a b 代码自动生成体系分析 拥有强大的功能: 1 ) 生成产品级的c 代码 r e a l t i m ew o r k s h o pe m b e d d e dc o d e r 与s i m u l i n k ,s t a t e f l o w , s t a t e f l o w c o d e r , f i x e d p o i n tb l o c k s e t 以及d s pb l o c k s e t 是完全兼容的。可以生成离 散时间的s i m u l i n k 系统的产品级c 代码。对于仿真和代码生成,你可以把 手写c 代码导入到你的模型中,并且生成的代码可以做成一个独立的函数。 2 1 ) 简洁的e r t ( e m b e d d e dr e a d t i m e ) 代码格式 和手写代码的性能一样,e r t 代码使用最小限度的r a m 和r o m 用量, 而且c p u 的吞吐量很大,e r t 不同于标准的r e a l t i m ew o r k s h o p 的代码格 式,后者需要额外的头文件。e r t 支持单、多和异步速率,也支持单任务 和多任务执行模式。由于不需要初始化等特点,你可以使用e r t 代码格式 来减少代码的尺寸。 3 ) h t m l 代码生成报告 r t w 可以创建个详细的h t m l 代码生成报告,这个报告详细的描述 了代码量以及代码优化信息,而且对数据和在整个代码生成过程中的选项 设置等有一个概括的描述。这个报告还包括生成的原文件,以及一些超链 接注释,这就使你很容易跟踪代码。 4 ) 代码确认 r t we m b e d d e dc o d e r 可以让你针对模型中的一个确定子系统或者一个 相关的s 函数生成代码。你也可以把以前做好的代码导入到s i m u l i n k 模型 中,用于使用一个控制对象模型的软件在回路仿真的验证。 5 ) 自动生成主程序 r 1 、w 生成的代码,准确的表达了对应的s i m u l i n k 模型,并且不针对特 定的处理器。代码的执行使用另外一个与具体目标有关的运行接口来进行。 r t w 支持所有的s i m u l i n k 特性,包括8 位,1 6 位和3 2 位整数,浮点和自 定义( 定点) 数据类型。它在很大范围内允许定制生成的代码。 r t w 支持单任务,多任务操作系统以及 b a r eb o a r d ”( 裸机,无操作系 统) 的运行环境。它还能生成定制模块的内嵌式代码,包括对信号处理算 法和设备驱动程序。 6 第2 章m a t l a b 代码自动生成体系分析 6 ) 对中断的支持 使用中断模块可以创建具有处理异步和同步事件能力的模型,包括中断 服务例程f i s r ) ,硬件产生的中断和异步的读写操作。这些模块土要是为 t o r n a d o 的日标编写的,修改后也可用f 用户自己的目标环境, 7 1 嵌入式监测和参数调节 r t w 提供的些机制u t 以监测和调1 y 模型信号和模块参数。这些机制 包括: 测试点( t e s t p o i n t s ) :将模型中的信弓标志为测试点,并可指定如何分 配信号变量的存储空间 c 和t l c 的a p i :为访问模块存储在r e a l t i m e w o r k s h o p 所生成的全局 数据结构巾的输出和参数提供了额外的手段。 8 1 参数类 s i m u l i n k 和r t w 支持两种参数类m a t l a b 变量和s i m u l i n k 数据对魏。 在m o d e lp a r a m e t e r c o n f i g u r a t i o n 菜单中可以选择模型中的m a t l a b 变量, 并将它们声明在生成代码中为可调参数。被声明为r 调的参数和信号存代 码中可被其它代码随接访问。这个菜单还可以用柬指明可调参数在代码中 存储空间的分配方式。 s i m u l i n k 数据对蒙为模型中的信弓和参数提供了更多的控制功能。这些 s i m u l i n k 专属的数据类型将s i m u l i n k 专属的信息封装了起柬,不会被一般 j j 途的数值类型捕捉到。这些信息直接控制倩号和参数在生成的代码中的 表达。s i m u l i n k 数据对象同样可以打胜。把用,、定义的属性包括进去。 下幽是s i m u l i n k 模块组,用s i m u l i n k 模块搭建f j 程序模型町以由m a t l a b 的自动代码生成器生成相应的高级语言代码。 第2 章m a t l a b 代码自动生成体系分忻 图2 ls i m u l i n k 库 下图是r t w 模块组,其中的c u s t o m c o d e 可以允许添1 | 】| j 自己的c 代码。 幽22 r 1 w 阼 下罔是r t we m b e d d e dc o d e r 模块组,咀面的c o n f i g u r a t i o nw i z a r d s 可 以允许针对微处理器和微摔制器的浮点定点特1 】_ ! 进行优化。 i 划2 3r 1 we m b e d r i e dc o d 日库 e m b e d d e d t a r g e t 是m a t l a b 代码自动生成技术中,为了适应同相;硬件平 台而编写的硬件驱动模块。既然是硬什驱动模块,则必然i j 日标硬件紧密 相关,而且是种嵌八式的软件产品这也是e m b e d d e d t a r g e t 名字的山来。 嵌入式领域硬件平台的体系结构虽然小会超出普通微控制器和微处理 器的冯诺依曼体系结构,但其市场格局依旧是品牌数量庞大,性能千差 第2 章m a t l a b 代码白动生成体系分析 万别,所以m a a b 选择了实时嵌入式领域较为常用的几款嵌入式微控制器, 并为他们量身定做了e m b e d d e d t a r g e t 硬件驱动模块: m a t l a b 2 0 0 t oe m b e d d e dt a r g e t 现在支持4 个系列的微控制器和d s p 微 处理器 图2 4 e m b e d d e d t a r g e t 南r i v i p c s x x f r e c s c a l e m p c 5 5 5 的硬件驱动模块组 曰曰曰 口圉口 曰e 习口 境际1 锣 锉”l = 二j 蚓2 5m p c 5 5 5d r i v e r sl i b r a r y l n f i n e o nc 1 6 6 的硬件驱动模块 第2 章m a * 1 a b 代码自动生成体系分析 i 划26 i n f i n e o n c l 6 6 d r i v e sl i b r a r y t id s pc 2 0 0 0 系列的硬件驱动模块 幽27 t i d s p c 2 0 0 0 d r i v e r s l i b r a r y 第2 章m a t l a b 代码白动生成体系分析 t id s pc 6 0 0 0 系列的硬件驱动模块 圈圈曰曰圉 圈匿曰曰匿 匿匿曰 蹦2 8 t 1 d s p ( 2 6 0 0 0 d r i v e r s l i b r a r y 2 3m a t l a b 代码自动生成体系 23 1 模型和参数配置 m a l l a b 代码自动生成体系的第一部分即为模型,包括了程序模型、参数 配置、参数管理3 部分,总结为图形结构如下: 幽2 9 模型和参数配置 图形语言程序模型( m d l ) : 程序员在利用m a t l a b 代码自动生成开发环境下,是通过图形模块语言 第2 章m a t l a b 代码自动生成体系分析 来编写程序的,汽车或工业用实时嵌入式系统程序,由于其特有的实时性, 基本已基于实时时钟中断的轮转调度策略,调度方法简单机械,程序结构 并不复杂,可以概括如下: 图2 1 0 实时控制结构 接收输入是m c u d s p 接收的外部输入信号和控制信号,如:a d 采样、 c a n 网络消息、i o 数字输入、s c i 消息等。 算法处理是根据特定的控制算法,如:电压电流双环控制、峰值电流控 制、平均电流控制等,结合接收到的外部输入信号和控制信号,经过预先 设计好的运算流程,计算出一个结果,以此作为控制的依据。 输出控制是将算法处理阶段计算出的结果送给m c u d s p 的控制模块, 发出控制信号,如:p w m 模块、s p i 命令等。 图2 9 的m a t l a b 代码自动生成体系模型部分左边的s i m u l i n k 算法模块 即等价于图2 1 0 中部的算法处理部分,右边的e m b e d d e dt a r g e t 驱动模块即 等价于图2 1 0 左右两翼的接收输入和输出控制部分。 以双管单端正激d c d c 项目中的p i d 运算模块为例,m a t l a b 代码自动 生成体系下的图形语言程序模型( m d l 程序模型) 如图: 图2 1 l 图形语言 p i d 模块接收参考信号r e f , 反馈信号f d b 、控制参数k p ,k i ,k i c ,k d 以 及使能信号e n a b l e ,运算过程被封装在模块内部,经过运算后输出控制信 号p i d _ o u t p u t 。 1 2 第2 章m a t l a b 代码自动生成体系分析 2 参数配置( m a s k p a r a m e t e r ) : 每一个图形模块,在代码自动生成时都会对应一段高级语言代码,而在 生成代码前,大部分模块都需要程序员进行参数配置,在生成代码时,代 码生成器会结合程序员配置的参数和代码生成模版( 将在后续章1 ,介绍) 生成特定的代码。 在m a t l a b 代码自动生成体系中,模型的参数配置是由叫m a s k 的界面来 完成的,m a n a b 内部的模块( 不论s i m u l i n k 还是e m b e d d e d t a r g e t 模块) 都 有m a s k 界面供程序员对模块进行参数配置,当开发人员需要根据系统需求 制作公共使用的自定义模块时( 将在后续章节介绍) ,同样需要定义参数, 并创建m a s k 界面供程序员进行配置。 大部分研究人员都有m a t l a b s i m u l i n k 使用经验,对参数配置非常熟悉, 但是e m b e d e dt a r g e t 硬件启动模块的参数配置和其背后的参数检验是与硬 件相关的配置人员需要对目标硬件体系有所认识。 同样以双管单端正激d c d c 项目中的p i d 运算模块为例,图2 1 1 中的 p i d 计算模块的参数配置如图: 幽2 1 2 参数配置 由于d s pf 2 8 1 2 没有浮点运算模块,只能通过定点数( f i x p o i n t ) 形式柬 第2 章y a t l a b 代码自动生成体系分析 模拟浮点数,所以必须对p i d 运算模块在代码自动生成配置q 格式( t i d s p 的一种定点格式) ,即图中的q v a l u e ,而图巾的s a t u m t i o n _ l o w e 则表示p i d 运算模块输出的下限值,这一参数不仅作用在模型仿真阶段,在啦成的高 级语言代码中也会显现这一功能。 3 参数管理( m - f i l ed i a l o gc a l l b a c k l m a t l a b 代码自动生成体系中的参数配置模式,可以让程序模块的创建和 配置变得非常便携,不需要把程序模型设计得非常严格,给了程序员自由 配置的空间。但与此同时,这样的自由度,在程序员缺乏经验,对目标 m c u d s p 以及m a t l a b 代码自动生成体系尚不了解的情况下,配置 l 错误 的参数,代码自动牛成后,将产生错误的高级语言代码,以及令人费解的 程序现象,也给调试带来了不必要的麻烦,甚至影响项目进度。所以,m a t l a h 代码自动生成体系在参数配置模式的背后,代码自动生成之前,还有一道 把关,即参数管理,通常山m 语言编丐的m a s kh e l p e rf u n c t i o n 束完成对程 序员所配置的参数的管理和校验工作。 以v m s 控制器软件项目中的继l n 器控制模块为例: 幽2 1 3 参数管理 第2 章m a t l a b 代码自动生成体系分析 图中的q s p it l e 6 2 4 0 g pd r i v e r 模块是自己制作的自定义模块,生成的 代码的功能应该是m p c 5 5 5s p i 向t l e 6 2 4 0 g p 芯片传送命令,开启和吸合 相关继电器,在配置c h a n n e ln u m b e r 和i ne n a b l e 这2 个参数时,必须注意 一个约束条件:c h a n n e ln u m b e r1 3 1 6 这4 个通道是默认i ne n a b l e = 0 的, 因此,在参数管理d i a l o gc a l l b a c k 中设定了m a s k _ t l e 6 2 4 0 9 p _ c o n f i 9 0 i g i 数, 定义了这样一种参数检验功能,每当改变c h a n n e ln u m b e r 参数设定为1 3 1 6 时,i ne n a b l e 会自动设定为0 :并处于不可编辑状态。 模型和参数管理相关文件位置: m a t l a b 将m d l 程序模型以及参数管理的m a s kh e l p e rf u n c t i o n 放置于预 设的组织有序的文件夹内。( $ m a t l a b 代表m a t l a b 安装目录) 1 ) s i m u l i n k 模块, m d l 程序模型:$ f m a t l a b t o o l b o x k s i m u l i n k b l o c k s k s i m u l i n k m d l 参数管理:$ f m a t l a b t o o l b o x k s i m u l i n k * m 2 ) m p c 5 5 5 模块, m d l 程序模型:$ m a t l a b t o o l b o x h - t w t a r g e t s k m p c 5 5 5 d k k r t b l o c k s e t * m d l 参数管理:$ m a t l a b t o o l b o x h - t w t a r g e t s v n p c 5 5 5 d k k r t b l o c k s e t * m 3 ) t id s p c 2 0 0 0 模块, m d l 程序模型:$ m a t l a b t o o l b o x r t w t a r g e t s t i c 2 0 0 0 t i c 2 0 0 0 b l k s * m d l 参数管理:$ m a t l a b t o o l b o x k r t w t a r g e t s t i c 2 0 0 0 t i c 2 0 0 0 b l k s * m 了解m d l 模型和m 文件d i a l o gc a l l b a c kf u n c t i o n 的存储位置和开源代 码,对于理解整个m a t l a b 代码自动生成体系,并在其开放体系基础上扩展 开发自己的自定义应用,有很大的帮助。 2 3 2 代码生成过程 m a t l a b 代码自动生成体系的第二部分即为代码生成过程,这是在成功建 立程序模型,并完成参数配置之后,代码生成器的工作。代码生成器的工 作类似高级语言编译器,因此代码生成器同样是可配置的,但它进行代码 生成的过程对于程序员而言却是透明的。m a t l a b 代码自动生成体系下的代 码生成过程可以由图表整理如下: 1 5 第2 章m a t l a b 代码自动生成体系分析 图2 1 4 代码生成过程 第2 章m a t l a b 代码自动生成体系分析 硬件i i b t i f 撞掣缀块t i c 用,、淀制r l c 酗t :a b ) 笈? 用j 、定制滋立件 c h a s - s a h 竺! ! ! 堡! 兰i 飘u d s p 硬骨1 1 体玮覆 产 卜( 至囹控制程序 l_盈target t l c 鬟埔狂序 ii ”1 ”1 “ 里至固定耩功能 咂至囹岫, 屯巫囹a * 1 i b 厂i 再了乏石西西百面 - h c - s a 5 图2 1 5 代码生成过程 图2 1 4 和图2 1 5 展示了m a t l a b 代码自动生成体系在运行代码生成功能 时的一系列过程。 1 模型解析和l m o d e l l r i v e 模型解析是代码生成过程的第一步,由s i m u l i n k 完成。m a t l a b 在模型 解析阶段掌握了整个程序模型的结构、各个模块间的先后执行顺序、各个 模块的参数配置、采样时间等信息,并将这些信息存储在一个名为 i m o d e q r t w 的文件中。 m o d e l r t w 是 m o d e l m d l 经过r t w 模型解析之后产生的,用于描述模 块、输入、输出、参数、状态、存储变量以及其他组成部分属性的文件。 它就像一种数据库,描述了模型中的每个独立模块【4 】。 打开i m o d e l r t w ,其数据结构有点类似c 语言中的结构体,有着非常严 格的层次结构( 如图2 1 6 ) ,且和模型模块一一对应( 如图2 1 7 ) ,下面是 m p c 5 5 5 举例如下: 1 7 第2 章m a t l a b 代码自动生成体系分析 幽21 6 m o d e l n w 严格的层次结构 幽21 7 m o d e l lr t w 信息j 模型模块一一对麻 2 代码生成: 代码生成是将f _ 缸州- n w 结合t l c 目标代码模版文件( t i c ) ,自动生成 特定目标硬件平台上的高级语言源代码的过程。 第2 章m a t l a b 代码自动生成体系分析 3 关于t l c 文件: t l c 语言类似脚本语言,它是一种翻译语言,语法类似其他脚本语言, 可以嵌套特性,有函数定义,也有自己的注释格式【3 】。用t l c 语言编写的 文件即t l c 文件,m a t l a br t w 代码自动生成体系所支持的不同的m c u 或 d s p 各有一套代码生成所需的t l c 文件集。利用t l c 文件生成高级语言代 码的工具是t a r g e tl a n g u a g ec o m p i l e r ( 目标语言编译器) 。 在模型编译阶段,t a r g e tl a n g u a g ec o m p i l e r ( 目标语言编译器) 会将t l c 语言编写的t l c 文件结合之前模型解析所得的 m o d e l r t w 信息,生成目标 m c u 或者d s p 上的高级语言代码。通过编辑t l c 文件,可以改变某个模 块的代码生成方式,也可用于将手写代码以符合m a t l a b 代码自动生成体系 的规范的方式合并到模型代码中。t l c 具有如下特性: 1 ) 每个s i m u l i n k 和可选模块集( 如d s pb l o c k s e t 2 9 】和f i x e d p o i n t b l o c k s e t ) 中的模块都有一组对应的t l c 文件 2 ) 通过对系统目标t l c ( s y s t e mt a r g e tf i l e ) 的配置来确定m c u d s p 硬 件环境。 3 ) t l c 文件中有许多与模型模块相对应的参数变量,在代码生成阶 段,这些参数变量将被 m o d e l r t w 中的信息替代,生成与模块相对 应的高级语言代码。 在s i m u l i n k 中,用户可以创建定制的模块,把已有的代码加入进来。 t l c 可以通过代码内嵌的方法,优化从自定义模块产生的代码。专用算法 和设备驱动程序同样可以被合并到模型代码中。使用s - f u n c t i o nb u i l d e r 模 块可以自动生成用于集成用户自定义代码的t l c 文件。 t l c 文件有组织地存放于m a t l a b 系统目录下,以m p c 5 5 5 微控制器和 t ic 2 0 0 0d s p 微处理器为例( $ m a t l a b 代表m a t l a b 安装目录) , m p c 5 5 5 :$ m a t l a b ) t o o l b o x 栅t a r g e t s p c 5 5 5 d k b l o c k s e t t l c i - c t id s p :$ m a t l a b t o o l b o x r t w t a r g e t s t i c 2 0 0 0 t i c 2 0 0 0 b l k s t l c _ c 结合m a t l a bh e l p 来看这些t l c 源文件有助于理解t l c 文件的实现, 在m a t l a b 代码自动生成体系有一定实践经验之后,可以通过编辑这些t l c 文件来实现原先没有的设备驱动功能。 t l c 模版文件结合参数生成代码的例子请见p 3 6 其它文件一节。 4 关于a 2 1 文件: a 2 l 是控制器描述文件,其中含有e c u 可执行程序中所有观测变量及 标定变量的信息( 包括物理存储地址、数据类型、数据范围等) ,在e c u 工作时,标定观测工具( 如c a n a p e ) 根据a 2 l 文件提供的信息,基于c c p 1 9 第2 章m a t l a b 代码自动生成体系分析 协议,实时读取e c u 中可观测变量的值,并按程序员的要求,通过标定工 具( 如c a n a p e ) 更新标定量数值以优化控制策略。 5 编译链接: m a t l a b 自动生成了高级语言代码之后,会结合同时生成的m a k e f i l e 文 件一m k ) ,控制编译链接过程,运用与目标硬件相对应的编译工具和链接工 具,生成可以在目标硬件平台上运行的嵌入式可执行二进制代码。 m a k e f i l e 文件也是由m a t l a b 自动生成的,同时需要2 个文件, t a r g e t t m f 和 t a r g e t t l c ,这些文件有组织地存放于m a t l a b 系统目录下,以m p c 5 5 5 微控制器和t ic 2 0 0 0d s p 微处理器为例:( $ m a t l a b 代表m a t l a b 安装目录) m p c 5 5 5 :$ m a t l a b t o o l b o x k r t w t a r g e t s k r n p c 5 5 5 d k k r n p c 5 5 5 d k d s pc 2 0 0 0 - $ m a t l a b t o o l b o x h t w t a r g e t s t i c 2 0 0 0 t i c 2 0 0 0 如果在程序模型中配置了用户自定义源代码和用户自定义库,在编译链 接阶段,这些源代码和库将被编译并被链接。 并非所有的源代码都是由t l c 模版生成的,e m b e d d e dt a r g e t 产品在安 装时已经装入了一部分事先编写好的源代码和库,这些文件将在每个项目 代码自动生成后的编译链接中被重复利用。 以m p c 5 5 5 微控制器为例:( $ m a t l a b 代表m a t l a b 安装目录) 编译链接时调用的系统h 文件存放在 $ m a t l a b t o o l b o x h t w t a r g e t s h n p c 5 5 5 d k d r i v e r s s r c k l i b s r c s t a n d a r d k i n c l u d e 编译链接时调用的系统c 文件则存放在 $ m a t l a b t o o l b o x k r t w t a r g e t s k m p c 5 5 5 d k d r i v e r s k s r c q i b s r

温馨提示

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

评论

0/150

提交评论