变量值存储方法、读取方法、操作执行方法及装置与流程

文档序号:13875973阅读:347来源:国知局
变量值存储方法、读取方法、操作执行方法及装置与流程

本申请涉及汽车技术领域,尤其涉及一种变量值存储方法、变量值读取方法、操作执行方法及装置。



背景技术:

将电机和发动机合理地结合在一起的混合动力汽车,能够实现怠速停机、电机启动、智能充电、再生制动、电机助力、电动爬行等混和动力功能,具有低油耗、续驶里程长、技术成熟度高等优点。

发动机和混合动力电机,是混合动力汽车的两个动力源;整车控制器,是混合动力汽车整车控制的核心。整车控制器通过控制发动机控制器和电机控制器,进而控制发动机和电机的扭矩。作为控制扭矩的控制单元,整车控制器必须保持在安全可靠的工作状态。

为了使得整车控制器保持在安全可靠的工作状态,相关技术提出,由扭矩监控模块对整车控制器的工作状态进行监控。其中,扭矩监控模块和整车控制器的连接关系示意图如图1所示,其中,扭矩监控模块11和整车控制器12之间可以进行信息传递。

以图1所示的场景为例,扭矩监控模块实现监控整车控制器的工作状态的原理,具体包括如下步骤:

步骤1:扭矩监控模块根据用于计算允许输出的扭矩(后称允许扭矩)的数据,计算当前工况下的允许扭矩;

其中,针对混合动力汽车而言,上述用于计算允许扭矩的数据,一般包括当前的发动机转速、电机转速、制动踏板位置、加速踏板位置以及档位等。

步骤2:整车控制器根据加速踏板位置、制动踏板位置、车速、发动机转速、电机转速、档位等信息,计算当前所需要的总扭矩(简称需求扭矩),并将该需求扭矩携带在扭矩请求中,发送给扭矩监控模块;

步骤3:扭矩监控模块比较所述允许扭矩和接收到的扭矩请求中的需求扭矩的大小,并根据比较结果,进行相应的处理。比如,若比较结果为所述允许扭矩大于所述需求扭矩,则扭矩监控模块向整车控制器发送第一消息,该第一消息,用于指示整车控制器控制相应的部件(发动机和电机)输出所述需求扭矩;若比较结果为所述允许扭矩不大于所述需求扭矩,则扭矩监控模块向整车控制器发送第二消息,该第二消息,用于指示整车控制器降低所述需求扭矩,以使得降低后的需求扭矩小于所述允许扭矩,比如可以将所述需求扭矩降低为0,等等。

上述扭矩监控模块的功能,一般是由嵌入式处理器实现的。嵌入式处理器通过执行允许扭矩算法,实现对允许扭矩的计算。嵌入式处理器在该算法的执行过程中,会读取嵌入式处理器内存中的用于计算允许扭矩的数据参与计算。

按照现有技术,考虑到现有的嵌入式处理器内存容量较小以及计算能力较低,允许扭矩算法一般是基于整型变量的应用程序编程接口(applicationprogramminginterface,api)开发的。其中,基于整型变量的api,是指api所包含的所有变量的类型均为整型。基于整型变量的api包含的变量的类型,扭矩监控模块在读取保存在变量中的数据(即读取变量值)时,会按照整型这一数据类型进行读取。

目前,随着嵌入式处理器性能的提升,嵌入式处理器可以针对浮点类型的数据(后称浮点数据)进行计算。然而,在扭矩控制算法仍然基于整型变量的api开发的情况下,按照整型这一数据类型进行变量值读取,会导致本该是浮点类型的变量值被读取为整型的变量值(后称整型数据),从而导致读取到的变量值出现精度损失。举例如下:

针对浮点类型的变量值3.6而言,若按照整型进行读取,读取出的变量值为整数3;又比如,针对浮点类型的变量值-5.68,若按照整型进行读取,读取出的变量值为整数-5。

数据出现精度损失,尤其是像“离合器位置”等需要精确到0.1毫米这种精度的数据出现精度损失,会导致扭矩监控模块计算出的允许扭矩的精度不能满足高精度的控制要求。



技术实现要素:

本申请实施例提供一种变量值读取方法,用以解决扭矩监控模块按照现有技术进行变量值读取,会导致读取到的变量值出现精度损失的问题。

本申请实施例还提供一种变量值读取装置,用以解决扭矩监控模块按照现有技术进行变量值读取,会导致读取到的变量值出现精度损失的问题。

本申请实施例还提供一种操作执行方法和装置,以及一种变量值存储方法和装置。

本申请实施例采用下述技术方案:

一种变量值存储方法,包括:

将浮点型的值,保存在整型变量对应的存储空间;

根据所述存储空间的地址,确定整型指针变量的值,以便后续按照与浮点类型相匹配的读取方式,从所述整型指针变量的值对应的所述存储空间读取所述浮点型的值。

一种基于所述变量值存储方法的变量值读取方法,包括:

确定整型指针变量的值;

根据所述整型指针变量的值,按照与浮点类型相匹配的读取方式,读取保存在所述整型指针变量的值对应的存储空间中的变量值。

一种基于所述变量值读取方法的操作执行方法,包括:

执行与读取到的变量值相关联的操作。

一种变量值存储装置,包括:

保存单元,用于将浮点型的值,保存在整型变量对应的存储空间;

确定单元,用于根据所述存储空间的地址,确定整型指针变量的值,以便后续按照与浮点类型相匹配的读取方式,从所述整型指针变量的值对应的所述存储空间读取所述浮点型的值。

一种基于所述的变量存储装置的变量值读取装置,包括:

变量值确定单元,用于确定整型指针变量的值;

变量值读取单元,用于根据所述整型指针变量的值,按照与浮点类型相匹配的读取方式,读取保存在所述整型指针变量的值对应的存储空间中的变量值。

一种基于所述的变量值读取装置的操作执行装置,包括:

操作执行单元,用于执行与变量值读取单元读取到的变量值相关联的操作。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

由于将浮点型的值,保存在整型变量对应的存储空间,并根据该存储空间的地址确定整型指针变量的值,从而后续按照与浮点类型相匹配的读取方式,可以从所述整型指针变量的值对应的所述存储空间读取得到浮点型的变量值,因此相对于扭矩监控模块按照现有技术进行变量值读取,读取到的是整型的变量值的情况相比,采用本申请实施例提供的方案,避免了读取到的变量值出现精度损失的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为扭矩监控模块和整车控制器的连接关系示意图;

图2为本申请实施例提供一种变量值存储方法的实现流程示意图;

图3为本申请实施例2中提及的混合动力汽车中的整车控制器31、发动机控制器32和电机控制器33的关系示意图;

图4为本申请实施例2中将进气量分别保存在不同的内存单元的实现流程示意图;

图5为本申请实施例2中针对第一存储空间和第二存储空间进行进气量读取的过程示意图;

图6为本申请实施例提供的一种变量值存储装置的具体结构示意图;

图7为本申请实施例提供的一种变量值读取装置具体结构示意图。

具体实施方式

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

以下结合附图,详细说明本申请各实施例提供的技术方案。

实施例1

为解决扭矩监控模块按照现有技术进行变量值读取,会导致读取到的变量值出现精度损失的问题,本申请实施例提供一种变量值存储方法。本申请实施例提供的变量值存储方法的执行主体,可以是汽车中设置的扭矩监控模块,也可以是其他任意具备变量值存储需求的硬件或软件模块。所述汽车,可以是纯电动汽车,也可以是混合动力汽车;所述扭矩监控模块,可以是用于监控整车控制器计算出的需求扭矩是否超出允许扭矩的模块,或者,所述扭矩监控模块可以用于监控汽车的指定部件的实际扭矩(如后文所述的发动机实际扭矩或者电机实际扭矩)是否超出相应的允许扭矩的模块。

所述的执行主体并不构成对本申请的限定,为了便于描述,本申请实施例1均以执行主体是汽车中设置的扭矩监控模块为例进行说明。

如图2所示,为本申请实施例提供的一种变量值存储方法的实现流程示意图。该方法具体包括下述步骤:

步骤21,扭矩监控模块将浮点型的值,保存在整型变量对应的存储空间;

这里所说的浮点型的值,具体可以为用于计算允许扭矩的数据。

以混合动力汽车为例,该数据,比如可以是发动机转速、电机转速、制动踏板位置、加速踏板位置以及档位等数据中的至少一个。该些数据,可以是扭矩监控模块从其他模块发送来的信号中提取出的,或者,可以是由扭矩监控模块采集到的。

所述整型变量,具体可以为基于整型变量的api中包含的整型变量。基于整型变量的api中包含的该整型变量,可以是全局变量,也可以是局部变量。

以“发动机转速变量”这一整型变量为例,若基于整型变量的api中若包含有该整型变量,那么,针对该整型变量,一般会预先分配用于保存该整型变量的变量值的存储空间。该存储空间,比如可以为设置在汽车中的嵌入式处理器的内存。需要说明的是,所述扭矩监控模块的功能,可以是由该嵌入式处理器实现的;所述基于整型变量的api,可以是设置在扭矩监控模块中的允许扭矩算法在计算允许扭矩时,会调用的api。

当基于整型变量的api中包含“发动机转速变量”这一整型变量时,若扭矩监控模块采集到了发动机转速这个变量值,则可以将该变量值,保存到“发送机转速变量”对应的存储空间,即保存到预先分配的用于保存该整型变量的变量值的存储空间。

以该存储空间为设置在汽车中的嵌入式处理器的内存为例,考虑到汽车中设置的嵌入式处理器的内存,一般都工作在较为恶劣(高温且电磁干扰较强)的环境中,从而很可能出现损坏而导致内存中的变量值出现错误,因此,本申请实施例中,扭矩监控模块后续在根据从内存中读取的变量值计算允许扭矩前,扭矩监控模块可以对读取到的变量值是否有效进行检验。若校验结果为有效,则说明没有发生内存损坏而导致内存中的变量值出错的情况,因此可以执行根据读取到的变量值计算允许扭矩的操作;而若校验结果为无效,则说明可能发生了内存损坏,而导致内存中的变量值出错的情况,因此可以丢弃读取到的变量值,进而不执行根据读取到的变量值计算允许扭矩的操作,以避免计算出的允许扭矩发生错误而影响汽车的安全行进。这里所说的内存损坏,比如可以是内存的电磁兼容性(electromagneticcompatibility,emc)受到影响而导致内存中的数据发生反转(如1变为0,或者0变为1)等。

本申请实施例中,为实现对读取到的变量值是否有效进行校验,在对变量值进行存储的阶段,可以将变量值分别保存在不同的存储空间(比如嵌入式处理器的不同的内存单元,这里的内存单元比如是随机存储器(randomaccessmemory,ram))中,以便后续通过对比分别从不同的内存单元中读取到的变量值是否一致,来判断读取到的变量值是否有效。具体而言,若一致,则判定读取到的变量值有效;若不一致,则判定读取到的变量值无效,软件系统报故障,将引起软件系统复位。

举例来说,将浮点型的值,保存在整型变量对应的不同的存储空间,可以包括:

将浮点型的值,保存在整型变量对应的第一存储空间(比如为主内存)和第二存储空间(比如为从内存)。其中,这里所说的主内存和从内存,可以为不同的内存单元。或者,可以为同一内存单元的不同存储空间。为便于描述,可以将从主内存中读取到的变量值,称为第一变量值;将从从内存中读取到的变量值,称为第二变量值。

可选的,本申请实施例中,可以将浮点型的值,按照原码和反码的形式,分别保存在所述第一存储空间和所述第二存储空间。

之所以一方面以原码形式将浮点型的值保存在第一存储空间,另一方面以反码形式将浮点型的值保存在第二存储空间,是为了降低第一存储空间和第二存储空间发生相同的损坏而导致读取到的第一变量值和第二变量值的相同位发生错误(比如32位的变量值的第2位发生错误,此时变量值无效)时,导致第一变量值和第二变量值是否有效的判定结果也相应出错的概率。

比如,若均以原码形式将浮点型的值分别保存在主内存和从内存——即后续读取从内存中的变量值时,是直接按照与浮点型相匹配的变量值读取方式对从内存中的变量值进行读取(而不是对相应的反码进行读取)——那么,若主内存和从内存发生相同的损坏,而导致主内存和从内存分别保存的浮点型的值的第2位变为0——比如,主内存和从内存中分别保存的浮点型的值的第2位,均由“1”变为“0”——则后续比较读取到的第一变量值和第二变量值,会得出“第一变量值和第二变量值相同”的比较结果,进而得出错误的判定结果“第一变量值和第二变量值均有效”。

而若以原码形式将浮点型的值保存在第一存储空间,而以反码形式将浮点型的值保存在第二存储空间——即读取从内存中的变量值时,是按照与浮点型相匹配的变量值读取方式,对从内存中的变量值对应的反码进行读取,从而得到第二变量值——那么,若主内存和从内存发生相同的损坏而导致主内存和从内存分别保存的进气量的第2位变为0——比如,主内存中的浮点型的值的第2位由“1”变为“0”,而从内存中的浮点型的值的第2位由于原本就为“0”从而保持不变——则根据前文所述的比较方式,会判定读取到的第一变量值和第二变量值不相同,从而可以得出正确的判定结果“第一变量值和第二变量值均无效”。

步骤22,扭矩监控模块根据整型变量对应的存储空间的地址,确定整型指针变量的值,以便后续按照与浮点类型相匹配的读取方式,从该整型指针变量的值对应的存储空间读取所述浮点型的值。

具体而言,扭矩监控模块根据整型变量对应的存储空间的地址,确定整型指针变量的值,可以包括:扭矩监控模块将该存储空间的地址,赋值给整型指针变量。

针对该整型指针变量而言,该指针变量的类型“整型”,用于表示针对该指针变量的值(也即该存储空间的地址)对应的存储空间中的变量值进行读取时,应按照“与整型相匹配的变量值读取方式”。

其中,“与整型相匹配的变量值读取方式”是指,对作为读取对象的变量值强行取整,并以强行取整得到的整数,作为读取到的变量值。

假设,将所述浮点型的值表示为fval,那么,存储有fval的存储空间的地址(一般为首地址),可以表示为&fval;而整型指针变量,相应地可以表示为(int*)&fval。

在确定整型指针变量的值后,后续,如果扭矩监控模块期望读取步骤21中所述的整型变量的值(即步骤21中所述浮点型的值),那么,扭矩监控模块可以按照与浮点类型相匹配的读取方式,从该整型指针变量的值对应的存储空间读取所述浮点型的值。

其中,“与浮点型相匹配的变量值读取方式”是指,在对读取对象进行读取时,强行将读取对象转化为浮点类型,并以转化得到的浮点数作为读取到的变量值。

沿用上例,若确定出的整型指针变量表示为(int*)&fval,那么,按照与该整型指针变量的类型“整型”相匹配的变量值读取方式,从该整型指针变量指向的存储空间中读取变量值,可以得到读取到的变量值为*(int*)&fval。读取到的该变量值若记为ival,那么,有ival=*(int*)&fval。其中,(int*)&fval前的符号“*”表示等式右边是一个变量值,具体而言,表示ival是根据整型指针变量(int*)&fval的类型(即整型),以及整型指针变量(int*)&fval的值(也即fval所在的存储空间的首地址),所读取到的变量值。

若直接以ival作为读取到的fval的值,那么,若fval为-5.879为例,可以得到fval的值为-1061412667。由于-1061412667是一个整数,并不是期望读取到的精度较高的浮点数-5.879,因此这就导致了变量值的精度损失。

为避免变量值的精度损失,本申请实施例中,采用下述方式进行变量值读取:

fvalr=*(float*)&ival

其中,&ival,表示保存ival的存储空间的首地址;(float*)&ival,表示浮点型指针变量,该浮点型指针变量的值,为保存ival的存储空间的首地址。(float*)&ival前的符号“*”表示等式右边是一个变量值,具体而言,表示:fvalr是根据浮点型指针变量(float*)&ival的类型(即浮点型),以及浮点型指针变量(float*)&ival的值(也即保存ival的存储空间的首地址),所读取到的变量值。

由于浮点型指针变量的类型“浮点型”,用于表示针对该浮点型指针变量的值(也即保存有ival的内存空间的首地址)对应的存储空间中变量值进行读取时,应按照“与浮点型相匹配的变量值读取方式”。如前所述,“与浮点型相匹配的变量值读取方式”是指,在对读取对象进行读取时,强行将读取对象转化为浮点类型,并以转化得到的浮点数作为读取到的变量值。那么,按照该方式来读取变量值,可以得到浮点型的变量值,即fvalr=-5.879。可见,按照此方式进行变量值读取,能够读取到精度较高的变量值。

本申请实施例中,为实现对读取到的变量值是否有效进行校验,若在对变量值进行存储的阶段,就将浮点型的值分别保存在第一存储空间和第二存储空间中,并且,分别将第一存储空间的地址和第二存储空间的地址,赋值给了第一整型指针变量和第二整型指针变量,那么,针对第一存储空间和第二存储空间进行浮点型的值读取的过程,可以包括:

首先,扭矩监控模块按照与浮点型相匹配的变量值读取方式,对前文所述的第一整型指针变量对应的第一存储空间中的变量值进行读取,得到读取到的变量值(后称第一变量值);此外,扭矩监控模块按照与浮点型相匹配的变量值读取方式,对前文所述的第二整型指针变量对应的第二存储空间中的变量值进行读取,得到读取到的变量值(后称第二变量值)。

然后,扭矩监控模块比较第一变量值和第二变量值是否相同,若相同,则可以判定第一变量值和第二变量值均有效,进而可以结束读取流程;若不相同,则判定第一变量值和第二变量值均无效,也可以结束读取流程。

扭矩监控模块在判定第一变量值和第二变量值均有效后,后续可以根据第一变量值或第二变量值,计算允许扭矩。

采用本申请实施例提供的上述技术方案,由于将浮点型的值,保存在整型变量对应的存储空间,并根据该存储空间的地址确定整型指针变量的值,从而后续按照与浮点类型相匹配的读取方式,可以从所述整型指针变量的值对应的所述存储空间读取得到浮点型的变量值,因此相对于扭矩监控模块按照现有技术进行变量值读取,读取到的是整型的变量值的情况相比,采用本申请实施例提供的方案避免了读取到的变量值出现精度损失。

上述技术方案中提及的整型指针变量和浮点型指针变量,均可以预先设置在扭矩监控模块中。扭矩监控模块根据所述的整型变量对应的存储空间的地址,可以按照前文所示的计算公式,为预先设置的所述整型指针变量和所述浮点型指针变量赋值。所述整型指针变量和所述浮点型指针变量,可以不包含在允许扭矩算法在计算允许扭矩时所调用的基于整型的api中。所述整型指针变量和所述浮点型指针变量,一方面均可以被扭矩监控模块进行赋值;另一方面,所述整型指针变量和所述浮点型指针变量各自的变量值,均可以被扭矩监控模块进行获取。

实施例2

基于前述实施例1详细叙述了本申请的发明构思,为了便于更好的理解本申请的技术特征、手段和效果,下面对本申请实施例提供的变量值存储方法、变量值读取方法和操作执行方法进一步说明,从而形成了本申请的又一个实施例。

具体而言,实施例2主要是针对混合动力汽车,提供了一种变量值处理方案。

如图3所示,为本申请实施例2中提及的混合动力汽车中的整车控制器31、发动机控制器32和电机控制器33的关系示意图。整车控制器31和发动机控制器32、电机控制器33之间,如图3所示,可以通过控制器局域网(controllerareanetwork,can)总线34进行通信。

其中,整车控制器31,用于控制发动机控制器32和电机控制器33,进而控制发动机和电机输出的扭矩。其中:

整车控制器31,主要包括:扭矩请求处理单元311、扭矩分配单元312。

扭矩请求处理单元311,主要用于根据加速踏板位置、制动踏板位置、车速、发动机转速、档位等信息,计算所需要的总扭矩。

扭矩分配单元312,主要用于基于发动机和电机的效率,以提高动力系统的整体效率为目标,将扭矩请求处理单元311计算出的总扭矩分配给发动机和电机,并通过can总线34,将包含分配给发动机的扭矩(后称发动机分配扭矩)的发动机扭矩信号,发送给发动机控制器32,以及,通过can总线34,将包含分配给电机的扭矩(后称电机分配扭矩)的电机扭矩信号,发送给电机控制器33。其中,发动机分配扭矩和电机分配扭矩,可以统称为需求扭矩。

发动机控制器32,主要包括:发动机扭矩监控模块321。

发动机扭矩监控模块321,用于根据发动机实际的进气量、点火角等数据,计算发动机实际输出的扭矩(后称发动机实际扭矩,相当于本申请实施例1中所述的允许扭矩)。其中,该些数据作为发动机实际扭矩算法的变量的值,在采集到之后,会保存在发动机实际扭矩算法的相关变量对应的内存中,在实际执行该算法时,发动机扭矩监控模块321会从内存中获取该相关变量的值(也即获取所述进气量、点火角等数据)参与计算。后文将以发动机扭矩监控模块321为例,结合本申请实施例提供的方案,对发动机扭矩监控模块321如何保存和读取该相关变量的值进行介绍。

进一步地,发动机扭矩监控模块321,还用于确定计算出的发动机实际扭矩与扭矩分配单元312通过can总线发送来的发动机分配扭矩的大小关系,并根据确定出的大小关系,执行相应的处理。比如,若确定出发动机实际扭矩大于发动机分配扭矩,并且发动机实际扭矩与发动机分配扭矩的差值达到第一预定阈值时,发动机扭矩监控模块321发出故障信号。由于如何根据确定出的大小关系执行相应的处理,与本申请实施例提供的方案的关联性较小,因此不再说明书中详述。

电机控制器33,主要包括:电机扭矩监控模块331。

电机扭矩监控模块331,用于根据电机的转速、电流和母线电压等数据,计算电机实际输出的扭矩(后称电机实际扭矩,相当于本申请实施例1中所述的允许扭矩)。其中,该些数据作为电机实际扭矩算法的变量的值,在采集到之后,会保存在电机实际扭矩算法的相关变量对应的内存中,在实际执行该算法时,电机扭矩监控模块331会从内存中获取该相关变量的值(也即获取所述电机的转速、电流和母线电压等数据)参与计算。后文将以电机扭矩监控模块331为例,结合本申请实施例提供的方案,对电机监控处理模块331如何保存和读取该相关变量的值进行介绍。

进一步地,电机扭矩监控模块331,还用于确定计算出的电机实际扭矩与扭矩分配单元312通过can总线发送来的电机分配扭矩的大小关系,并根据确定出的大小关系,执行相应的处理。比如,若确定出电机实际扭矩大于电机分配扭矩,并且电机实际扭矩与电机分配扭矩的差值达到第二预定阈值时,电机扭矩监控模块331发出故障信号。由于如何根据确定出的大小关系执行相应的处理,与本申请实施例提供的方案的关联性较小,因此不再说明书中详述。

以下,详细介绍发动机扭矩监控模块321在获取到发动机实际的进气量后,如何将所述进气量保存在进气量变量对应的内存中,以及,后续如何读取所述进气量进行发动机实际扭矩的计算。针对上述的电机扭矩监控模块331而言,电机扭矩监控模块331在获取到电机的转速后,如何将所述转速保存在进气量变量对应的内存中,以及,后续如何读取所述转速进行电机实际扭矩的计算,可以参照发动机扭矩监控模块321进行的类似操作。

假设用于发动机实际扭矩算法是基于基于整型变量的api开发的,那么,该算法中对所述进气量变量进行声明时,声明的该进气量变量的类型是整型。在这样的情况下,发动机扭矩监控模块321在获取到发动机实际的进气量后,若假设该进气量是一个浮点类型的变量值fval(比如为-5.879),那么,可以将该变量值保存至为整型的所述进气量变量分配的内存空间中。

考虑到后续如果直接按照进气量变量的类型,对该内存空间中的变量值进行读取,那么,读取出的变量值是整型的。该整型的变量值相对于浮点类型的变量值fval而言,会产生一定的精度损失。因此,一方面,为了保证变量值的精度不发生损失,另一方面,为了保持发动机实际扭矩算法包含的变量的类型仍然为整型,本申请实施例中,采用下述技术手段:

1、在对变量值进行存储的阶段,所采用的技术手段:

发动机扭矩监控模块321在将进气量保存至为所述进气量变量分配的内存空间中后,根据该内存空间的首地址,确定整型指针变量的值。也即,将该首地址,赋值给整型指针变量。

由于进气量变量可以表示为fval,那么,存储有fval的内存空间的首地址,可以表示为&fval;上述整型指针变量,相应地可以表示为(int*)&fval。针对该整型指针变量而言,该指针变量的类型“整型”,用于表示针对该指针变量的值(也即上述内存空间的首地址)对应的内存空间中的变量值进行读取时,应按照“与整型相匹配的变量值读取方式”。

其中,“与整型相匹配的变量值读取方式”是指,对作为读取对象的变量值强行取整,并以强行取整得到的整数,作为读取到的变量值。

考虑到混合动力汽车中设置的嵌入式处理器的内存,一般都工作在较为恶劣(高温且电磁干扰较强)的环境中,从而很可能出现损坏而导致内存中的变量值出现错误,因此,本申请实施例2中,发动机扭矩监控模块321在根据从内存中读取的变量值计算发动机实际扭矩前,可以对读取到的变量值是否有效进行检验。若校验结果为有效,则说明没有发生内存损坏而导致内存中的变量值出错的情况,因此可以执行根据读取到的变量值计算发动机实际扭矩的操作;而若校验结果为无效,则说明可能发生了内存损坏而导致内存中的变量值出错的情况,因此可以丢弃读取到的变量值,从而不执行根据读取到的变量值计算发动机实际扭矩的操作。

本申请实施例2中,为实现对读取到的变量值是否有效进行校验,在对变量值进行存储的阶段,可以将进气量分别保存在不同的内存单元中,以便后续通过对比分别从不同的内存单元中读取到的进气量是否一致,来判断读取到的进气量是否有效。具体而言,若一致,则判定读取到的进气量有效;若不一致,则判定读取到的进气量无效。

将进气量分别保存在不同的内存单元的实现流程,如图4所示,包括下述步骤:

步骤41,发动机扭矩监控模块321判断待存储的进气量的类型是否为浮点型;若判断结果为是,执行步骤42,否则,可以结束针对浮点型变量值的存储流程。

步骤42,发动机扭矩监控模块321将为基于整型变量的api包含的进气量变量分配的主内存首地址(后称第一首地址),以及为所述进气量变量分配的从内存首地址(后称第二首地址),分别赋值给第一整型指针变量和第二整型指针变量。

其中,所述基于整型变量的api,为发动机实际扭矩算法会调用的api;所述主内存和所述从内存,分别为不同的内存单元。

步骤43,发动机扭矩监控模块321将待存储的进气量,以原码形式,保存在为进气量变量分配的主内存(后称第一存储空间);此外,以反码形式,保存在为进气量变量分配的从内存(后称第二存储空间)。

其中,第一存储空间的地址,为所述第一首地址;第二存储空间的地址,为所述第二首地址。

2、在变量值读取阶段采用的技术手段:

若将按照“与整型相匹配的变量值读取方式”,从上述整型指针变量指向的所述内存空间中读取到的变量值,记为ival,那么,有ival=*(int*)&fval。其中,(int*)&fval前的符号“*”,表示等式右边是一个变量值,具体而言,表示ival是根据整型指针变量(int*)&fval的类型(即整型),以及整型指针变量(int*)&fval的值(也即上述内存空间的首地址),所读取到的变量值。

若直接以ival作为读取到的fval的值,那么,可以得到fval的值为-1031412334。由于-1031412334是一个整数,并不是期望读取到的精度较高的浮点数-5.849,因此这就导致了变量值的精度损失。

为避免变量值的精度损失,本申请实施例中,采用下述方式进行变量值读取:

fvalr=*(float*)&ival

其中,&ival,表示保存有ival的内存空间的首地址;(float*)&ival,表示浮点型指针变量,该浮点型指针变量的值,为保存有ival的内存空间的首地址。(float*)&ival前的符号“*”,表示等式右边是一个变量值,具体而言,表示fvalr是根据浮点型指针变量(float*)&ival的类型(即浮点型),以及浮点型指针变量(float*)&ival的值(也即上述内存空间的首地址),所读取到的变量值。

由于浮点型指针变量的类型“浮点型”,用于表示针对该浮点型指针变量的值(也即保存有ival的内存空间的首地址)对应的内存空间中变量值进行读取时,应按照“与浮点型相匹配的变量值读取方式”。

其中,“与浮点型相匹配的变量值读取方式”是指,在对读取对象进行读取时,强行将读取对象转化为浮点类型,并以转化得到的浮点数作为读取到的变量值。

本申请实施例2中,为实现对读取到的变量值是否有效进行校验,若在对变量值进行存储的阶段,就将进气量分别保存在第一存储空间和第二存储空间中,那么,针对第一存储空间和第二存储空间进行进气量读取的过程,可以包括如图5所示的下述步骤:

步骤51,发动机扭矩监控模块321判断是否需要读取进气量,来参与计算发动机实际扭矩;若是,执行步骤52;若否,则结束读取进气量的流程。

步骤52,发动机扭矩监控模块321按照与浮点型相匹配的变量值读取方式,对前文所述的第一整型指针变量对应的主内存中的变量值进行读取,得到读取到的变量值(后称第一变量值);此外,发动机扭矩监控模块321按照与浮点型相匹配的变量值读取方式,对前文所述的第二整型指针变量对应的从内存中的变量值进行读取,得到读取到的变量值(后称第二变量值)。

需要说明的是,由于在步骤43中,发动机扭矩监控模块321将待存储的进气量以反码形式,保存在为进气量变量分配的从内存,因此,在步骤52中,在对从内存中的变量值进行读取时,可以是按照与浮点型相匹配的变量值读取方式,对从内存中的变量值对应的反码进行读取,从而得到第二变量值。

步骤53,发动机扭矩监控模块321比较第一变量值和第二变量值是否相同,若相同,则可以判定第一变量值和第二变量值均有效,进而可以结束读取流程;若不相同,则判定第一变量值和第二变量值均无效,也可以结束读取流程。

发动机扭矩监控模块321在判定第一变量值和第二变量值均有效后,后续可以根据第一变量值或第二变量值,计算发动机实际扭矩。

具体地,发动机扭矩监控模块321比较第一变量值和第二变量值是否相同,以及根据比较结果,计算发动机实际扭矩,可以是基于逗号运算符实现的。位于该逗号运算符之前的逻辑运算,为比较第一变量值和第二变量值是否相同;位于该逗号运算符之后的,是读取到的第一变量值或第二变量值。基于该逗号运算符,发动机扭矩监控模块321会执行所述逻辑运算,以得到相应的运算结果;若该运算结果为第一变量值和第二变量值相同,那么,发动机扭矩监控模块321会输出位于该逗号运算符之后的第一变量值或第二变量值。这里所说的输出,可以是指赋值给发动机扭矩监控模块321中设置的发动机实际扭矩算法中的进气量变量,以便计算发动机实际扭矩。

本申请实施例中,上述步骤51~步骤53,以及根据第一变量值或第二变量值计算发动机实际扭矩,均可以为发动机扭矩监控模块321中设置的发动机实际扭矩算法所包含的逻辑。

需要说明的是,在前文所述的步骤43中,之所以一方面以原码形式将待存储的进气量保存在第一存储空间,另一方面以反码形式将待存储的进气量保存在第二存储空间,是为了降低主内存和从内存发生相同的损坏而导致读取到的第一变量值和第二变量值的相同位发生错误(比如32位的变量值的第2位发生错误,此时变量值无效)时,使得第一变量值和第二变量值是否有效的判定结果也相应出错的概率。

比如,若均以原码形式将待存储的进气量分别保存在第一存储空间和第二存储空间——即读取从内存中的变量值时,是直接按照与浮点型相匹配的变量值读取方式对从内存中的变量值进行读取(而不是对相应的反码进行读取)——那么,若主内存和从内存发生相同的损坏,而导致主内存和从内存分别保存的进气量的第2位变为0,即第2位均由“1”变为“0”,则根据步骤53中所述的比较方式,会判断出读取到的第一变量值和第二变量值相同,从而得出错误的判定结果“第一变量值和第二变量值均有效”。

而若以原码形式将待存储的进气量保存在第一存储空间,而以反码形式将待存储的进气量保存在第二存储空间——即读取从内存中的变量值时,是按照与浮点型相匹配的变量值读取方式,对从内存中的变量值对应的反码进行读取,从而得到第二变量值——那么,若主内存和从内存发生相同的损坏而导致主内存和从内存分别保存的进气量的第2位变为0,即第2位均由“1”变为“0”,比如,主内存中的进气量的第2位由“1”变为“0”,而从内存中的进气量的第2位由于原本就为“0”从而保持不变,则根据步骤53中所述的比较方式,会判断出读取到的第一变量值和第二变量值不相同,从而可以得出正确的判定结果“第一变量值和第二变量值均无效”。

本申请实施例2基于功能安全的思想,对相同变量值采用两块不同的内存单元完成,主内存存储变量值的原码,从内存存储变量值的反码。当分别对两块内存单元中的变量值进行读取,得到的变量值不一致时发动机扭矩监控模块321所在的整个软件系统可以报错。比如,发动机扭矩监控模块321在所述得到的变量值不一致时,可以判定发动机扭矩监控逻辑失效,进而引起混动整车控制软件动作,以保护动力系统输出扭矩变化在可控范围内,从而保护驾驶者和乘客的安全,也满足了iso26262定义的功能安全要求。

根据汽车安全完整性等级(automotivesafetyintegrationlevel,asil)等级划分原则,对本申请实施例中针对变量值的存储机制进行风险评估,得出相应的安全目标为:防止非预期的动力输出,asil等级为b。

实施例3

出于与本申请实施例1和实施例2相同的发明构思,本申请实施例3提供一种变量值存储装置、一种变量值读取装置以及一种操作执行装置。

其中,该变量值存储装置的具体结构示意图如图6所示,包括下述功能单元:

保存单元61,用于将浮点型的值,保存在整型变量对应的存储空间。

其中,这里所说的浮点型的值,比如可以为用于计算允许扭矩的数据。

确定单元62,用于根据所述存储空间的地址,确定整型指针变量的值,以便后续按照与浮点类型相匹配的读取方式,从所述整型指针变量的值对应的所述存储空间读取所述浮点型的值。

就保存单元61功能的具体实现方式而言,为了便于后续对读取出的变量值的有效性进行校验,在一种实施方式中,保存单元61具体可以用于:

将浮点型的值,保存在整型变量对应的第一存储空间和第二存储空间。

相应的,确定单元62具体可以用于:

根据所述第一存储空间的地址,确定第一整型指针变量的值,以便后续按照与浮点类型相匹配的读取方式,从所述第一整型指针变量的值对应的所述第一存储空间读取所述浮点型的值;根据所述第二存储空间的地址,确定第二整型指针变量的值,以便后续按照与浮点类型相匹配的读取方式,从所述第二整型指针变量的值对应的所述第二存储空间读取所述浮点型的值。

为了降低第一存储空间和第二存储空间发生相同的损坏而导致读取到的第一变量值和第二变量值的相同位发生错误时,导致第一变量值和第二变量值是否有效的判定结果也相应出错的概率,确定单元62具体可以用于:

将浮点型的值,按照原码和反码的形式,分别保存在所述第一存储空间和所述第二存储空间。

本申请实施例提供的该变量值存储单元,具体而言可以为汽车中的扭矩监控模块,比如可以是可以实施例1中的扭矩监控模块,或者是实施例2中的发动机扭矩监控模块321,或者是实施例2中的电机扭矩监控模块331,等。

采用本申请实施例提供的上述装置,由于将浮点型的值,保存在整型变量对应的存储空间,并根据该存储空间的地址确定整型指针变量的值,从而后续按照与浮点类型相匹配的读取方式,可以从所述整型指针变量的值对应的所述存储空间读取得到浮点型的变量值,因此相对于扭矩监控模块按照现有技术进行变量值读取,读取到的是整型的变量值的情况相比,采用本申请实施例提供的方案避免了读取到的变量值出现精度损失。

基于上述变量值存储方案,本申请实施例还提供一种变量值读取装置。该装置的具体结构示意图如图7所示,包括:变量值确定单元71和变量值读取单元72。其中:

变量值确定单元71,用于确定整型指针变量的值。

变量值读取单元72,用于根据所述整型指针变量的值,按照与浮点类型相匹配的读取方式,读取保存在所述整型指针变量的值对应的存储空间中的变量值。

在一种实施方式中,所述整型指针变量的值,包括:第一整型指针变量的值和第二整型指针变量的值;其中,所述第一整型指针变量的值,对应于第一存储空间;所述第二整型指针变量的值,对应于第二存储空间。在这样的情况下,变量值读取单元72,具体可以用于:

根据所述第一整型指针变量的值,按照与浮点类型相匹配的读取方式,从所述第一存储空间读取变量值;

根据所述第二整型指针变量的值,按照与浮点类型相匹配的读取方式,从所述第二存储空间读取变量值。

在一种实施方式中,变量值读取单元72根据所述第二整型指针变量的值,按照与浮点类型相匹配的读取方式,从所述第二存储空间读取变量值,具体可以包括:

根据所述第二整型指针变量的值,按照预定的读取规则,从所述第二存储空间读取变量值。其中,所述预定的读取规则,包括:按照浮点类型相匹配的读取方式,读取所述第二存储空间的变量值对应的反码。

此外,本申请实施例还提供一种操作执行装置,用以实现根据上述变量值读取装置读取到的变量值,执行相应的操作。该操作执行装置,具体可以包括操作执行单元,用于执行与读取到的变量值相关联的操作。

该操作执行装置,可以是实施例1中的扭矩监控模块,或者是实施例2中的发动机扭矩监控模块321,或者是实施例2中的电机扭矩监控模块331。这样的情况下,这里所说的执行与读取到的变量值相关联的操作,比如可以包括:根据读取到的变量值,计算允许扭矩。

在一种实施方式中,操作执行单元具体可以用于:判断读取到的变量值是否有效;在判断结果表示读取到的变量值有效时,执行所述操作。

在一种实施方式中,当读取到的变量值包括:按照与浮点类型相匹配的读取方式,从第一存储空间读取到的变量值,以及,按照与浮点类型相匹配的读取方式,从第二存储空间读取到的变量值时,操作执行单元判断读取到的变量值是否有效,具体可以包括:

判断从所述第一存储空间和第二存储空间中分别读取的变量值是否相同;

在判断结果表示从所述第一存储空间和第二存储空间中分别读取的变量值相同时,判定所述读取到的变量值有效;在判断结果表示从所述第一存储空间和第二存储空间中分别读取的变量值不相同时,判定所述读取到的变量值无效。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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