一种面向AUTOSAR软件架构的运行时环境生成方法与流程

文档序号:14119979阅读:1902来源:国知局
本发明涉及autosar
技术领域
:,尤其涉及一种面向autosar软件架构的运行时环境生成方法。
背景技术
::autosar(automotiveopensystemarchitecture,汽车开放系统架构)是汽车ecu(electroniccontrolunit,电子控制单元)系统采用的一种软件架构,rte(run-timeenvironment,运行时环境)是autosar架构的核心。autosar系统中组件间所有的通信通过组件端口(port)进行,而组件端口由autosar接口(autosarinterfaces)定义,rte能够实现通信接口,提供组件间的通信服务,因此组件间的所有通信在rte的控制之下。simulink是一种基于模型开发的软件开发工具,根据系统需要,按模型中的模块进行开发,模型建好后能够自动生成c代码,通过设置simulink,能够自动生成符合autosar软件架构的代码,但其中的rte模块代码不能自动生成,需要借助另外的商业工具才能实现。目前生成rte模块代码的通常做法是,使用simulink把模型建好后,按其中的模块导出一份arxml文件,然后把arxml文件再导入另外一个商业工具,在该商业工具(如davincideveloper)上进行编辑与设置,最后生成rte模块代码。商业工具不仅价格昂贵,还需要专业人员操作与配置,不利于推广应用。同时,因为需要在不同工具中切换使用,现有技术中通过另外的商业工具生成rte模块代码的方式开发效率低下,且开发成本高昂。技术实现要素:本发明提供一种面向autosar软件架构的运行时环境生成方法,解决了现有技术中自动生成rte模块代码的方式存在开发效率低、成本高的问题。为解决以上技术问题,本发明提供一种面向autosar软件架构的运行时环境生成方法,包括以下步骤:s1.为每一个相互关联的程序模块建立一个数据表格字典,根据所述程序模块在所述数据表格字典中分配输入输出变量,以及对应于每个所述程序模块的标定量;s2.建立一个程序文件、一个总头文件和与所述程序模块一一对应的子头文件;s3.根据所有的所述数据表格字典在所述程序文件、所述总头文件和所述子头文件中做数据定义、数据声明和数据初始化;s4.编译经过所述步骤s3的所述程序文件,所述程序文件读取所述数据表格字典,生成rte模块代码。具体地,所述数据表格字典包括信号量表格、标量参数表格和表格参数表格;所述信号量表格包含的字段有一一对应的所述程序模块的名称、信号的名称、所述信号的数据类型、所述信号的初始值、所述信号的维数;所述标量参数表格包含的字段有一一对应的所述程序模块的名称、标定参数的名称、所述标定参数的数据类型、所述标定参数的初始值、所述标定参数的维数;所述表格参数表格包含的字段有一一对应的所述程序模块的名称、标定参数表格的名称、所述标定参数表格的参数的名称、所述标定参数表格的参数的数据类型、所述标定参数表格的参数的初始值、所述标定参数表格的参数的维数。进一步地,所述步骤s3包括:s3-1.在所述总头文件中,定义与所述数据表格字典对应的所有的数据类型;s3-2.在所述总头文件中,将所述表格参数表格中,处于相同所述标定参数表格的名称下的所述标定参数表格的参数的名称定义到第一结构体中;s3-3.在所述程序文件中,定义与所述数据表格字典对应的所有的全局变量;s3-4.在所述程序文件中,定义与所述数据表格字典对应的所有的数组常量,用于所述全局变量中多维数组的初始化;s3-5.在所述总头文件中,定义与所述数据表格字典对应的所有的标定结构体;s3-6.在与所述程序模块一一对应的所述子头文件中,宏定义与所述数据表格字典对应的所述标定量;s3-7.在所述程序文件中,定义用于标定所述标定结构体类型的常数,并遍历所述标量参数表格中的所述标定参数的初始值、所述标定参数的维数,及所述表格参数表格中的所述标定参数表格的参数的初始值、所述标定参数表格的参数的维数,把所述常数的值依次填入;s3-8.在与所述程序模块一一对应的所述子头文件中,宏定义接口输出与接口输入,或在所述程序文件中定义拷贝接口函数,用于组件与组件之间、组件与底层之间的通信;s3-9.在所述程序文件中,定义变量初始化函数,用于初始化所述输入输出变量和全部标定数据。更进一步地,所述步骤s3-1具体为:遍历所述信号量表格中的所述信号的数据类型、所述信号的维数,及所述标量参数表格中的所述标定参数的数据类型、所述标定参数的维数,及所述表格参数表格中所述标定参数表格的参数的数据类型、所述标定参数表格的参数的维数,将维数不为1的所述信号的数据类型、所述标定参数的数据类型、所述标定参数表格的参数的数据类型进行重新定义。进一步地,所述步骤s3-3具体为:遍历所述信号量表格中所有的所述信号的名称、所述信号的初始值、所述信号的维数,将其定义为全局变量。进一步地,所述步骤s3-4具体为:遍历所述信号量表格中除所述程序模块的名称以外所有的字段,将所述信号的维数不为1的所述信号的数据类型根据所述信号的初始值定义为第一常数数组;遍历所述标量参数表格中除所述程序模块的名称以外所有的字段,将所述标定参数的维数不为1的所述标定参数的数据类型根据所述标定参数的初始值定义为第二常数数组。进一步地,所述步骤s3-5具体为:遍历所述标量参数表格中的标定参数的名称、所述标定参数的数据类型和所述表格参数表格中的所述标定参数表格的名称,把其中所有的所述标定量定义到标定结构体中,同时定义一个结构体标定变量。进一步地,所述步骤s3-6具体为:遍历所述标量参数表格中的所述程序模块的名称和所述标定参数的名称,进行所述标定量的宏定义;遍历表格参数表格中的所述程序模块的名称和所述标定参数表格的名称,进行所述标定量的宏定义。进一步地,所述步骤s3-8具体为:遍历所述信号量表格中的所述信号的名称、所述信号的数据类型、所述信号的维数,当所述信号的维数为1时,在与所述程序模块一一对应的所述子头文件中,宏定义所述接口输出与接口输入;当所述信号的维数不为1时,在所述程序文件中,定义所述拷贝接口函数,执行所述步骤s5而在生成所述拷贝接口函数的同时,在与所述程序模块一一对应的所述子头文件中生成外部函数申明。优选地,所述步骤s1采用表格工具excel设计实现;所述步骤s2~s4采用编程工具vc++、vb或matlab设计实现。本发明提供的一种面向autosar软件架构的运行时环境生成方法,采用区别于现有技术的一种全新的设计理念,通过表格工具excel建立与程序模块一一对应的数据表格字典,再通过编程工具vc++、vb或matlab来设计相关的程序文件和头文件并读取所述数据表格字典,一键生成rte模块代码,不需要专业人员操作与配置,保证了所述rte模块代码与所述程序模块的一致性,开发效率高;采用常见的vc++、vb或matlab等编程设计工具,使得开发成本大幅度降低。附图说明图1是本发明实施例提供的一种面向autosar软件架构的运行时环境生成方法的步骤流程图;图2是本发明提供的图1实施例中所述数据表格字典中的信号量表格signals的字段表格表示图;图3是本发明提供的图1实施例中所述数据表格字典中的标量参数表格scalarparameters的字段表格表示图;图4是本发明提供的图1实施例中所述数据表格字典中的表格参数表格tableparameters的字段表格表示图;图5是本发明提供的图1实施例中所述步骤s3的工作流程图;图6是本发明实施例提供的举例说明中的程序模块a中的变量表格表示图;图7是本发明实施例提供的举例说明中的程序模块b中的变量表格表示图。具体实施方式下面结合附图具体阐明本发明的实施方式,实施例的给出仅仅是为了说明目的,并不能理解为对本发明的限定,包括附图仅供参考和说明使用,不构成对本发明专利保护范围的限制,因为在不脱离本发明精神和范围基础上,可以对本发明进行许多改变。参见图1,是本发明实施例提供的一种面向autosar软件架构的运行时环境生成方法的步骤流程图。在本实施例中,发明实施例提供的一种面向autosar软件架构的运行时环境生成方法,包括以下步骤:s1.为每一个相互关联的程序模块swcx建立统一的数据表格字典excel,根据所述程序模块swcx在所述数据表格字典excel中分配输入输出变量,以及对应于每个所述程序模块swcx的标定量;s2.建立一个程序文件rte.c、一个总头文件rte_type.h和与所述程序模块swcx一一对应的子头文件rte_swcx.h;s3.根据所有的所述数据表格字典excel在所述程序文件rte.c、所述总头文件rte_type.h和所述子头文件rte_swcx.h中做数据定义、数据声明和数据初始化;s4.编译经过所述步骤s3的所述程序文件rte.c,所述程序文件rte.c读取所述数据表格字典excel,生成rte模块代码。在所述步骤s2中,swcx是模块名,由signals表格中swc字段提取,有多少个不同的swc,对应有多少个rte_swcx.h。在本实施例中,所述数据表格字典excel包括信号量表格signals、标量参数表格scalarparameters和表格参数表格tableparameters。如图2~图4,分别是本发明提供的图1实施例中所述数据表格字典excel中的信号量表格signals、标量参数表格scalarparameters、表格参数表格tableparameters的字段表示图。如图2,所述信号量表格signals包含的字段有一一对应的所述程序模块swcx的名称swc、信号的名称signalname、所述信号的数据类型datatype、所述信号的初始值initvalue、所述信号的维数dimension,用于存放模型中所述程序模块swcx的输入输出信号量;如图3,所述标量参数表格scalarparameters包含的字段有一一对应的所述程序模块swcx的名称swc、标定参数的名称parametername、所述标定参数的数据类型datatype、所述标定参数的初始值initvalue、所述标定参数的维数dimension,用于存放数据量少的标定参数;如图4,所述表格参数表格tableparameters包含的字段有一一对应的所述程序模块swcx的名称swc、标定参数表格的名称tablename、所述标定参数表格的参数的名称parametername、所述标定参数表格的参数的数据类型datatype、所述标定参数表格的参数的初始值initvalue、所述标定参数表格的参数的维数dimension,用于存放数据量多的标定参数。在本实施例中,如图5,是本发明提供的图1实施例中所述步骤s3的工作流程图。所述步骤s3包括:s3-1.在所述总头文件rte_type.h中,定义与所述数据表格字典excel对应的所有的数据类型;s3-2.在所述总头文件rte_type.h中,将所述表格参数表格tableparameters中,处于相同所述标定参数表格的名称tablename下的所述标定参数表格的参数的名称parametername定义到第一结构体中;s3-3.在所述程序文件rte.c中,定义与所述数据表格字典excel对应的所有的全局变量;s3-4.在所述程序文件rte.c中,定义与所述数据表格字典excel对应的所有的数组常量,用于所述全局变量中多维数组的初始化;s3-5.在所述总头文件rte_type.h中,定义与所述数据表格字典excel对应的所有的标定结构体;s3-6.在与所述程序模块swcx一一对应的所述子头文件rte_swcx.h中,宏定义与所述数据表格字典excel对应的所述标定量;s3-7.在所述程序文件rte.c中,定义用于标定所述标定结构体类型的常数,并遍历所述标量参数表格scalarparameters中的所述标定参数的初始值initvalue、所述标定参数的维数dimension,及所述表格参数表格tableparameters中的所述标定参数表格的参数的初始值initvalue、所述标定参数表格的参数的维数dimension,把所述常数的值依次填入;s3-8.在与所述程序模块swcx一一对应的所述子头文件rte_swcx.h中,宏定义接口输出与接口输入,或在所述程序文件rte.c中,定义拷贝接口函数,用于组件与组件之间、组件与底层之间的通信;s3-9.在所述程序文件rte.c中,定义变量初始化函数,用于初始化所述输入输出变量和全部标定数据。在所述步骤s3-1~s3-中,所述步骤s3-1具体为:遍历所述信号量表格signals中的所述信号的数据类型datatype、所述信号的维数dimension,及所述标量参数表格scalarparameters中的所述标定参数的数据类型datatype、所述标定参数的维数dimension,及所述表格参数表格tableparameters中所述标定参数表格的参数的数据类型datatype、所述标定参数表格的参数的维数dimension,将维数不为1的所述信号的数据类型datatype、所述标定参数的数据类型datatype、所述标定参数表格的参数的数据类型datatype进行重新定义。定义规则:typedefdatatypert_array_+datatype+_dimension[dimension];在所述步骤s3-1~s3-9中,所述步骤s3-3具体为:遍历所述信号量表格signals中所有的所述信号的名称signalname、所述信号的初始值initvalue、所述信号的维数dimension,将其定义为全局变量。为符合autosar架构,变量写成如下形式:var(datatype,rte_var_noinit)rte_+signalname+_val;其中,signalname可以从signals表格中直接提取。当dimension为1时,datatype直接从signals表格中直接提取;当dimension不为1时,datatype按所述步骤s3-1中所述的数据类型定义。在所有rte_swcx.h定义该变量的外部定义:externvar(datatype,rte_var_noinit)rte_+signalname+_val;在所述步骤s3-1~s3-9中,所述步骤s3-4具体为:遍历所述信号量表格signals中除所述程序模块swcx的名称swc以外所有的字段,将所述信号的维数dimension不为1的所述信号的数据类型datatype根据所述信号的初始值initvalue定义为第一常数数组;遍历所述标量参数表格scalarparameters中除所述程序模块swcx的名称swc以外所有的字段,将所述标定参数的维数dimension不为1的所述标定参数的数据类型datatype根据所述标定参数的初始值initvalue定义为第二常数数组。在所述步骤s3-1~s3-9中,所述步骤s3-5具体为:遍历所述标量参数表格scalarparameters中的标定参数的名称parametername、所述标定参数的数据类型datatype和所述表格参数表格tableparameters中的所述标定参数表格的名称tablename,把其中所有的所述标定量定义到标定结构体中,同时定义一个结构体标定变量。定义规则为:rte_calprm_mycalib_default_rte_calprm_group_typerte_calprm_mycalib;在所述步骤s3-1~s3-9中,所述步骤s3-6具体为:遍历所述标量参数表格scalarparameters中的所述程序模块swcx的名称swc和所述标定参数的名称parametername,进行所述标定量的宏定义:#definerte_prm_+parametername+_val()(rte_calprm_mycalib.parametername+_val);遍历表格参数表格tableparameters中的所述程序模块swcx的名称swc和所述标定参数表格的名称tablename,进行所述标定量的宏定义:#definerte_prm_+tablename+_val()(&rte_calprm_mycalib.tablename+_val);具体定义到哪一个子头文件rte_swcx.h,由字段swc决定。在所述步骤s3-1~s3-9中,所述步骤s3-8具体为:遍历所述信号量表格signals中的所述信号的名称signalname、所述信号的数据类型datatype、所述信号的维数dimension,当所述信号的维数dimension为1时,在与所述程序模块swcx一一对应的所述子头文件rte_swcx.h中,宏定义所述接口输出与接口输入。其中,所述接口输出的定义规则:#definerte_write_+signalname+_val(data)(rte_+signalname+_val=(data),((std_returntype)rte_e_ok));其中signalname由signals表格中的signalname字段直接提取。所述接口输入的定义规则:#definerte_read_+signalname+_val(data)(*(data)=rte_+signalname+_val,((std_returntype)rte_e_ok));其中signalname由signals表格中的signalname字段直接提取。当所述信号的维数dimension不为1时,在所述程序文件rte.c中,定义所述拷贝接口函数,用于组件与组件之间、组件与底层之间的通信。在所述拷贝接口函数中,所述接口输出的定义形式:func(std_returntype,rte_code)rte_write_+signalname+_val(p2const(datatype,automatic,rte_+swc+appl_data)data){std_returntyperet=rte_e_ok;rte_memcpy(rte_+signalname+_val,data,sizeof(datatype));returnret;}在所述拷贝接口函数中,所述接口输出的定义形式:func(std_returntype,rte_code)rte_read_+signalname+_val(p2var(datatype,automatic,rte_+swc+appl_data)data){std_returntyperet=rte_e_ok;rte_memcpy(data,rte_+swc+_val,sizeof(datatype));returnret;}其中,signalname由signals表格中的signalname字段直接提取,swc由signals表格中的swc字段直接提取,datatype按照所述步骤s3-1的方法生成。执行所述步骤s5而在生成所述拷贝接口函数的同时,在与所述程序模块swcx一一对应的所述子头文件rte_swcx.h中生成外部函数申明。在所述步骤s3-1~s3-9中,在所述步骤s3-9中,所述输入输出变量的初始化代码过程如下:遍历signals表格中所有signalname、datatype、dimension、initvalue字段;当dimension为1时,代码如下:rte_+signalname+_val=initvalue;signalname和initvalue由由signals表格中的signalname和initvalue字段直接提取。当dimension不为1时,代码如下:rte_memcpy(rte_+signalname+_val,常数数组,sizeof(datatype));其中常数数组按所述步骤s3-3方法生成,datatype按照所述步骤s3-1的方法生成。在所述步骤s3-9中,所述标定数据的初始化过程如下:采用所述拷贝接口函数,把所述步骤s3-5的所述标定结构体赋值给所述步骤s3-5生成的所述结构体标定变量。在本实施例中,所述步骤s1采用表格工具如excel设计实现;所述步骤s2~s4采用编程工具vc++、vb或matlab等设计实现。本发明旨在解决不同的程序模块swcx之间的变量交互问题、标定量的问题、变量初始化的问题及预定义的问题。举例说明:1.变量交互的问题。参见,图6、图7分别是本发明实施例提供的举例说明中的程序模块a、程序模块b中的变量表格表示图。甲开发程序模块a,乙开发程序模块b,使用非商业工具excel及matlab进行开发。甲乙双方分配输入输出变量,程序模块a的部分输出给程序模块b,程序模块b的部分输出给程序模块a,而这两个模块之间的变量如何有序的交互,其解决思想在于:①甲乙双方分别为程序模块a及程序模块b定义其数据表格字典变量,填写各自数据,等待matlab使用(所述步骤s2-s4);②把程序模块a及程序模块b所用到的输入输出变量(信号)统一在一个c文件(如所述程序文件rte.c)定义为全局变量,同时在各自的头文件中(如rte_a.h和rte_b.h)外部声明。比如,在rte.c文件中统一定义变量:intrte_aa_val,rte_bb_val[2];charrte_cc_val[3],rte_dd_val[3];③对图6、图7中所有变量进行宏定义赋值和取值。比如,取值:#definerte_read_aa_val(data)(*(data)=rte_aa_val,rte_e_ok_type)赋值:#definerte_write__aa_val(data)(rte_aa_val=(data)rte_e_ok_type)基于,matlab模型自动生成的代码,对输入变量的获取代码:“rte_read_aa_val();”,对输出变量的代码为:“rte_write__aa_val();”。对于维数大于1的情况,需要定义一个拷贝函数,实现数组的传输,比如:rte_write_bb_val(p2const(int,automatic,rte_blcappl_data)data);2.标定量的问题。把所有标定量按表格先后顺序定义到flash(flash存储器又称闪存,不仅具备电子可擦除可编程的性能,还不会断电丢失数据同时可以快速读取数据)的一个结构体中,同时在ram(ram通常是作为操作系统或其他正在运行程序的临时存储介质,当电源关闭时ram不能保留数据,有时也将ram称作“可变存储器”)中定义一个相同的结构体,再定义一个拷贝函数,初始化的时候把flash结构体的内容拷贝到ram的结构体中。3.变量初始化的问题。对于维数(如dimension)为1的输入输出变量,直接对其赋值;对于维数(如dimension)大于1的输入输出变量,把初始值定义到flash数组中,初始化的时候把flash中的数组拷贝给ram变量数组。4.预定义的问题。为了满足autosar的语法要求,需要作相关的预定义,定义输入输出变量:var(rt_array_uint16_8,rte_var_noinit)rte_v8outp_balstate_void_val;其实际效果为:rt_array_uint16_8rte_v8outp_balstate_void_val;其中,“rt_array_uint16_8”数据类型在rte_type.h文件中有统一定义,如:typedefuint16rt_array_uint16_8[8];最后的实际效果为:uint16rte_v8outp_balstate_void_val[8];本发明提供的一种面向autosar软件架构的运行时环境生成方法,采用区别于现有技术的一种全新的设计理念,通过表格工具excel建立与程序模块一一对应的数据表格字典,再通过编程工具vc++、vb或matlab来设计相关的程序文件(rte.c)和头文件(rte_type.h、rte_swcx.h)并读取所述数据表格字典,一键生成rte模块代码,不需要专业人员操作与配置,保证了所述rte模块代码与所述程序模块swc的一致性,开发效率高;采用常见的vc++、vb或matlab等编程设计工具,使得开发成本大幅度降低。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1