CN111782194B - 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法 - Google Patents

一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法 Download PDF

Info

Publication number
CN111782194B
CN111782194B CN202010593137.8A CN202010593137A CN111782194B CN 111782194 B CN111782194 B CN 111782194B CN 202010593137 A CN202010593137 A CN 202010593137A CN 111782194 B CN111782194 B CN 111782194B
Authority
CN
China
Prior art keywords
portable unit
file
code
type
implementation
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.)
Active
Application number
CN202010593137.8A
Other languages
English (en)
Other versions
CN111782194A (zh
Inventor
马春燕
雍二柯
王保原
谭乔煜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Northwestern Polytechnical University
Original Assignee
Northwestern Polytechnical University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Northwestern Polytechnical University filed Critical Northwestern Polytechnical University
Priority to CN202010593137.8A priority Critical patent/CN111782194B/zh
Publication of CN111782194A publication Critical patent/CN111782194A/zh
Application granted granted Critical
Publication of CN111782194B publication Critical patent/CN111782194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/186Templates

Abstract

本发明提出一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,该方法根据FACE开放体系架构模型关系信息,设计代码模板,调用Freemarker模板引擎实现代码自动生成。通过本发明,用户只需要在建模工具中对可移植单元进行建模便可自动生成对应的C语言代码。当用户需要修改可移植单元信息时,只需要更改可移植单元模型文件,无需修改实现逻辑模板文件;当用户需要修改代码模板时,只需要更改对应的代码模板,无需更改实现逻辑和模型文件。不仅如此,基于FACE开放体系架构生成的可移植单元代码可以直接部署在满足FACE标准的系统上,无需做其他更改,降低软件的耦合度、提升了软件的可移植性。

Description

一种基于航空嵌入式开放体系架构的可移植单元代码自动生 成方法
技术领域
本发明属于航空计算机领域,涉及基于FACE(Future Airborne CapabilityEnvironment:未来机载能力环境)标准的可移植单元代码自动生成方法。
背景技术
为了解决航空电子系统的复杂性逐渐增高,系统重用性差、机载软件和硬件耦合性较高、系统升级扩展困难的问题,国际开放组织(The Open Group)于2014年发布了FACE(Future Airborne Capability Environment,未来机载能力环境)架构标准。FACE技术方法通过定义参考架构和采用设计原则来增强软件可移植性,来解决模块化、可移植性和互操作性方面的障碍。
基于FACE标准的航空计算机系统的源代码开发已经是国内众多机构的研究项目。然而目前源代码开发工作多是手工编写代码,这其中涉及大量重复性工作,软件开发周期长,软件开发成本居高不下。目前很多国内外企业和研究机构都在专注于代码自动生成技术的有关研究以及相应的工具开发。当前代码自动生成技术的方法主要有:基于模型的代码自动生成、基于模板的代码自动生成和混合代码自动生成。基于模板的代码自动生成技术缺少框架模型支撑、没有具体的业务逻辑实现、适用范围小,在应用于FACE标准后,不能准确描述航空嵌入式系统代码的逻辑关系;基于模型的代码自动生成技术在建模方面仍然比较困难、代码冗余比较多,在应用于FACE标准后,会增加编程工作量且不易于维护;混合代码自动生成在基于模型驱动架构的基础上使用了模板技术,有效规避了两者的缺点,但由于侧重点在模型驱动架构上,代码模板不具有实际工程意义,在应用于FACE标准后,不能体现FACE标准开放体系架构的业务逻辑。
发明内容
为解决现有技术存在的问题,本发明基于FACE开放体系架构模型和Freemarker模板引擎,提出了一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,该方法根据FACE开放体系架构模型关系信息,设计代码模板,调用Freemarker模板引擎实现代码自动生成。利用该方法可以体现FACE标准开放体系架构的逻辑关系、而且代码模板易于维护,进而能够提高工作人员开发效率,降低软件开发成本,将开发人员从繁琐的代码编写中解放出来,把更多的精力投入到需求分析和设计软件上,间接提升软件的质量。
本发明的技术方案为:
所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,包括以下步骤:
步骤1:设计可移植单元端口通信消息C语言代码模板;
所述端口通信消息由一个或多个消息实体组成,消息实体由消息类型构成,所述消息类型包括IDL基本类型、IDL Fixed类型、IDL枚举类型和序列类型;
各种消息类型设计代码模板如下:
(1)IDL基本类型代码模板
IDL基本类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、FACE基本类型对照文件的引用以及IDL基本类型起别名语句;
(2)IDL Fixed类型代码模板
IDL Fixed类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、FACE基本类型对照文件的引用、IDL Fixed属性定义结构体以及IDL Fixed类型起别名语句;
(3)IDL枚举类型代码模板
IDL枚举类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、枚举元素宏定义以及IDL枚举类型起别名语句;
(4)序列类型代码模板
序列类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、序列元素头文件的引用、序列属性定义结构体以及IDL序列类型起别名语句;
步骤2:设计可移植单元内部业务逻辑C语言代码模板;
所述可移植单元内部业务逻辑包括可移植单元调度、可移植单元生命周期管理和可移植单元内部行为框架;可移植单元内部业务逻辑模板如下:
(1)可移植单元调度代码模板
可移植单元调度代码模板包括文件介绍注释、可移植单元生命周期管理头文件的引用、可移植单元传输服务注入接口头文件的引用、APEX接口的引用、日志服务头文件的引用以及返回值为空的主函数;
(2)可移植单元生命周期管理代码模板
可移植单元生命周期管理代码包括包含生命周期管理头文件以及生命周期管理实现源文件;所述生命周期管理头文件包括可移植单元初始化、可移植单元启动和可移植单元终止的声明所述;生命周期管理实现源文件包括可移植单元初始化、可移植单元启动和可移植单元终止的实现;
生命周期管理头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、可移植单元初始化声明、可移植单元启动声明以及可移植单元终止声明;
生命周期管理实现源文件代码模板包括文件介绍注释、可移植单元生命周期管理头文件的引用、可移植单元内部行为框架头文件的引用、可移植单元传输服务注入接口头文件的引用、APEX接口的引用、日志服务头文件的引用、传输服务连接名称的定义与赋值、可移植单元初始化的实现、可移植单元启动的实现以及可移植单元终止的实现;
(3)可移植单元内部行为框架代码模板
可移植单元内部行为框架代码包括可移植单元特定行为声明头文件和可移植单元特定行为实现源文件;所述可移植单元特定行为声明包括特定行为初始化、特定行为启动和特定行为终止的声明;所述可移植单元特定行为实现包括特定行为初始化、特定行为启动和特定行为终止的实现代码框架;
可移植单元特定行为声明头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、可移植单元特定行为初始化声明、可移植单元特定行为启动声明、可移植单元特定行为终止声明以及APEX进程进入点声明;
可移植单元特定行为实现源文件代码模板包括文件介绍注释、可移植单元内部行为框架头文件的引用、可移植单元传输服务注入接口头文件的引用、日志服务头文件的引用、可移植单元特定行为初始化的实现代码框架、可移植单元特定行为启动的实现代码框架、可移植单元特定行为终止的实现代码框架以及APEX进程进入点的实现代码框架;
步骤3:设计可移植单元传输服务注入接口C语言代码模板
可移植单元传输服务注入接口包括各个端口通信消息实例化传输服务的接口;不同的可移植单元端口消息模型能够转化成对应的可移植单元传输服务注入接口的声明头文件和实现源文件;
其中声明头文件包括创建连接、销毁连接以及发送或接收消息的声明,其中当端口为输出端口,则为发送消息,当端口为输入端口,则为接收消息;而实现源文件包括创建连接、销毁连接以及发送或接收消息的实现;
可移植单元传输服务注入接口的头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、当前端口通信消息头文件的引用、传输服务头文件的引用、通信连接名称声明、通信模式类型声明、通信连接ID声明、通信连接方向声明、消息大小声明、创建连接声明、销毁连接声明以及发送或接收当前端口特定消息声明;
可移植单元传输服务注入接口的源文件代码模板包括文件介绍注释、可移植单元传输服务注入接口头文件的引用、日志服务头文件的引用、创建连接实现、销毁连接实现以及发送或接收当前端口特定消息实现;
步骤4:解析FACE开放体系架构可移植单元模型文件;
根据步骤1~步骤3设计的代码模板,解析FACE开放体系架构可移植单元模型文件,获取代码模板所需信息,其中,
可移植单元端口通信消息需要消息类型、消息别名和消息属性元素信息;
可移植单元内部业务逻辑需要可移植单元类型、可移植单元名称、可移植单元进程或线程的属性和可移植单元IO访问情况信息;
可移植单元传输服务注入接口需要通信端口类型、通信端口名称和端口通信消息信息;
步骤5:根据模型信息实例化代码模板;
采用FreeMarker模板引擎,调用可移植单元代码模板,将获取的可移植单元模型信息传入模板中;根据模板设计,将自动生成的不同代码模块输出到对应的可移植单元C语言代码文件中,并对代码文件进行重命名。
进一步的,IDL Fixed类型代码模板中,IDL Fixed属性定义结构体的属性为Fixed的数据总位数、范围和数据值;三者的值来自用户输入,其中数据总位数的类型是无符号短整型、范围的类型是短整型、数据值的类型是字符型。
进一步的,IDL枚举类型代码模板中的枚举元素宏定义是用枚举元素名称依次代替从0开始的整数。
进一步的,序列类型代码模板中的序列属性定义结构体的属性为序列的最大值、序列长度和序列元素,其中最大值和序列长度的类型都是无符号长整型,值来自用户输入;序列元素来自用户建模,类型为元素的别名。
进一步的,步骤1中还设计有航空嵌入式开放体系架构模型中的平台实体和平台视图代码模板;
平台实体代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、平台实体元素头文件的引用、平台实体属性定义结构体以及平台实体起别名语句;其中平台实体属性定义结构体的属性为用户建模添加的IDL元素,属性类型为IDL元素的别名,值为添加到平台实体后的引用名称;
平台视图代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、平台视图元素头文件的引用、平台视图属性定义结构体以及平台视图起别名语句;其中平台视图属性定义结构体的属性为用户建模添加的平台实体,属性类型为平台实体的别名,值为添加到平台视图后的引用名称。
进一步的,步骤2的可移植单元调度代码模板中,主函数包括APEX进程属性的赋值、设置分区模式、调用生命周期管理中的可移植单元初始化、启动和终止接口。
进一步的,步骤2生命周期管理实现源文件代码模板中的可移植单元初始化的实现包括:调用传输服务注入接口创建连接、创建连接日志记录、创建APEX进程以及调用内部行为框架的特定行为初始化接口;可移植单元启动的实现包括:启动APEX进程以及调用内部行为框架的特定行为启动接口;可移植单元终止的实现包括:调用内部行为框架的特定行为终止接口以及调用传输服务注入接口断开连接。
进一步的,步骤3可移植单元传输服务注入接口的源文件代码模板中,创建连接实现包括:调用传输服务创建连接接口以及创建连接日志记录;销毁连接实现包括:调用传输服务销毁连接接口以及销毁连接日志记录;发送消息实现包括:数据交换ID定义、发送消息封装以及调用传输服务发送消息接口;接收消息实现包括:数据交换ID定义、接收消息大小定义以及调用传输服务接收消息接口。
进一步的,步骤4中,采用DOM4j方法解析可移植单元模型,将获取的节点或属性值保存在对应的数据结构中。
进一步的,步骤5中,可移植单元端口通信消息模型中的IDL类型、平台实体和平台视图都会输出到不同的C语言头文件中,其文件名是对应模型元素的别名;可移植单元内部业务逻辑模型会根据功能生成五个不同的C语言代码文件,其文件名是可移植单元的名称加上代码功能;可移植单元传输服务注入接口模型会根据通信端口生成对应的C语言头文件和源文件,其文件名为通信端口的名称加上通信端口类型。
有益效果
本发明采用FreeMarker模板引擎和FACE开放体系架构可移植单元模型实现可移植单元的代码自动生成,可以使开发人员专注于软件功能的开发、提高软件开发的效率、进而降低软件开发的成本。
通过本发明,用户只需要在建模工具中对可移植单元进行建模便可自动生成对应的C语言代码。当用户需要修改可移植单元信息时,只需要更改可移植单元模型文件,无需修改实现逻辑模板文件;当用户需要修改代码模板时,只需要更改对应的代码模板,无需更改实现逻辑和模型文件。不仅如此,基于FACE开放体系架构生成的可移植单元代码可以直接部署在满足FACE标准的系统上,无需做其他更改,降低软件的耦合度、提升了软件的可移植性。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
下面详细描述本发明的实施例,所述实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
本发明提出的基于FACE标准的可移植单元代码自动生成方法是在FACE开放体系架构模型的基础上,设计航空嵌入式开放体系架构系统的代码模板,最终通过模板引擎实现可移植单元C语言代码的自动生成。FACE开放体系架构模型包括系统模型、数据模型和可移植单元模型。其中可移植单元模型是系统中一个个功能模块,数量庞大、且经常伴随着重复的代码工作,本发明主要解析FACE开放体系架构可移植单元模型。可移植单元通常包括端口通信消息模型、内部业务逻辑模型和传输服务注入接口模型。
本发明首先给出了航空嵌入式开放体系架构系统的可移植单元各模块的代码模板设计方案,然后给出FACE开放体系架构模型的解析方案,最后给出基于代码模板和FACE模型的C语言代码自动生成方法。具体步骤描述如下:
步骤1:设计可移植单元端口通信消息C语言代码模板
可移植单元端口通信消息类型主要包括IDL基本类型、IDL Fixed类型、IDL枚举类型和序列类型,这些消息类型构成消息实体、一个或多个消息实体再组成端口通信消息。针对端口通信消息中的元素设计如下模板:
(1)IDL基本类型代码模板
IDL基本类型会转化为对应C语言基本类型。在模板中使用这些C语言基本类型时,需要使用typedef给这些基本类型起别名。
IDL基本类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、FACE基本类型对照文件的引用以及IDL基本类型起别名语句。
(2)IDL Fixed类型代码模板
对于固定类型,定义包含数据总位数、范围和数据值的结构体作为Fixed的数据类型,然后使用typedef对该数据类型起别名。该数据类型及typedef会转化为C语言头文件。
IDL Fixed类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、FACE基本类型对照文件的引用、IDL Fixed属性定义结构体以及IDL Fixed类型起别名语句。IDL Fixed属性定义结构体的属性为Fixed的数据总位数、范围和数据值。三者的值来自用户输入,其中数据总位数的类型是无符号短整型、范围的类型是短整型、数据值的类型是字符型。
(3)IDL枚举类型代码模板
IDL枚举类型会转化为对应C语言的枚举类型,并使用typedef给枚举类型起别名。
IDL枚举类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、枚举元素宏定义以及IDL枚举类型起别名语句。其中枚举元素宏定义是用枚举元素名称依次代替从0开始的整数。
(4)序列类型代码模板
对于有节序列和无界序列,定义包含最大值、序列长度和序列元素的结构体作为序列的数据类型。
序列类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、序列元素头文件的引用、序列属性定义结构体以及IDL序列类型起别名语句。其中序列属性定义结构体的属性为序列的最大值、序列长度和序列元素。其中最大值和序列长度的类型都是无符号长整型,值都来自用户输入;序列元素来自用户建模,类型为元素的别名。
(5)平台实体、平台视图代码模板
FACE模型中的平台实体即消息实体,平台视图即端口消息类型。平台实体和平台视图会转化为对应的C语言头文件。头文件中包括描述平台实体或平台视图的结构体,结构体的成员为平台实体或平台视图的属性元素。
平台实体代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、平台实体元素头文件的引用、平台实体属性定义结构体以及平台实体起别名语句。其中平台实体属性定义结构体的属性为用户建模添加的IDL元素。这些属性的类型为IDL元素的别名,值为添加到平台实体后的引用名称。
平台视图代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、平台视图元素头文件的引用、平台视图属性定义结构体以及平台视图起别名语句。其中平台视图属性定义结构体的属性为用户建模添加的平台实体。这些属性的类型为平台实体的别名,值为添加到平台视图后的引用名称。
步骤2:设计可移植单元内部业务逻辑C语言代码模板
可移植单元内部业务逻辑主要包括可移植单元调度、可移植单元生命周期管理和可移植单元内部行为框架。
(1)可移植单元调度代码模板
可移植单元调度代码包括可移植单元主线程所在源文件。主线程调用可移植单元生命周期管理的相关接口实现可移植单元的调度。
可移植单元调度代码模板包括文件介绍注释、可移植单元生命周期管理头文件的引用、可移植单元传输服务注入接口头文件的引用、APEX接口的引用、日志服务头文件的引用以及返回值为空的主函数。其中主函数中包括APEX进程属性的赋值、设置分区模式、调用生命周期管理中的可移植单元初始化、启动和终止接口。这里的APEX进程属性和分区模式需要用户在建模中指定。
(2)可移植单元生命周期管理代码模板
可移植单元生命周期管理代码包括包含生命周期管理头文件以及生命周期管理实现源文件。其中头文件包括可移植单元初始化、可移植单元启动和可移植单元终止的声明;源文件包括可移植单元初始化、可移植单元启动和可移植单元终止的实现。如果可移植单元属于特定平台服务段,则可移植单元初始化还包括调用初始化IO接口和打开IO接口功能。在可移植单元初始化、启动和终止阶段,会调取对应的可移植单元内部行为逻辑接口,实现功能特定化。
生命周期管理头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、可移植单元初始化声明、可移植单元启动声明以及可移植单元终止声明。
生命周期管理实现源文件代码模板包括文件介绍注释、可移植单元生命周期管理头文件的引用、可移植单元内部行为框架头文件的引用、可移植单元传输服务注入接口头文件的引用、APEX接口的引用、日志服务头文件的引用、传输服务连接名称的定义与赋值、可移植单元初始化的实现、可移植单元启动的实现以及可移植单元终止的实现。其中可移植单元初始化的实现包括:调用传输服务注入接口创建连接、创建连接日志记录、创建APEX进程以及调用内部行为框架的特定行为初始化接口;可移植单元启动的实现包括:启动APEX进程以及调用内部行为框架的特定行为启动接口;可移植单元终止的实现包括:调用内部行为框架的特定行为终止接口以及调用传输服务注入接口断开连接。
(3)可移植单元内部行为框架代码模板
可移植单元内部行为框架代码包括可移植单元特定行为声明头文件和可移植单元特定行为实现源文件。其中可移植单元特定行为声明包括特定行为初始化、特定行为启动和特定行为终止的声明;可移植单元行为实现包括特定行为初始化、特定行为启动和特定行为终止的实现代码框架。编程人员可以根据可移植单元描述的具体功能给可移植行为框架添加内部代码。
可移植单元特定行为声明头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、可移植单元特定行为初始化声明、可移植单元特定行为启动声明、可移植单元特定行为终止声明以及APEX进程进入点声明。
可移植单元特定行为实现源文件代码模板包括文件介绍注释、可移植单元内部行为框架头文件的引用、可移植单元传输服务注入接口头文件的引用、日志服务头文件的引用、可移植单元特定行为初始化的实现代码框架、可移植单元特定行为启动的实现代码框架、可移植单元特定行为终止的实现代码框架以及APEX进程进入点的实现代码框架。
步骤3:设计可移植单元传输服务注入接口C语言代码模板
可移植单元传输服务注入接口主要包括各个端口通信消息实例化传输服务的接口。可移植单元可能包括多个通信端口,不同的可移植单元端口消息模型会转化成对应的传输服务注入接口的声明头文件和实现源文件。
其中声明头文件包括创建连接、销毁连接和发送/接收消息(当端口为输出端口,则为发送消息;当端口为输入端口,则为接收消息)的声明;实现源文件包括创建连接、销毁连接和发送/接收消息的实现。在实现文件中,会调取对应的传输服务接口来和访问传输服务,进而和其他可移植单元进行通信。
可移植单元传输服务注入接口的头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、当前端口通信消息头文件的引用、传输服务头文件的引用、通信连接名称声明、通信模式类型声明、通信连接ID声明、通信连接方向声明、消息大小声明、创建连接声明、销毁连接声明以及发送/接收当前端口特定消息声明。
可移植单元传输服务注入接口的源文件代码模板包括文件介绍注释、可移植单元传输服务注入接口头文件的引用、日志服务头文件的引用、创建连接实现、销毁连接实现以及发送/接收当前端口特定消息实现。其中创建连接实现包括:调用传输服务创建连接接口以及创建连接日志记录;销毁连接实现包括:调用传输服务销毁连接接口以及销毁连接日志记录;发送消息实现包括:数据交换ID定义、发送消息封装以及调用传输服务发送消息接口;接收消息实现包括:数据交换ID定义、接收消息大小定义以及调用传输服务接收消息接口。
步骤4:解析FACE开放体系架构可移植单元模型文件
根据前三步中设计的代码模板,解析FACE开放体系架构可移植单元模型文件,获取代码模板所需信息。采用DOM4j方法解析可移植单元模型,将获取的节点或属性值保存在对应的数据结构中。
可移植单元端口通信消息需要消息类型、消息别名和消息属性元素信息;
可移植单元内部业务逻辑需要可移植单元类型、可移植单元名称、可移植单元进程或线程的属性和可移植单元IO访问情况信息;
可移植单元传输服务注入接口需要通信端口类型、通信端口名称和端口通信消息信息。
步骤5:根据模型信息实例化代码模板
采用FreeMarker模板引擎,调用可移植单元代码模板,将获取的可移植单元模型信息传入模板中。最后根据模板设计,将自动生成的不同代码模块输出到对应的可移植单元C语言代码文件中,并对代码文件进行重命名。
可移植单元端口通信消息模型中的IDL类型、平台实体和平台视图都会输出到不同的C语言头文件中,其文件名是对应模型元素的别名。
可移植单元内部业务逻辑模型会根据功能生成五个不同的C语言代码文件,其文件名是可移植单元的名称加上代码功能。
可移植单元传输服务注入接口模型会根据通信端口生成对应的C语言头文件和源文件,其文件名为通信端口的名称加上通信端口类型。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (10)

1.一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:包括以下步骤:
步骤1:设计可移植单元端口通信消息C语言代码模板;
所述端口通信消息由一个或多个消息实体组成,消息实体由消息类型构成,所述消息类型包括IDL基本类型、IDL Fixed类型、IDL 枚举类型和序列类型;
各种消息类型设计代码模板如下:
1)IDL基本类型代码模板
IDL基本类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、FACE基本类型对照文件的引用以及IDL基本类型起别名语句;
2)IDL Fixed类型代码模板
IDL Fixed类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、FACE基本类型对照文件的引用、IDL Fixed属性定义结构体以及IDL Fixed类型起别名语句;
3)IDL 枚举类型代码模板
IDL 枚举类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、枚举元素宏定义以及IDL 枚举类型起别名语句;
4)序列类型代码模板
序列类型代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、序列元素头文件的引用、序列属性定义结构体以及IDL序列类型起别名语句;
步骤2:设计可移植单元内部业务逻辑C语言代码模板;
所述可移植单元内部业务逻辑包括可移植单元调度、可移植单元生命周期管理和可移植单元内部行为框架;可移植单元内部业务逻辑模板如下:
1)可移植单元调度代码模板
可移植单元调度代码模板包括文件介绍注释、可移植单元生命周期管理头文件的引用、可移植单元传输服务注入接口头文件的引用、APEX接口的引用、日志服务头文件的引用以及返回值为空的主函数;
2)可移植单元生命周期管理代码模板
可移植单元生命周期管理代码包括包含生命周期管理头文件以及生命周期管理实现源文件;所述生命周期管理头文件包括可移植单元初始化、可移植单元启动和可移植单元终止的声明;所述生命周期管理实现源文件包括可移植单元初始化、可移植单元启动和可移植单元终止的实现;
生命周期管理头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、可移植单元初始化声明、可移植单元启动声明以及可移植单元终止声明;
生命周期管理实现源文件代码模板包括文件介绍注释、可移植单元生命周期管理头文件的引用、可移植单元内部行为框架头文件的引用、可移植单元传输服务注入接口头文件的引用、APEX接口的引用、日志服务头文件的引用、传输服务连接名称的定义与赋值、可移植单元初始化的实现、可移植单元启动的实现以及可移植单元终止的实现;
3)可移植单元内部行为框架代码模板
可移植单元内部行为框架代码包括可移植单元特定行为声明头文件和可移植单元特定行为实现源文件;所述可移植单元特定行为声明包括特定行为初始化、特定行为启动和特定行为终止的声明;所述可移植单元特定行为实现包括特定行为初始化、特定行为启动和特定行为终止的实现代码框架;
可移植单元特定行为声明头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、可移植单元特定行为初始化声明、可移植单元特定行为启动声明、可移植单元特定行为终止声明以及APEX进程进入点声明;
可移植单元特定行为实现源文件代码模板包括文件介绍注释、可移植单元内部行为框架头文件的引用、可移植单元传输服务注入接口头文件的引用、日志服务头文件的引用、可移植单元特定行为初始化的实现代码框架、可移植单元特定行为启动的实现代码框架、可移植单元特定行为终止的实现代码框架以及APEX进程进入点的实现代码框架;
步骤3:设计可移植单元传输服务注入接口C语言代码模板
可移植单元传输服务注入接口包括各个端口通信消息实例化传输服务的接口;不同的可移植单元端口消息模型能够转化成对应的可移植单元传输服务注入接口的声明头文件和实现源文件;
其中声明头文件包括创建连接、销毁连接以及发送或接收消息的声明,其中当端口为输出端口,则为发送消息,当端口为输入端口,则为接收消息;而实现源文件包括创建连接、销毁连接以及发送或接收消息的实现;
可移植单元传输服务注入接口的头文件代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、当前端口通信消息头文件的引用、传输服务头文件的引用、通信连接名称声明、通信模式类型声明、通信连接ID声明、通信连接方向声明、消息大小声明、创建连接声明、销毁连接声明以及发送或接收当前端口特定消息声明;
可移植单元传输服务注入接口的源文件代码模板包括文件介绍注释、可移植单元传输服务注入接口头文件的引用、日志服务头文件的引用、创建连接实现、销毁连接实现以及发送或接收当前端口特定消息实现;
步骤4:解析FACE开放体系架构可移植单元模型文件;
根据步骤1~步骤3设计的代码模板,解析FACE开放体系架构可移植单元模型文件,获取代码模板所需信息,其中,
可移植单元端口通信消息需要消息类型、消息别名和消息属性元素信息;
可移植单元内部业务逻辑需要可移植单元类型、可移植单元名称、可移植单元进程的属性、可移植单元线程的属性和可移植单元IO访问情况信息;
可移植单元传输服务注入接口需要通信端口类型、通信端口名称和端口通信消息信息;
步骤5:根据模型信息实例化代码模板;
采用FreeMarker模板引擎,调用可移植单元代码模板,将获取的可移植单元模型信息传入模板中;根据模板设计,将自动生成的不同代码模块输出到对应的可移植单元C语言代码文件中,并对代码文件进行重命名。
2.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤1的IDL Fixed类型代码模板中,IDL Fixed属性定义结构体的属性为Fixed的数据总位数、范围和数据值;三者的值来自用户输入,其中数据总位数的类型是无符号短整型、范围的类型是短整型、数据值的类型是字符型。
3.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤1的IDL 枚举类型代码模板中的枚举元素宏定义是用枚举元素名称依次代替从0开始的整数。
4.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤1的序列类型代码模板中的序列属性定义结构体的属性为序列的最大值、序列长度和序列元素,其中最大值和序列长度的类型都是无符号长整型,值来自用户输入;序列元素来自用户建模,类型为元素的别名。
5.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤1中还设计有航空嵌入式开放体系架构模型中的平台实体和平台视图代码模板;
平台实体代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、平台实体元素头文件的引用、平台实体属性定义结构体以及平台实体起别名语句;其中平台实体属性定义结构体的属性为用户建模添加的IDL元素,属性类型为IDL元素的别名,值为添加到平台实体后的引用名称;
平台视图代码模板包括文件介绍注释、防止重复引用的#ifndef/#define/#endif、平台视图元素头文件的引用、平台视图属性定义结构体以及平台视图起别名语句;其中平台视图属性定义结构体的属性为用户建模添加的平台实体,属性类型为平台实体的别名,值为添加到平台视图后的引用名称。
6.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤2的可移植单元调度代码模板中,主函数包括APEX进程属性的赋值、设置分区模式、调用生命周期管理中的可移植单元初始化、启动和终止接口。
7.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤2生命周期管理实现源文件代码模板中的可移植单元初始化的实现包括:调用传输服务注入接口创建连接、创建连接日志记录、创建APEX进程以及调用内部行为框架的特定行为初始化接口;可移植单元启动的实现包括:启动APEX进程以及调用内部行为框架的特定行为启动接口;可移植单元终止的实现包括:调用内部行为框架的特定行为终止接口以及调用传输服务注入接口断开连接。
8.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤3可移植单元传输服务注入接口的源文件代码模板中,创建连接实现包括:调用传输服务创建连接接口以及创建连接日志记录;销毁连接实现包括:调用传输服务销毁连接接口以及销毁连接日志记录;发送消息实现包括:数据交换ID定义、发送消息封装以及调用传输服务发送消息接口;接收消息实现包括:数据交换ID定义、接收消息大小定义以及调用传输服务接收消息接口。
9.根据权利要求1所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤4中,采用DOM4j方法解析可移植单元模型,将获取的属性值保存在对应的数据结构中。
10.根据权利要求5所述一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法,其特征在于:步骤5中,可移植单元端口通信消息模型中的IDL类型、平台实体和平台视图都会输出到不同的C语言头文件中,其文件名是对应模型元素的别名;可移植单元内部业务逻辑模型会根据功能生成五个不同的C语言代码文件,其文件名是可移植单元的名称加上代码功能;可移植单元传输服务注入接口模型会根据通信端口生成对应的C语言头文件和源文件,其文件名为通信端口的名称加上通信端口类型。
CN202010593137.8A 2020-06-26 2020-06-26 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法 Active CN111782194B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010593137.8A CN111782194B (zh) 2020-06-26 2020-06-26 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010593137.8A CN111782194B (zh) 2020-06-26 2020-06-26 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法

Publications (2)

Publication Number Publication Date
CN111782194A CN111782194A (zh) 2020-10-16
CN111782194B true CN111782194B (zh) 2022-09-13

Family

ID=72761184

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010593137.8A Active CN111782194B (zh) 2020-06-26 2020-06-26 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法

Country Status (1)

Country Link
CN (1) CN111782194B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113296764B (zh) * 2021-05-27 2023-11-03 成都谐盈科技有限公司 一种基于模型驱动的idl文件生成系统、方法及终端

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0019341D0 (en) * 2000-08-08 2000-09-27 Easics Nv System-on-chip solutions
US20110066477A1 (en) * 2009-04-07 2011-03-17 Fuhu, Inc. Device and method for creating, distributing, managing and monetizing widgets using templates
KR102092721B1 (ko) * 2016-03-23 2020-04-23 포그혼 시스템스 인코포레이티드 실시간 데이터플로우 프로그래밍에서 패턴 구동형 반응의 구성
US10565433B2 (en) * 2017-03-30 2020-02-18 George Mason University Age invariant face recognition using convolutional neural networks and set distances
CN108804818B (zh) * 2018-06-09 2021-06-11 西北工业大学 一种基于face架构的软件系统建模方法
CN110717268B (zh) * 2019-09-30 2021-04-13 北京航空航天大学 一种基于face架构的可移植组件单元封装方法

Also Published As

Publication number Publication date
CN111782194A (zh) 2020-10-16

Similar Documents

Publication Publication Date Title
Frantz et al. A domain-specific language to design enterprise application integration solutions
CN1832478B (zh) 用于传统组件的动态服务生成的方法和设备
Damm et al. Understanding UML: A formal semantics of concurrency and communication in real-time UML
Maier et al. Object coloured petri nets-a formal technique for object oriented modelling
CN112748908A (zh) 基于SSM框架的Restful服务开发方法与装置
CN110008044B (zh) 一种嵌入式rtos上分布式实时通信中间件的构建方法
WO2021052338A1 (zh) 智能合约客户端程序的生成方法、系统、设备和介质
CN112035090A (zh) 基于容器化技术实现智能合约智慧化管理系统及方法
CN111782194B (zh) 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法
CN114968192A (zh) 一种项目创建方法、装置、计算机设备及存储介质
CN109460222A (zh) 应用程序的组件化方法、装置、设备及存储介质
Dardha et al. Mungo and StMungo: tools for typechecking protocols in Java
Gerard et al. UML for real-time: which native concepts to use?
Shen A CORBA facility for network simulation
Jololian et al. A framework for a meta-semantic language for smart component-adapters
Bigot et al. Enabling connectors in hierarchical component models
CN114168110B (zh) 轻量级鸿蒙操作系统的应用开发事务管理系统及方法
Zhang et al. Research on reusability of software connector based on AOP
Poizat et al. On dynamic reconfiguration of behavioural adaptation
Graw et al. Constraint-oriented formal modelling of OO-systems
CN113296853B (zh) 一种基于模型驱动的独立端口建模方法及终端
Polze Interactions in Distributed Programs based on Decoupled Communications
Inverardi et al. Software architectures and coordination models
Sheng et al. MDACD: A Model-Driven Development Method for Avionics Software Components
Lu et al. Platform-independent specification of component architectures for embedded real-time systems based on an extended UML

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant