CN101216769A - 层次化系统描述语言SmartC到C代码的自动转换方法 - Google Patents
层次化系统描述语言SmartC到C代码的自动转换方法 Download PDFInfo
- Publication number
- CN101216769A CN101216769A CNA2008100591114A CN200810059111A CN101216769A CN 101216769 A CN101216769 A CN 101216769A CN A2008100591114 A CNA2008100591114 A CN A2008100591114A CN 200810059111 A CN200810059111 A CN 200810059111A CN 101216769 A CN101216769 A CN 101216769A
- Authority
- CN
- China
- Prior art keywords
- code
- smartc
- low layer
- high level
- data structure
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000006243 chemical reaction Methods 0.000 title description 4
- 238000004458 analytical method Methods 0.000 claims abstract description 10
- 238000013517 stratification Methods 0.000 claims description 21
- 230000006870 function Effects 0.000 claims description 9
- 238000012546 transfer Methods 0.000 claims description 7
- 238000013461 design Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000005684 electric field Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种层次化系统描述语言SmartC到C代码的自动转换方法。根据特定的解析方法,解析SmartC代码,生成一种层次化的中间数据结构;然后再根据特定的生成方法,从中间数据结构生成C代码。本发明设置层次化的中间数据结构,把解析阶段和生成阶段按模块分开,提高模块复用率;提供的解析方法和生成方法适用于其他的层次化语言到C代码的转换。利用该自动转换机制,使SmartC语言真正成为一种编程语言,大大简化了汽车电子领域软件的开发。
Description
技术领域
本发明涉及嵌入式领域基于模型的软件开发方法中的自动代码生成技术,尤其是涉及一种由层次化系统描述语言SmartC到C代码的自动转换方法。
背景技术
随着嵌入式技术的不断发展,传统的基于手工编写代码的开发方法存在容易出错、开发效率低等许多不足,已经无法满足嵌入式软件开发的需要。基于模型的软件开发方法是嵌入式领域一种新的软件开发方法。该方法通过抽象出软件系统的关键问题并用模型加以描述,表达出系统的解决方案,然后通过采用形式化的工具对系统模型进行验证,以保证系统设计的正确性。在保证系统正确性的基础上,就可以根据模型自动生成代码、自动生成文档等,甚至自动生成测试案例。基于模型的设计思想从根本上解决了软件设计的正确性保证问题,从而大大提高了软件开发效率和质量。
在基于模型的软件开发方法中,对系统的描述方法非常重要。C语言本身结构单一,无法很好描述一个系统,所以一般会用更高级的模型来描述软件系统。SmartC语言是浙江大学嵌入式系统工程实验室自主开发的面向汽车电子领域的系统表述语言,用于解决嵌入式系统结构的描述问题。SmartC语言的核心是其层次化结构模型,系统结构从上到下分为四个层次,分别是系统层(Application)、模块层(Module)、任务层(Task)、以及组件层(Component)。在SmartC层次化结构模型中,各个层次功能明确,系统层关注系统结构,不涉及模块的具体实现;模块层则关注对该模块的具体实现,主要利用操作系统提供的功能(比如任务、Alarm、事件等)来实现某一功能;任务层则关注任务的具体执行流程的实现;组件层则关注具体算法的实现。SmartC语言通过把系统结构的设计分为层次化的描述,使得系统结构变得更加清晰和合理,增强了对系统结构的表现力。
SmartC语言能够很方便的描述一个嵌入式系统,但是SmartC语言描述的系统是层次化的,而C代码则是扁平的结构,所以两者之间的转换需要解决一些问题,主要有以下三个方面:
1)如何用扁平结构的C语言程序框架去描述层次化的系统结构。
2)层次化结构带来的名字冲突问题。
3)层次化结构中上下层数据的传递问题。
所以,如果能发明一种较为通用的从层次化语言转化到扁平的C语言的方法,将对嵌入式软件开发工具的开发具有重要意义。
发明内容
本发明为实现嵌入式领域的基于模型的软件开发方法,提出了一种由层次化系统描述语言SmartC到C代码的自动转换方法。
本发明解决其技术问题所采用的技术方案如下:
1)根据特定的解析方法,解析SmartC代码,生成一种层次化的中间数据结构;
2)然后再根据特定的生成方法,从中间数据结构生成C代码。
所述的特定的解析方法:采用通过深度优先的解析方法,从高层到低层依次解析SmartC代码,高层确定低层要解析的SmartC代码,低层向高层提供解析得到的信息,最终生成一个层次化的中间结构。
所述的特定的生成方法:采用深度优先的生成方法,从高层到低层依次生成C代码,高层为低层提供数据,低层为高层提供函数实体的方法,并提出了解决名字冲突以及数据传递问题的方法。
本发明具有的有益效果是:
本发明设置层次化的中间数据结构,把解析阶段和生成阶段按模块分开,提高模块复用率;提供的解析方法和生成方法适用于其他的层次化语言到C代码的转换。利用该自动转换机制,使SmartC语言真正成为一种编程语言,大大简化了汽车电子领域软件的开发。
附图说明
图1 SmartC代码自动生成C代码示意图。
图2层次化的中间数据结构示意图。
图3从高层到低层的解析过程结构图。
图4每一层的具体解析方法。
图5从高层到低层的代码生成过程结构图。
图6每一层代码生成的具体过程。
具体实施方式
下面结合图,具体描述本发明的实施方式。
本发明一种层次化系统描述语言SmartC到C代码的自动转换方法的具体转换过程如图1所示,具体分为两个阶段:第一个阶段是解析阶段,即通过解析SmartC代码,生成一个层次化的中间数据结构。第二个阶段是生成阶段,即通过分析中间数据结构,根据特定代码生成方法,生成相应的C代码。
具体转换过程的实现分为如下三个步骤:
1.设计层次化的中间数据结构
和层次化的SmartC语言相匹配,中间数据结构被设计为一个层次化的数据结构。图2是中间数据结构示意图。该数据结构类似一个语法树,但在普通的树结构上增加了同一层之间的关系连接以及从低层到高层的关系连接,用来表示模型间的关系以及下层模型对上层模型的访问,从而包含了SmartC层次化模型的所有信息。
2.从高层往低层的解析过程
解析SmartC代码的过程采用深度优先的解析方法,如图3所示,具体为从高层往低层解析,高层确定低层要解析的SmartC代码,低层通过解析相应的SmartC代码,向高层提供解析得到的信息。对每一层的解析则按图4所示的流程进行解析,首先从高层中依次遍历需要解析的节点,直到遍历完全。对每个需要解析的节点,首先找到对应的SmartC代码,然后分析生成所有节点和表示相互关系的连接。然后分析生成的连接,设置各个节点之间的相互关系。最后根据生成的信息,设置解析的文件对应的在高层中的节点。
3.从层次化中间数据结构生成C代码
本方法针对从层次化的SmartC语言转化为扁平结构的C语言而需要解决的三个问题,分别提出了解决方法,具体为:
1)生成程序框架
生成程序框架部分是把层次化的SmartC代码转化为扁平的C代码的主要部分。生成过程和解析过程类似,也是按深度优先,从高层到低层来依次生成C代码。图5表示了生成C代码的总体过程。高层为低层提供数据,低层为高层提供函数实现。在对每一层生成的代码中,生成三个方面的代码:
(1)生成对该层所建模型的声明(.h文件)
(2)生成对该层所建模型的定义(.c文件)
(3)生成表示该层逻辑流程的代码
其中,本层次包含的所有节点的声明生成在.h文件里,他们的定义生成在.c文件里,而表示这些模型的逻辑流程的代码将会提供给上一层,生成在上一层的.c文件里。(最高层和最低层除外,最高层不需要向上层提供表示该层逻辑流程的代码,最低层不包含更下一层的模型,所以不需要生成.h和.c文件。)
对每一层的代码生成按图6所示的方式进行。依次遍历生成的节点,根据节点类型以及设置好的相互关系来具体生成代码。如果该节点是数据或者其他模型,则直接在本层的.h和.c文件里生成相应的声明和定义。如果是需要代码生成的下一层次的节点,则先对该节点进行代码生成,然后提取表示其逻辑流程的信息,具体生成代码。最后,分析该层次的逻辑和流程信息,保存提供给上层。
2)解决名字冲突
层次化的SmartC代码转换到扁平的C代码的过程中会有名字冲突问题。因为不同模型的下一层可能含有相同名称的模型。解决方法是在每个模型名前加上上层模型的名字。比如APP系统下AMT模型的Collector任务,生成的C代码中,其名字将是APP_AMT_Collector。
3)实现上下层数据传递
在层次化模型中,一个某层上的数据对该层而言是局部的,对下层而言是全局的。本方法对数据传递按如下方式处理:一般用函数参数的形式传递到下层。如果下层不能实现为函数或者不能自己定义该函数的参数,则把该数据在上升为全局数据(即在.c文件里定义全局数据),然后下层通过export该数据来访问该数据。
Claims (3)
1.一种层次化系统描述语言SmartC到C代码的自动转换方法,其特征在于:
1)根据特定的解析方法,解析SmartC代码,生成一种层次化的中间数据结构;
2)然后再根据特定的生成方法,从中间数据结构生成C代码。
2.根据权利要求1所述的一种层次化系统描述语言SmartC到C代码的自动转换方法,其特征在于所述的特定的解析方法:采用通过深度优先的解析方法,从高层到低层依次解析SmartC代码,高层确定低层要解析的SmartC代码,低层向高层提供解析得到的信息,最终生成一个层次化的中间结构。
3.根据权利要求1所述的一种层次化系统描述语言SmartC到C代码的自动转换方法,其特征在于所述的特定的生成方法:采用深度优先的生成方法,从高层到低层依次生成C代码,高层为低层提供数据,低层为高层提供函数实体的方法,并提出了解决名字冲突以及数据传递问题的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100591114A CN101216769A (zh) | 2008-01-14 | 2008-01-14 | 层次化系统描述语言SmartC到C代码的自动转换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100591114A CN101216769A (zh) | 2008-01-14 | 2008-01-14 | 层次化系统描述语言SmartC到C代码的自动转换方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101216769A true CN101216769A (zh) | 2008-07-09 |
Family
ID=39623208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008100591114A Pending CN101216769A (zh) | 2008-01-14 | 2008-01-14 | 层次化系统描述语言SmartC到C代码的自动转换方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101216769A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750152A (zh) * | 2012-06-21 | 2012-10-24 | 新浪网技术(中国)有限公司 | 一种基于描述语言生成多种编程语言的应用的方法及装置 |
CN102929681A (zh) * | 2012-10-31 | 2013-02-13 | 中国运载火箭技术研究院 | 一种虚拟试验分布式对象模型框架代码自动生成方法 |
CN104461569A (zh) * | 2014-12-26 | 2015-03-25 | 东南大学 | 一种基于matlab的c/c++程序生成辅助方法 |
CN104572072A (zh) * | 2014-12-01 | 2015-04-29 | 北京百度网讯科技有限公司 | 一种对基于mvc模式的程序的语言转换方法与设备 |
-
2008
- 2008-01-14 CN CNA2008100591114A patent/CN101216769A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750152A (zh) * | 2012-06-21 | 2012-10-24 | 新浪网技术(中国)有限公司 | 一种基于描述语言生成多种编程语言的应用的方法及装置 |
CN102750152B (zh) * | 2012-06-21 | 2015-02-04 | 新浪网技术(中国)有限公司 | 一种基于描述语言生成多种编程语言的应用的方法及装置 |
CN102929681A (zh) * | 2012-10-31 | 2013-02-13 | 中国运载火箭技术研究院 | 一种虚拟试验分布式对象模型框架代码自动生成方法 |
CN102929681B (zh) * | 2012-10-31 | 2016-06-01 | 中国运载火箭技术研究院 | 一种虚拟试验分布式对象模型框架代码自动生成方法 |
CN104572072A (zh) * | 2014-12-01 | 2015-04-29 | 北京百度网讯科技有限公司 | 一种对基于mvc模式的程序的语言转换方法与设备 |
CN104572072B (zh) * | 2014-12-01 | 2017-09-29 | 北京百度网讯科技有限公司 | 一种对基于mvc模式的程序的语言转换方法与设备 |
CN104461569A (zh) * | 2014-12-26 | 2015-03-25 | 东南大学 | 一种基于matlab的c/c++程序生成辅助方法 |
CN104461569B (zh) * | 2014-12-26 | 2018-02-27 | 东南大学 | 一种基于matlab的c/c++程序生成辅助方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019742B (zh) | 一种多dsp平台上的自动代码生成方法 | |
CN106371813B (zh) | 一种基于Simulink的电动汽车电机控制器软件生成方法 | |
CN104156313A (zh) | 一种Web服务测试用例自动生成方法 | |
CN102222105B (zh) | 一种实时统计报表的生成方法 | |
CN102542513B (zh) | 基于本体的电网公共信息模型的验证工具及其方法 | |
Hu et al. | Mapping UML Diagrams to a Petri Net Notation for System Simulation. | |
CN102880468B (zh) | 一种用于ecu程序开发的代码智能提示方法及其系统 | |
CN101464799A (zh) | 基于可视化建模的mpi并行程序设计系统及框架代码自动生成方法 | |
CN102929681A (zh) | 一种虚拟试验分布式对象模型框架代码自动生成方法 | |
CN105224511A (zh) | 一种智能变电站scd文件的校验方法 | |
CN110262794A (zh) | 一种基于规范与描述语言的aadl功能行为拓展方法及工具 | |
CN101739258A (zh) | Aadl模型的自动代码生成方法 | |
CN102103504A (zh) | 一种反射式建模工具及其重构方法 | |
CN101673198A (zh) | 一种验证uml模型中动态行为与时序契约的一致性的方法 | |
CN102012673A (zh) | 复杂反应型系统控制器设计方法 | |
CN104020992B (zh) | 由C/C++生成Java Web服务的方法及装置 | |
CN109614093A (zh) | 可视化智能合约系统以及智能合约的处理方法 | |
CN101216769A (zh) | 层次化系统描述语言SmartC到C代码的自动转换方法 | |
Choi et al. | An approach to share architectural drawing information and document information for automated code checking system | |
CN103793458B (zh) | 一种将aadl无损转换成xml的方法 | |
CN105335161B (zh) | 一种从tasm时间抽象状态机到扩展nta自动机的转换方法 | |
CN102375897A (zh) | 一种车身焊接和装配结构树状图生成系统 | |
CN102681855A (zh) | 一种面向无线传感网的模型到代码的转化方法 | |
CN104503767A (zh) | 基于lin协议的代码自动生成系统及方法 | |
CN102214103A (zh) | 以功能单元为基础的任务程序的创建和执行方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20080709 |