改变电子控制单元的存储器中的软件的方法和计算机系统的制作方法

文档序号:8380741阅读:191来源:国知局
改变电子控制单元的存储器中的软件的方法和计算机系统的制作方法
【技术领域】
[0001]本发明涉及一种用于改变电子控制单元的存储器中的软件的方法,其中,所述存储器包括至少一个只读存储器,所述只读存储器具有存储在其中的并且构成所述软件的至少一部分的多个原始的程序例程,所述原始的程序例程通过所述控制单元的至少一个处理器执行;所述存储器具有用于存储易失性数据的至少一个工作存储器;并且所述存储器还具有覆盖存储器,所述覆盖存储器中的每个存储地址能够借助于关联关系信息与所述只读存储器中的存储地址相关联,以至于所述处理器在覆盖功能被激活时代替执行在所述只读存储器中的地址处的程序例程指令而是执行在所述覆盖存储器的相关联的地址处的指令。
[0002]本发明还涉及一种用于改变电子控制单元的存储器中的软件的计算机系统。
【背景技术】
[0003]在汽车工业中,软件的使用能够实现如通过纯机械解决方案不可能实现的、某种程度有效的监测和控制机制。现代汽车包括由电子控制单元(ECU)、工作存储器和只读存储器构成的网络,所述电子控制单元总是具有至少一个处理器,所述处理器执行程序例程,所述只读存储器通常通过闪存存储器实现。
[0004]所有控制单元还具有接口,这些控制单元借助于所述接口接收传感器数据、操控执行器并且相互通信。如在软件工业中通常常见的那样,在ECU编程时也倾向于采用现有的解决方案。因此现有的马达控制单元,例如用于先前系列的马达的马达控制单元,用作为研发新的控制单元的基础。然后选择性地修改或者重新开发各个程序例程,而绝大部分旧代码被保留。
[0005]替选地,制造商经常对供应商要求完全编程的开发控制单元,以便将其随后根据自己的特定要求来自行修改。在这种情况下,新开发的程序例程必须被集成到控制单元的可运行的二进制代码中并且在那里取代、改变或补充相应的原始程序例程。该集成过程称作为芳路。
[0006]为了实现旁路存在不同的可能性。非常广泛传播的方法是基于服务的旁路。服务是位于控制单元的存储器中的特定函数。在程序代码的特定位置上调用服务并且该服务通过下述方式承担旁路的技术实施,即:服务附加于或代替原始的程序例程而调用旁路例程,提供所述旁路例程的输入参数并且在其运行之后确保由旁路例程写入的值存储在控制单元存储器中的正确位置处。其它方法不要求服务函数。这些其它方法基于二级制代码的修改。例如可行的是,通过插入开关逻辑器而禁用函数中的变量访问。
[0007]原则上,旁路例程的代码能够位于外部系统上或者位于控制单元本身上。后一种可能性,即所谓的内部旁路,在此不要求附加的硬件并且不取决于特殊接口的存在。
[0008]开发控制单元必须根据至今为止的用于实施旁路的现有技术来制备。在应用基于服务的旁路方法时这意味着,在要取代的函数之前和/或之后(根据方法)和/或之内,月艮务函数的调用必须被集成到程序例程的二进制代码中。在理想情况下,该服务调用在源代码层面上已经实现。在实践中,其并不总是可实现的。例如,控制单元的供应商对此可能没有准备或者在已经制成控制单元之后才显示出对特定函数进行旁路的必要性。在这样的情况下也可行的是,将调用后续地集成到二级制代码中。
[0009]根据当前的现有技术,旁路例程的代码的操作分别引起新写入控制单元的闪存存储器。这不仅是耗时的(几十秒至几十分钟)并且中断正在运行的测试系列,而且也过度损耗闪存存储器,而该闪存存储器在物理上仅能够承受有限次的存储过程。
[0010]在相应于现有技术的典型情况下,除了自有的程序代码,对于基于服务的内部旁路存在在闪存中的特定的旁路-服务函数。为旁路准备的任意程序例程f扩展服务的两次调用。将旁路例程安装在闪存中的用户将该旁路例程的存储地址登记在表中。该服务函数的第一次调用例如直接发生在f之前。该服务函数获得表位置作为参数。如果服务函数在那里发现存储地址,那么所述服务函数调用位于该地址处的旁路函数。否则该服务函数保持被动。旁路例程只要其被执行则将由其产生的所有值根据专门为其定义的全局变量写入缓冲存储器中。在执行完旁路例程之后,处理器又跳回到原本的程序中。然后函数f正常运行,而与旁路例程是否被执行无关。
[0011 ] 在运行完f之后进行服务函数的第二次调用。所述服务函数获得第二表位置作为参数并且在那里发现覆盖函数的地址。该地址与旁路例程匹配并且连同旁路例程一起被安装。覆盖例程读取由旁路例程设立的缓冲存储器并且覆盖由f写入的变量。
[0012]关于由f处理的变量的信息来自控制单元的a21文件。该文件是在每个开发控制单元中附有的技术说明文件。其主要包含块和第二块,所述块将在控制单元上运行的函数与其相应所读取的和所写入的变量相关联,所述第二块列举变量的存储地址。因此,f的源代码的知识对于设计旁路例程不是必需的。

【发明内容】

[0013]本发明的目的是,在控制单元上改变软件(所述软件在最初、尤其是在制造商方面并不是为此准备的),允许在软件上的改变,尤其是因此不必包括在程序例程内的准备好的服务函数的调用。
[0014]此外的一个目的是,在此允许尽可能不动或者甚至完全不动闪存存储器的内容,由此避过大部分在旁路时出现的、已经提及的问题(闪存存储器的物理加载、为了写入控制单元而引起的高耗时、通过服务函数的预先准备的必要性)。另一目的是,开辟在控制单元的运行时间能够动态地补充、改变或更换程序例程的代码的可能性,尤其是无需为此停止控制单元。
[0015]根据本发明,所述目的如下实现:经由控制单元的接口借助于连接在该接口上的影响设备或者通过集成到控制单元程序中的服务代码,尤其是在控制单元运行时间期间,在覆盖存储器的地址区域中存储旁路例程的至少一部分,原始的程序例程应被该旁路例程取代或至少部分地取代。根据本发明,旁路例程包括对控制单元的功能产生直接影响的功能代码和可选的辅助代码,所述辅助代码在需要时对功能代码进行补充,以便确保功能代码的正常执行。对辅助代码的示例是跳转指令、服务函数和服务函数的调用。
[0016]根据本发明,取代程序例程或者取代至少一部分程序例程理解为,程序例程或一部分程序例程在功能上被取代,即由处理器执行其它例程或其它部分而不是执行该例程或者一部分该例程。根据本发明的取代尤其根据本发明不改变只读存储器中的原始代码,而是能够不动该原始代码。根据本发明确保由处理器执行其它代码而不是执行原始代码。
[0017]为此利用本发明,使得控制单元,尤其是不是用于构造产品中的系列而是用于开发、测试和调整在该单元上实现的软件的开发控制单元,通常具有所谓的覆盖存储器。所述覆盖存储器是特定的存储区域,该特定的存储区域用于快速地且不复杂地覆盖程序代码的个别碎片。
[0018]在此,其例如能够为自有的集成到处理器中的存储模块或者为工作存储器或闪存存储器的预订的或可预订的区域。覆盖存储器中的各个地址或整个地址区域能够借助于至少一个关联关系信息、尤其是为此设置的处理器寄存器中的关联关系信息来存储。地址或同等大小的地址区域分配在闪存或工作存储器上。
[0019]根据本发明,借助于与控制单元连接的计算机或在其上运行的软件和/或与控制单元连接的影响设备创建关联关系信息,所述关联关系信息然后为了激活关联关系进而为了激活覆盖功能而被写入到为此设置的处理器寄存器中。
[0020]在这种类型的控制单元中,在处理器每次访问存储地址、尤其是至少所述只读存储器的存储地址时检查:该地址是否与覆盖存储器中的地址相关联。如果是这种情况,那么忽略存储地址的内容并且代替于此访问覆盖存储器中的相关联的存储地址。如果在那里存在可执行的指令,那么由处理器执行该指令。实现所述方法的逻辑器优选硬接在控制单元的处理器上。
[0021]根据现有技术,覆盖存储器用于调整控制单元。在此理解为使已制成的并且经测试的控制单元软件的参数适配于特定的车辆型号。在控制单元中应用的常见的闪存存储器中出于物理原因仅能够以高的耗费操纵各个值,这是因为为此必须首先完全删除闪存存储器的较大的存储区域并且然后又必须完全重新编程该存储区域。闪存的这样的删除和不断地重写在时间上通常是不可接受的。这在正在运行的程序执行时通常也是完全不可行的,因为当处理器在该区域中编辑其程序代码或者处理存在那里的数据时,完全删除或仅部分重新编程的闪存存储区域能够导致不可预见的反应。参数因此被写入到覆盖存储器中,以至于所述参数覆盖存储在闪存上的变量并且能够在那里快速地且在运行时被操纵。根据现有技术,因此覆盖存储器仅用于覆盖变量或参数。
[0022]现在,根据本发明的方法提出,通过使用覆盖存储器引入新的功能,即使用覆盖存储器以用于将旁路例程的代码插入到控制单元程序中并且通过所述代码至少部分地在功能上取代或补充程序例程。
[0023]因此,旁路例程完全地或至少部分地写入到覆盖存储器中,并且处理器的用于覆盖功能的寄存器通过存储至少一个关联关系信息而配置为,使得代替执行待取代的原始程序例程而执行旁路例程。一个特定的实施方案提出,在覆盖存储器中存储跳转指令,所述跳转指令将处理器引向在激活的覆盖存储器之外的存储地址,自该存储地址起存储至少一部分旁路例程。这原则上能够是覆盖存储器之内或之外的任意地址。本发明因此也能够用在仅提供小的覆盖存储器的控制单元中。
[0024]根据本发明,“激活的覆盖存储器”理解为所有存储地址的整体,所述存储地址根据关联关系信息分别与其它存储地址一一对应地相关联,以至于其在覆盖功能被激活时使该存储地址如之前阐述的那样分别覆盖其它的存储地址。
[0025]与现有技术中已知的基于服务的旁路不同,通过供应商准备控制单元通过使用本发明而不再是必需的。此外可行的是,快速地且在不停止控制单元的情况下再加载或更换旁路例程的代码。
[0026]为此能够提出,覆盖函数只要其是被激活的则首先被去激活,以至于控制单元在执行原始的程序例程的情况下继续运行。这能够例如通过删除处理器寄存器或位于其中的关联关系信息实现。
[0027]在此期间,能够根据意愿来操纵覆盖存储器中的旁路例程
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1