Simulink模型变量分配的处理方法、装置及设备与流程

文档序号:18894258发布日期:2019-10-15 22:39阅读:1392来源:国知局
Simulink模型变量分配的处理方法、装置及设备与流程

本申请涉及基于模型的嵌入式软件开发领域,尤其涉及一种simulink模型变量分配的处理方法、装置及设备。



背景技术:

嵌入式芯片的存储空间有限,节省资源使用具有重要意义。基于simulink模型进行嵌入式应用软件开发,是目前汽车行业一种普遍的开发方式。

在simulink模型自动生成的代码中,变量通常是按变量名称排序的方式进行定义的,即占用不同字节长度的数据类型的变量在代码文件中极有可能交叉存放,而在编译器编译时,变量在内存中的地址通常需要与它的字节长度对齐,因此不同字节长度的变量交错定义极有可能导致编译器为变量分配的地址不连续,从而导致“空穴”,也就会造成ecu(electroniccontrolunit,电子控制单元)内存资源的浪费。



技术实现要素:

本申请提供一种simulink模型变量分配的处理方法、装置及设备,以解决现有技术中不同字节长度的数据类型的变量在代码文件中交叉存放,从而导致内存资源浪费的问题。

本申请第一个方面提供一种变量分配的处理方法,包括:

获取待分配simulink模型变量的变量属性和数据类型的位数信息;

根据所述变量属性与所述数据类型的位数信息,将所述待分配simulink变量分配到与所述变量属性和位数信息对应的变量定义文件和声明文件中。

可选地,所述方法还包括:

采用所述变量定义文件的后处理脚本,为不同位数的所述变量定义文件指定不同的分段信息。

可选地,所述方法还包括:

将具有相同位数信息的分段信息进行汇总处理;

采用预配置链接文件,将汇总处理后的具有相同位数信息的变量在内存中连续存放。

可选地,所述获取待分配simulink模型变量的数据类型的位数信息,包括:

若所述待分配变量的数据类型为基础数据类型,根据所述基础数据类型名称及当前项目模型所对应的目标芯片类型,确定所述待分配变量的位数信息。

可选地,所述获取待分配simulink模型变量的数据类型的位数信息,还包括:

若所述待分配simulink模型变量的数据类型为simulink定点数据类型,将所述待分配simulink模型变量的数据类型赋值给中间变量,对所述中间变量求取字节长度,获得所述待分配simulink模型变量的位数信息。

可选地,所述获取待分配simulink模型变量的数据类型的位数信息,还包括:

若所述待分配simulink模型变量的数据类型为simulink自定义数据类型,则调用数据字节长度函数,确定所述待分配simulink模型变量的位数信息。

本申请第二个方面提供一种量分配的处理装置,包括:

获取模块,用于获取待分配simulink模型变量的变量属性和数据类型的位数信息;

分配模块,用于根据所述变量属性与所述数据类型的位数信息,将所述待分配simulink变量分配到与所述变量属性和位数信息对应的变量定义文件和声明文件中。

可选地,所述分配模块还用于:

采用所述变量定义文件的后处理脚本,为不同位数的所述变量定义文件指定不同的分段信息。

可选地,所述分配模块还用于:

将具有相同位数信息的分段信息进行汇总处理;

采用预配置链接文件,将汇总处理后的具有相同位数信息的变量在内存中连续存放。

可选地,所述获取模块用于:

若所述待分配变量的数据类型为基础数据类型,根据所述基础数据类型名称及当前项目模型所对应的目标芯片类型,确定所述待分配变量的位数信息。

可选地,所述获取模块还用于:

若所述待分配simulink模型变量的数据类型为simulink定点数据类型,将所述待分配simulink模型变量的数据类型赋值给中间变量,对所述中间变量求取字节长度,获得所述待分配simulink模型变量的位数信息。

可选地,所述获取模块还用于:

若所述待分配simulink模型变量的数据类型为simulink自定义数据类型,则调用数据字节长度函数,确定所述待分配simulink模型变量的位数信息。本申请第三个方面提供一种电子设备,包括:至少一个处理器和存储器;

所述存储器存储计算机程序;所述至少一个处理器执行所述存储器存储的计算机程序,以实现第一个方面提供的方法。

本申请第四个方面提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时实现第一个方面提供的方法。

本申请提供的simulink模型变量分配的处理方法、装置及设备,通过将不同变量属性和数据类型的位数信息的simulink模型变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,节省了内存空间。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一实施例提供的simulink模型变量分配的处理方法的流程示意图;

图2为本申请一实施例提供的另一种simulink模型变量分配的处理方法的流程示意图;

图3为本申请一实施例提供的simulink模型变量分配的处理装置的结构示意图;

图4为本申请一实施例提供的电子设备的结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

首先对本申请所涉及的名词进行解释:

ecu内存资源使用:嵌入式ecu芯片的储存资源是有限的,比如多大的flash空间,多大的ram空间,ecu程序及变量定义等需要占用ecu芯片内存资源。

mpt或simulink包:simulink模型中使用的变量定义方式,两者在功能上没有太大差异,通常由用户根据自己实际情况决定变量定义方式,且两者在用法上几乎一致。以使用mpt进行变量定义为例,假如要定义一个名字为mysignal的信号量,则执行以下赋值语句:mysignal=mpt.signal;

假如要定义一个名字为myparameter的参变量,则执行以下赋值语句:myparameter=mpt.parameter。

m脚本:matlab软件自带的编程脚本语言。

编译链接:编译器将c代码转化为可执行程序,通常要经过编译和链接两个主要过程;编译过程负责是将代码生成.o文件,而链接过程是根据链接文件,将前述所有的.o文件“链接”生成可刷写到控制芯片中的可执行程序。

资源分段:c代码文件中有函数定义、测量量变量定义、标定量变量定义等,其通过编译器编译后,不同的内容可以生成到不同的段中(按属性分类),通过c语言的pragma指令,可以指定分段的名称。

链接文件:编译器执行链接操作时需要的文件,此文件告诉编译器,各个分段在内存中如何存放,比如先放哪个分段,再放哪个分段。

本申请实施例提供的变量分配的处理方法,适用于simulink环境下的变量分配及编译链接的应用场景,具体用于将相同类别且具有相同字节长度的变量生成在同一代码文件中。

此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。

下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。

本申请一实施例提供一种simulink模型变量分配的处理方法,用于对不同变量属性和不同位数信息的变量进行分配。本实施例的执行主体为simulink模型变量分配的处理装置,该装置可以设置在电子设备上,其中,电子设备可以是任意的计算机设备,比如pc电脑、笔记本电脑、平板电脑等等。

图1为本申请实施例提供的simulink模型变量分配的处理方法的流程示意图,如图1所示,该方法包括:

s101、获取待分配simulink模型变量的变量属性和数据类型的位数信息;

其中,变量属性包括信号量和参变量,待分配变量的变量属性为其中的一种;数据类型可以为simulink中的基础数据类型中的boolean,uint8,int8等、通过fixdt定义的定点数据类型和自定义的数据类型,在本申请实施例中包括上述的数据类型,但是并不局限于此。

s102、根据所述变量属性与所述数据类型的位数信息,将所述待分配simulink模型变量分配到与所述变量属性和位数信息对应的变量定义文件和声明文件中。

图2为本申请实施例提供的另一种simulink模型变量分配的处理方法的流程示意图,如图2所示,在执行上述方法时,先判断待分配变量是否是使用mpt或simulink包定义的变量,如果是,则继续识别该待分配变量的变量属性,例如是信号量还是参变量;如果不是,转下一个变量,如图2中步骤①和步骤②所示。

在判断待分配变量是mpt或simulink包定义的变量,且确定了该变量的变量属性,进一步判断该变量是否是引用变量,即判断该变量是否在本应用层模块中定义,如果该变量在本应用层模块中引用,即非定义,也就是引用变量,则转到下一个变量重新判断,如图2中步骤③所示;

如果是若该变量不是应用变量,则执行步骤④,读取变量的数据类型并对该数据类型占用的位数信息进行判断。

在获取到待分配变量的变量属性和数据类型的位数信息后,根据变量属性与数据类型的位数信息,将待分配变量分配到与变量属性和位数信息对应的变量定义文件和声明文件中。

示例性地,待分配变量为信号量uint8、参变量uint16,在获取到待分配变量的变量属性和数据类型的位数信息后,根据变量属性是信号量或是参变量,位数信息是8位或是16位,将待分配变量分配到与变量属性和位数信息相对应的变量定义文件和声明文件中,定义文件以.c形式进行存储,声明文件以.h形式进行存储。

具体地,在执行上述方法之前,需要根据变量的变量属性及数据类型的占用位数信息,进行变量定义文件和声明文件进行配置。

也就是根据变量是信号量或参变量的变量属性,及数据类型占用位数信息,进行变量定义和声明文件配置信息修改,如图2中⑤所示。假设当前项目所用数据类型有8位、16位和32位三种情况,则在配置过程中可能使用到的定义和声明文件如下表1所示:

表1

上述配置完成后对simulink模型生成代码,则模型变量将自动生成定义到指定名称的变量定义文件中;同时意味着具有相同类别(信号量或参变量)且具有相同数据类型位数的变量,将生成到同一个变量定义文件和声明文件中,其中,定义文件和声明文件包含在代码文件中。

本申请提供的变量分配的处理方法,通过将不同变量属性和数据类型的位数信息的变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,节省了内存空间。

本申请另一实施例对上述实施例提供的方法做进一步补充说明。

在上述实施例的基础上,可选地,该方法还包括:采用变量定义文件的后处理脚本,为不同位数的变量定义文件指定不同的分段信息。

在使用上述处理好的变量的模型执行自动代码生成,在代码生成结束后,在代码中增加pragma指令,可以指定分段的名称,即采用后处理脚本,分别为不同位数的变量定义文件指定不同的分段信息。在上述实施例的基础上,可选地,该方法还包括:

将具有相同位数信息的分段信息进行汇总处理;

采用预配置链接文件,将汇总处理后的具有相同位数信息的变量在内存中连续存放。

使用预先配置好的链接文件,将前述具有相同位数属性的分段按类别汇总到一起,并使用该链接文件对上述代码编译后的结果进行链接,从而保证具有相同位数属性的变量在内存中连续存放,进而达到节省芯片资源使用的目的。

在上述实施例的基础上,本申请中对simulink模型中允许使用的数据类型要求为能够通过m脚本准确识别出数据类型的占用字节长度信息。

在本申请实施例中,假定允许使用的数据类型包括:

1、simulink提供的基础数据类型:

如boolean,uint8,int8,uint16,int16,int32,uint32,float;

2、simulink支持的通过fixdt定义的定点数据类型;

3、通过simulink.numerictype自定义的数据类型;

作为一种可实施的方式,在上述实施例的基础上,可选地,获取待分配变量的数据类型的位数信息,包括:

若待分配变量的数据类型为基础数据类型,根据基础数据类型名称及当前项目模型所对应的目标芯片类型,确定待分配变量的位数信息。

具体地,如果变量的数据类型是simulink提供的基础数据类型,则根据基础数据类型名称,结合当前项目模型所对应的目标芯片类型,即可判断占用字节长度信息。数据类型及占用字节数映射关系的表格如表2所示:

表2

作为另一种可实施的方式,在上述实施例的基础上,可选地,获取待分配simulink模型变量的数据类型的位数信息,还包括:

若待分配simulink模型变量的数据类型为定点数据类型,将待分配simulink模型变量的数据类型赋值给中间变量,对中间变量求取字节长度,获得待分配simulink模型变量的位数信息。

具体地,如果变量的数据类型是通过matlab提供的“fixdt”定义的定点数据类型,则在m脚本中,将fixdt数据类型赋值给一个中间变量,然后对中间变量求取wordlength,即可达到数据类型位数信息。

以数据类型为fixdt(1,16,2^1,0)为例,计算方法如下:

dt=fixdt(1,16,2^1,0);

bitnum=dt.wordlength;

其中,dt为计算过程中的一个中间变量;

bitnum为fixdt数据类型对应的位数计算结果。

作为再一种可实施的方式,在上述实施例的基础上,可选地,获取待分配simulink模型变量的数据类型的位数信息,还包括:

若待分配simulink模型变量的数据类型为自定义数据类型,则调用数据字节长度函数,确定待分配simulink模型变量的位数信息。

具体地,如果变量的数据类型是通过matlab提供的simulink.numerictype自定义的数据类型,则通过脚本执行datatype.wordlength即可获得该数据类型对应的位数信息,其中,"datatype"应为采用“simulink.numerictype”实际定义的数据类型名称。

需要说明的是,本实施例中各可实施的方式可以单独实施,也可以在不冲突的情况下以任意组合方式结合实施本申请不做限定。

本申请提供的simulink模型变量分配的处理方法,通过将不同变量属性和数据类型的位数信息的变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,进而解决了内存“空穴”的问题,节省了内存空间。

本申请另一实施例提供一种变量分配的处理装置,用于执行上述实施例提供的方法。

图3为本申请一实施例提供的simulink模型变量分配的处理装置的结构示意图,如图3所示,该变量分配的处理装置包括获取模块10和分配模块20;

其中,获取模块10用于获取待分配变量的变量属性和数据类型的位数信息;

分配模块20用于根据所述变量属性与数据类型的位数信息,将待分配变量分配到预先配置好的与变量属性和位数信息相对应的变量定义文件和声明文件中。

关于本实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

根据本实施例提供的simulink模型变量分配的处理装置,通过将不同变量属性和数据类型的位数信息的变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,节省了内存空间。

本申请又一实施例对上述实施例提供的装置做进一步补充说明。

在上述实施例的基础上,可选地,

可选地,所述分配模块还用于:

采用所述变量定义文件的后处理脚本,为不同位数的所述变量定义文件指定不同的分段信息。

simulink模型代码生成控制模块,用于将使用上述处理过的变量的simulink模型执行自动代码生成。

可选地,所述分配模块还用于:

将具有相同位数信息的分段信息进行汇总处理;

采用预配置链接文件,将汇总处理后的具有相同位数信息的变量在内存中连续存放。

可选地,所述获取模块用于:

若所述待分配变量的数据类型为基础数据类型,根据所述基础数据类型名称及当前项目模型所对应的目标芯片类型,确定所述待分配变量的位数信息。

可选地,所述获取模块还用于:

若所述待分配simulink模型变量的数据类型为simulink定点数据类型,将所述待分配simulink模型变量的数据类型赋值给中间变量,对所述中间变量求取字节长度,获得所述待分配simulink模型变量的位数信息。

可选地,所述获取模块还用于:

若所述待分配simulink模型变量的数据类型为simulink自定义数据类型,则调用数据字节长度函数,确定所述待分配simulink模型变量的位数信息。关于本实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

需要说明的是,本实施例中各可实施的方式可以单独实施,也可以在不冲突的情况下以任意组合方式结合实施本申请不做限定。

根据本实施例的变量分配的处理装置,通过将不同变量属性和数据类型的位数信息的变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,进而解决了内存“空穴”的问题,节省了内存空间。

本申请再一实施例提供一种电子设备,用于执行上述实施例提供的方法。

图4为本申请一实施例提供的电子设备的结构示意图,如图4所示,该电子设备包括:至少一个处理器51和存储器52;

所述存储器存储计算机程序;所述至少一个处理器执行所述存储器存储的计算机程序,以实现上述实施例提供的方法。

根据本实施例的变量分配的电子设备,通过将不同变量属性和数据类型的位数信息的变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,节省了内存空间。

本申请又一实施例提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时实现上述任一实施例提供的方法。

根据本实施例的计算机可读存储介质,通过将不同变量属性和数据类型的位数信息的变量分配到对应的变量定义文件和声明文件中,以使得不同字节长度的数据类型的变量在代码文件中不再交叉存放,节省了内存空间。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1