掌桥专利:专业的专利平台
掌桥专利
首页

一种可复用的嵌入式软件架构建模方法和系统

文献发布时间:2024-04-18 19:59:31


一种可复用的嵌入式软件架构建模方法和系统

技术领域

本发明涉及嵌入式软件开发技术领域,尤其涉及一种可复用的嵌入式软件架构建模方法和系统。

背景技术

随着信息技术的持续发展,安全攸关领域的嵌入式软件日益增多。航空航天、汽车电子等安全攸关软件如果出现设计问题,可能会造成灾难性的后果。此类软件一旦出现故障,轻则会造成财产损失,重则可能导致人员伤亡。安全攸关系统的大部分功能由软件来实现,只有软件功能正确,才能确保系统不发生故障。因此,在安全攸关嵌入式软件的安全可靠性尤为关键。相比于常规软件,安全攸关嵌入式软件具有交互性强、逻辑复杂、设计易出错、质量保障成本高的特点。为了避免以文档为中心的开发方式存在的开发效率低、成本高、软件问题发现晚等问题,目前普遍采用模型驱动的方法开发嵌入式软件,通过分析软件业务场景来定义软件需求,进而开展软件设计建模,再生成代码并完成测试验证,最后交付。模型驱动开发方法的主要优势在于:软件需求和设计模型化,为确保描述准确、完整、无二义提供了语义基础;模型支持在开发早期引入综合质量保证手段,提前发现软件质量问题;基于模型能够自动生成代码,避免复杂代码编写中的人因错误;基于模型可实现组件化开发方式,能够提升软件复用和批量研制能力。

模型驱动开发过程包括开发过程和验证过程。开发过程的主要环节包括:需求建模、软件架构设计建模、软件详细设计建模、代码生成等。其中,软件架构设计的主要作用是划分和细化功能结构,以及引入设计模式和设计策略,在软件架构层面保障非功能需求。

嵌入式领域本身就有着软件模块或硬件高复用的特点,而传统的模型驱动嵌入式系统架构开发方式并不契合领域本身的特点,未提供良好的模型组件管理与复用能力。当前的建模工具往往需要对相同的功能进行多次重复的编码,加大了开发人员的工作量。此外,建模人员在定义同类模块时需重复编写组件的功能函数、手动逐个定义功能函数中的各项属性,也存在定义功能函数或端口时漏写或错写端口方向、端口类型的可能性。

传统的模型驱动嵌入式系统开发方法难以对软件整体架构进行错误分析和故障树检查,往往在实际应用时发现架构设计问题,进而调整或重新设计软件架构会带来高昂的成本。

发明内容

鉴于上述的分析,本发明实施例旨在提供一种可复用的嵌入式软件架构建模方法和系统,用以解决现有嵌入式软件架构建模容易出错建模效率低的问题。

一方面,本发明实施例提供了一种可复用的嵌入式软件架构建模方法,包括以下步骤:

构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建嵌入式软件的可视化架构模型;

根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL代码;

对所述AADL代码进行校验,若校验通过则得到最终的嵌入式软件的架构模型。

基于上述方法的进一步改进,根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL模型,包括:

S21、以嵌入式软件的可视化架构模型为当前节点,

S22、生成当前节点对应的AADL代码;若当前节点直接包含功能函数,则依次生成当前节点直接包含的功能函数的AADL代码;若当前节点存在上一层节点,则在上一层节点对应的AADL代码的子组件属性中添加当前节点对应的AADL代码的引用;

S23、若当前节点包含子模块,则依次将每个子模块作为当前模块,返回步骤S22;若可视化架构模型中的所有模块都遍历过,则执行步骤S24;

S24、依次遍历嵌入式软件的可视化架构模型中的每条连接线,根据每条连接线连接的模块或功能函数,判断连接线所属的模块,在连接线所属的模块中添加连接线代码。

基于上述方法的进一步改进,生成当前节点对应的AADL代码,包括:

若当前节点为可视化架构模型,则将当前节点映射为包组件,当前节点名作为包组件名,生成当前节点对应的包组件代码;

若当前节点为模块,则将当前节点映射为线程组组件;当前节点名作为线程组组件名,生成当前节点对应的线程组组件代码;

若当前节点包括端口,则将端口作为当前节点的特征属性,映射在当前节点的线程组组件代码的特征属性中。

基于上述方法的进一步改进,生成当前节点直接包含的功能函数的AADL代码,包括:

将功能函数映射为线程组件;功能函数名作为线程名,生成当前节点包含的每个功能函数对应的线程组件代码;

将功能函数的端口作为功能函数对应的线程组件的特征,映射在功能函数对应的线程组件代码的特征中;

在功能函数所属的模块对应的线程组组件的子组件属性中添加功能函数对应的线程组件的引用。

基于上述方法的进一步改进,根据每条连接线连接的模块或功能函数,判断连接线所属的模块,在连接线所属的模块中添加连接线代码,包括:

依次将每条连线作为当前连接线,获取当前连接线连接的源端口和目的端口;查找源端口所属的模块或函数与目的端口所属的模块或功能函数同时所在的最小的模块作为当前连接线所属的模块,在连接线所属的模块的连接属性中添加当前连接线代码。

基于上述方法的进一步改进,构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建嵌入式软件的可视化架构模型,包括:

建立可视化建模语言的元模型,根据元模型生成功能函数定义表、模块定义视图和架构定义视图;

通过功能函数定义表定义嵌入式软件的功能函数库;通过模块定义视图定义模块库;其中,功能函数包含至少一个端口;

基于功能函数库和模块库根据嵌入式软件的功能通过架构定义视图构建嵌入式软件架构包含的模块和模块间的连接,得到嵌入式软件的可视化架构模型。

基于上述方法的进一步改进,在构建嵌入式软件的可视化架构模型之后,根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL模型之前,还包括对构建的可视化架构模型进行校验。

基于上述方法的进一步改进,对构建的可视化架构模型进行校验,包括:

遍历可视化架构模型中的每个模块和每个功能函数,判断每个模块和每个功能函数的端口是否有连接线,若存在没有建立连接线的端口,则校验不通过;

对于可视化架构模型中的每条连接线,获取该连接线连接的源端口和目标端口,若端口的方向不是out方向,则校验不通过;根据目标端口的方向不是in方向,则校验不通过。

另一方面,本发明实施例提供了一种可复用的嵌入式软件架构建模系统,包括以下模块:

可视化架构模型构建模块,用于构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建嵌入式软件的可视化架构模型;

AADL代码生成模块,用于根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL代码;

模型校验模块,用于对所述AADL代码进行校验,若校验通过则得到最终的嵌入式软件的架构模型。

基于上述系统的进一步改进,根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL模型,包括:

S21、以嵌入式软件的可视化架构模型为当前节点,

S22、生成当前节点对应的AADL代码;若当前节点直接包含功能函数,则依次生成当前节点直接包含的功能函数的AADL代码;若当前节点存在上一层节点,则在上一层节点对应的AADL代码的子组件属性中添加当前节点对应的AADL代码的引用;

S23、若当前节点包含子模块,则依次将每个子模块作为当前模块,返回步骤S22;若可视化架构模型中的所有模块都遍历过,则执行步骤S24;

S24、依次遍历嵌入式软件的可视化架构模型中的每条连接线,根据每条连接线连接的模块或功能函数,判断连接线所属的模块,在连接线所属的模块中添加连接线代码。

与现有技术相比,本实施例提供的可复用的嵌入式软件架构建模方法通过首先构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建对应的可视化架构模型,从而契合嵌入式软件高复用性的特点,实现功能函数和模型库的复用,大大降低了重复开发的工作量,提高了建模效率,基于构建好的功能函数和模块库构建模型从而从源头上规避了诸如选错功能函数端口方向等错误。根据构建好的可视化模型生成对应的AADL模型,基于AADL模型进行校验,从而便于及时发现架构模型中的错误,进而避免架构建模人员在后期对软件架构模型进行返工,提高了嵌入式系统质量的同时为后期维护和扩展降低了成本。

本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。

附图说明

附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件;

图1为本发明实施例可复用的嵌入式软件架构建模方法的流程图;

图2为本发明实施例的元模型的示意图;

图3为本发明实施例的客舱终端模块示意图;

图4为本发明实施例的可视化架构模的示意图;

图5为本发明实施例可复用的嵌入式软件架构建模系统的框图。

具体实施方式

下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。

本发明的一个具体实施例,公开了一种可复用的嵌入式软件架构建模方法,如图1所示,包括以下步骤:

S1、构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建嵌入式软件的可视化架构模型;

S2、根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL代码;

S3、对所述AADL代码进行校验,若校验通过则得到最终的嵌入式软件的架构模型。

与现有技术相比,本实施例提供的可复用的嵌入式软件架构建模方法通过首先构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建对应的可视化架构模型,从而契合嵌入式软件高复用性的特点,实现功能函数和模型库的复用,大大降低了重复开发的工作量,提高了建模效率,基于构建好的功能函数和模块库构建模型从而从源头上规避了诸如选错功能函数端口方向等错误。根据构建好的可视化模型生成对应的AADL模型,基于AADL模型进行校验,从而便于及时发现架构模型中的错误,进而避免架构建模人员在后期对软件架构模型进行返工,提高了嵌入式系统质量的同时为后期维护和扩展降低了成本。

具体的,步骤S1中构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建嵌入式软件的可视化架构模型,包括:

S11、建立可视化建模语言的元模型,根据元模型生成功能函数定义表、模块定义视图和架构定义视图;

S12、通过功能函数定义表定义嵌入式软件的功能函数库;通过模块定义视图定义模块库;

S13、基于功能函数库和模块库根据嵌入式软件的功能通过架构定义视图构建嵌入式软件架构包含的模块和模块间的连接,得到嵌入式软件的可视化架构模型。

实施时,首先基于嵌入式软件架构的特点构建可视化建模语言的概念模型,概念模型最顶层为包,每个包包含至少一个模块组件,模块分为参与者模块和功能模块,参与者模块为软件架构中外部的参与者,功能模块为软件架构内部实现的功能。每个模块中包含至少一子模块或一个功能函数。每个功能函数至少有一个端口,每个模块可以有零个或多个端口。根据概念模型可得到对应的元模型,元模型如图2所示。实施时,可采用EclipseSirius框架构建元模型。Sirius框架可根据构建的元模型自动生成框架代码。元模型中共有18个类、19条组合关系、8条泛化关系和6条应用关系。嵌入式软件架构建模设计语言中的功能函数、功能函数端口、模块、模块端口和架构图分别对应Function、FunctionPort、Component、Component Port和System。其中功能函数是在功能函数表中,功能函数表对应的类为FunctionTable。

由于功能函数的定义为结构化信息,为了便于表示,采用表格形式作为功能函数的定义视图,对应FuctionTable类。实施时,可采用Sirius框架的表视图(Edition TableDescription)来配置并生成数据类型定义表

模块由功能函数组成,一个模块中也可以包含多级子模块。实施时,为了便于查看模块间的连接关系,采用图形形式定义模块和架构。可采用Sirius框架的默认图形元素作为模块定义视图和架构定义视图的默认图层,将Sirius中的容器元素(Container)配置为Interaction,代表架构图中的模块,模块以矩形块图示,模块中的端口在矩形块的边缘以小矩形块图示。将基于元素的边(Element Based Edge)配置为Interface Exchange,代表架构图中的连接关系。

生成功能函数定义表、模块定义视图和架构定义视图后。建模人员首先对嵌入式软件进行需求分析,对嵌入式软件的功能自上而下进行分析拆解至最细粒度的功能,最细粒度的功能由功能函数实现,根据功能分析结果通过功能函数定义表定义嵌入式软件的功能函数库,其中定义的信息包括功能函数名称、端口名称、端口类型和端口方向。

端口类型包括DATA、EVENT和NULL三种。DATA类型表明通过该端口传输数据;EVENT类型表明通过该端口传输事件;NULL类型表明该端口未指定传输的数据类型。端口方向包括in和out。in表示从该端口从该端口接收数据或事件,out表示从该端口发送数据或事件。

定义好功能函数库后,通过模块定义视图定义模块库;模块库中的每个模块由一个或多个功能函数组成,模块中也可以包含嵌套子模块,因此通过模块定义视图定义嵌入式软件的模块。实施时,模块中的功能函数从功能函数库中导入,从而实现组件复用,提高了建模效率并且避免错误。模块中也可添加端口。

得到功能函数库和模型库后,基于功能函数库和模块库根据嵌入式软件的功能通过架构定义视图构建嵌入式软件架构包含的模块和模块间的连接,得到嵌入式软件的可视化架构模型。

实施时,在架构定义视图中通过导入模块库中的模块,在模块或功能函数的端口间添加连线,得到模块间的连接关系,进而得到嵌入式软件的可视化架构模型。

以客舱视频推流嵌入式软件为例进行说明。首先分析其中的功能,客舱视频推流架构(airbus)包含两个参与者模块和一个主要功能模块,分别为机组人员参与者模块(staff)、乘客参与者模块(passanger)和客舱终端功能模块(terminal)。机组人员负责进行检查和视频推流、客舱终端需要处理视频数据、而乘客需要选择视频和观看视频。因此,根据分析结果,在功能函数定义表中定义选择服务函数(select_services)、观看客舱直播函数(view_live)、飞行前测试函数(pro_test)、测试数据分析函数(test_data_process)、客舱广播函数(boardcast)、捕获视频选择函数(get_video_select)、显示视频数据函数(show_video_data)、处理视频数据函数(process_video_data)。

根据客舱模块的功能,客舱模块又包含了两个子模块,分别为客舱终端管理模块和客舱终端核心模块。客舱终端管理模块主要负责捕获视频选择,即接受机组人员推送的视频和乘客选择视频的信号。客舱终端核心模块主要负责处理视频数据和显示视频数据。因此模块定义视图中构建客舱模块(terminal),其中包括两个子模块:客舱终端管理模块(terminal_manage)和客舱终端核心模块(terminal_core),客舱终端管理模块(terminal_manage)中添加捕获视频选择函数(get_video_select),客舱终端核心模块(terminal_core)中添加显示视频数据函数(show_video_data)、处理视频数据函数(process_video_data)。其中,捕获视频选择函数(get_video_select)捕获视频后发送至处理视频数据函数、处理视频数据函数对视频数据处理后发送至显示视频数据函数(show_video_data),因此,在捕获视频选择函数(get_video_select)的数据输出端口和处理视频数据函数的数据输入端口间添加连接线,在处理视频数据函数和显示视频数据函数间添加连接线。构建的客舱终端模块如图3所示。

按照同样的过程构建机组人员参与者模块和乘客参与者模块。构建好各模块后,在架构定义视图中导入机组人员参与者模块、乘客参与者模块和客舱终端功能模块,在模块的端口或模块包含的函数的端口间添加连接线,例如机组人员参与者模块的客舱广播函数会发送数据至乘客参与者模块观看客舱直播函数,因此,在机组人员参与者模块的客舱广播函数的数据输出端口和乘客参与者模块观看客舱直播函数的数据输入端口间添加连接线。构建的可视化架构模块如图4所示。

得到可视化架构模型后,根据嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL模型之前,可先对构建的可视化架构模型进行校验。具体包括:

遍历可视化架构模型中的每个模块和每个功能函数,判断每个模块和每个功能函数的端口是否有连接线,若存在没有建立连接线的端口,则校验不通过;

对于可视化架构模型中的每条连接线,获取该连接线连接的源端口和目标端口,若端口的方向不是out方向,则校验不通过;根据目标端口的方向不是in方向,则校验不通过。

对校验中出错的部分进行提示,便于建模人员进行错误定位和修改。

实施时,也可检查是否有命名冲突问题、是否有空模块,即模块中不存在任何功能函数等问题,对存在问题的模块进行提示,便于建模人员及时修改。

为了对构建的架构模型进行校验,判断模型是否合理,对校验通过的可视化架构模型生成对应的AADL模型,具体包括:

S21、以嵌入式软件的可视化架构模型为当前节点,

S22、生成当前节点对应的AADL代码;若当前节点直接包含功能函数,则依次生成当前节点直接包含的功能函数的AADL代码;若当前节点存在上一层节点,则在上一层节点对应的AADL代码的子组件属性中添加当前节点对应的AADL代码的引用;

S23、若当前节点包含子模块,则依次将每个子模块作为当前模块,返回步骤S22;若可视化架构模型中的所有模块都遍历过,则执行步骤S24;

S24、依次遍历嵌入式软件的可视化架构模型中的每条连接线,根据每条连接线连接的模块或功能函数,判断连接线所属的模块,在连接线所属的模块中添加连接线代码。

具体的,步骤S22中生成当前节点对应的AADL代码,包括:

若当前节点为可视化架构模型,则将当前节点映射为包组件,当前节点名作为包组件名,生成当前节点对应的包组件代码;

若当前节点为模块,则将当前节点映射为线程组组件;当前节点名作为线程组组件名,生成当前节点对应的线程组组件代码;

若当前节点包括端口,则将端口作为当前节点的特征属性,映射在当前节点的线程组组件代码的特征属性中。

具体的,步骤S22中生成当前节点直接包含的功能函数的AADL代码,包括:

将功能函数映射为线程组件;功能函数名作为线程名,生成当前节点包含的每个功能函数对应的线程组件代码;

将功能函数的端口作为功能函数对应的线程组件的特征,映射在功能函数对应的线程组件代码的特征中;

在功能函数所属的模块对应的线程组组件的子组件属性中添加功能函数对应的线程组件的引用。

具体的,步骤S24中根据每条连接线连接的模块或功能函数,判断连接线所属的模块,在连接线所属的模块中添加连接线代码,包括:

依次将每条连线作为当前连接线,获取当前连接线连接的源端口和目的端口;查找源端口所属的模块或函数与目的端口所属的模块或功能函数同时所在的最小的模块作为当前连接线所属的模块,在连接线所属的模块的连接属性中添加当前连接线代码。

例如图4所示的可视化架构模型,首先以客舱视频推流架构模型作为当前节点,生成其对应的AADL代码,由于客舱视频推流架构模组中没有直接包含功能函数,也不存在上一层节点,仅包含子模块,因此,依次将其子模块机组人员参与者模块、乘客参与者模块和客舱终端功能模块作为当前模块。

对于机组人员参与者模块,先生成机组人员参与者模块对应的AADL代码,由于其直接包含功能函数,因此依次生成功能函数飞行前测试函数(pro_test)、测试数据分析函数(test_data_process)、客舱广播函数(boardcast)对应的代码,机组人员参与者模块存在上层节点客舱视频推流架构模型,因此,在客舱视频推流架构模型对应的AADL代码的子组件属性,即subcomponents属性中,添加机组人员参与者对应的AADL代码的引用,即添加机组人员参与者对应的线程组组件的实现的引用。

对于客舱终端功能模块,先生成客舱终端功能模块对应的AADL代码,客舱终端功能模块存在上层节点客舱视频推流架构模型,因此,在客舱视频推流架构模型对应的AADL代码的subcomponents子组件属性中添加客舱视频推流架构模型对应的对应的AADL代码的引用。

客舱终端功能包括两个子模块:客舱终端管理模块和客舱终端核心模块,则依次以客舱终端管理模块和客舱终端核心模块为当前节点,生成这两个模块对应的AADL代码。

依次类推,当可视化架构模型中的每个模块都遍历生成对应的AADL代码后,即可得到客舱视频推流架构模型对应的AADL模型。

例如,当前节点为客舱视频推流架构模型,则将其映射为AADL中的包组件,客舱视频推流架构模型的名称即为包组件的名称,在包中添加主进程,为AADL模型的主进程。

生成的包组件代码如下:

若当前节点为模块,例如机组人参与者模块(staff),将其映射为线程组组件,模块名为线程组组件名,机组人参与者模块(staff)包括端口,因此端口作为机组人参与者模块(staff)对应线程组组件的特征属性,映射在进程组组件代码的特征属性中,生成对应的AADL代码如下:

需要说明的是,对于模块中的端口,将其都映射为event data port。AADL中的端口类型包括event、data和event data三种类型,evnet表示允许事件通过、data表示允许数据通过、event data表示事件和数据均可以通过。

机组人员参与者模块(staff)包括三个功能函数飞行前测试函数(pro_test)、测试数据分析函数(test_data_process)、客舱广播函数(boardcast)。以飞行前测试函数(pro_test)为例,将其映射为线程组件,将其包含的功能函数作为对应的线程组件的特征,映射在功能函数对应的线程组件代码的特征中,生成的AADL代码如下:

需要说明的是,对于功能函数中的端口,根据其类型,将DATA类映射data port,将EVENT类映射为event port,将NULL类映射为event data port。

在机组人员参与者模块对应的线程组组件的子组件属性中添加飞行前测试函数(pro_test)对应的线程组件的引用,

机组人员参与者模块(staff)对应的代码如下:

在主进程的子组件属性中添加机组人员参与者模块(staff)对应的AADL实现的引用,即root的实现代码更新为:

依次类推,得到每个模块对应的AADL代码,都能够模型中的所有模块都遍历一遍后,则得到各个模块对应的AADL代码,之后生成连接线对应的代码。

例如飞行前测试与测试数据分析两个功能函数间的连接线。获取其源端口和目标端口,源端口属于飞行前测试功能函数,目标端口属于测试数据分析功能函数,这两个功能函数均属于机组人员参与者模块staff,该连接线所属的模块为机组人员参与者模块staff,因此,在对应的线程组组件的实现的连接属性中添加连接线对应的代码:

pro_test_2_test_data_process:port pro_test.pro_test_port->

test_data_process.test_data_port。

因此,机组人员参与者模块staff对应的线程组的实现部分代码更新为:

再例如客舱广播功能函数和选择服务功能函数间的连接线,源端口属于客舱广播功能函数,其属于机组人员参与者模块,目标端口属于选择服务功能函数,其属于乘客参与者模块,这两个模块同时所在的最小的模块客舱视频推流架构模型(可看做是特殊的模块),因此,在主进程组件的实现的连接属性中添加连接线对应的代码:

boardcast_2_select_services:port boardcast.boardcast_port1->

select_services.select_services_port1。

依次类推,生成每条连接线对应的代码,进而得到视频推流架构模型对应的AADL代码。

得到AADL代码对其进行校验,得到最终的嵌入式软件的架构模型。

实施时,建模人员可根据各模块的功能及经验对嵌入式软件的架构模型中的每个模块设定重要度权重,模块对应的线程组也为同样的重要度权重,采用AADL的OSATE工具对AADL代码进行故障树检查和错误分析,可得到每个AADL组件失效对整个架构的影响度。分别按照重要度权重和影响度对AADL组件进行排序,若某个组件在两个排序中的顺序差距较大,则说明该组件对应的模型构建有误,提示建模人员进行修改,对构建的可视化架构模型修改后,建模人员可按照步骤S2-S3的过程重新生成对应的AADL代码,对其进行校验,若校验通过,则得到最终的嵌入式软件的架构模型。从而便于建模人员高效的构建可靠的架构模型,从而避免在实际应用时才发现架构错误而导致修改成本大效率低的问题,进而为后续开发可靠的嵌入式软件提供基础。

本发明的一个具体实施例,公开了一种可复用的嵌入式软件架构建模系统,如图5所示,包括以下模块:

可视化架构模型构建模块,用于构建嵌入式软件的功能函数库和模块库,基于构建的功能函数库和模块库构建嵌入式软件的可视化架构模型;

AADL代码生成模块,用于根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL代码;

模型校验模块,用于对所述AADL代码进行校验,若校验通过则得到最终的嵌入式软件的架构模型。

优选的,根据所述嵌入式软件的可视化架构模型生成所述嵌入式软件对应的AADL模型,包括:

S21、以嵌入式软件的可视化架构模型为当前节点,

S22、生成当前节点对应的AADL代码;若当前节点直接包含功能函数,则依次生成当前节点直接包含的功能函数的AADL代码;若当前节点存在上一层节点,则在上一层节点对应的AADL代码的子组件属性中添加当前节点对应的AADL代码的引用;

S23、若当前节点包含子模块,则依次将每个子模块作为当前模块,返回步骤S22;若可视化架构模型中的所有模块都遍历过,则执行步骤S24;

S24、依次遍历嵌入式软件的可视化架构模型中的每条连接线,根据每条连接线连接的模块或功能函数,判断连接线所属的模块,在连接线所属的模块中添加连接线代码。

上述方法实施例和系统实施例,基于相同的原理,其相关之处可相互借鉴,且能达到相同的技术效果。具体实施过程参见前述实施例,此处不再赘述。

本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

相关技术
  • 一种非定点对象查询方法、装置、终端设备及存储介质
  • 一种非嵌入式的全面预算查询方法和系统
  • 一种车用尿素加热装置及其控制方法
技术分类

06120116517113