激励用于控制工作过程的函数的方法和装置的制作方法

文档序号:6499447阅读:142来源:国知局
专利名称:激励用于控制工作过程的函数的方法和装置的制作方法
现有技术本发明源于根据独立权利要求的前序部分的激励用于控制工作过程的函数的一种方法和一种装置,尤其是在汽车中。同样地,本发明源于具有权利要求的前序部分特征的一种相应的控制器以及一种相应的用于函数激励且具有与其相关联的计算机程序的计算机和相应的计算机程序产品。
在控制器软件的函数开发中,尤其是在用于发动机控制、刹车控制、传动控制等的汽车控制器上,旁路(Bypass)应用是一种快速原型设计方法,以便开发和测试新的控制器函数。但是,在所有另外的诸如在自动化领域和机床领域内的控制器应用中,这种函数开发也是可能的。
作为开发方法,为此使用外部控制器旁路(如DE 101 06 504 A1所示)以及内部控制器旁路(如DE 102 286 10 A1所公开的)的两种应用。
在此,DE 101 06 504 A1涉及用于仿真控制器或调节器(特别是汽车控制器或调节器)的控制和/或调节函数的一种方法和一种仿真装置。为了进行仿真,所述函数被转移到外部的仿真计算机中,其中在开始仿真之前经由仿真计算机的软件接口和控制/调节器的软件接口建立数据连接。为了显著地加速控制/调节器的新的控制/调节函数的开发和编程,建议在开始仿真之前在不改变软件的情况下配置用于仿真不同控制/调节函数的软件接口。
DE 102 286 10 A1在其一侧示出用于借助至少一个旁路函数来检验控制程序的一种方法和一种装置,其中控制程序与至少一个旁路函数一起在电计算单元上被执行。通过动态链接到预定的接口来实现旁路函数的耦合。
不依赖于所响应的这两种方法和装置,为了应用性而需要控制器软件中的嵌接(Eingriffe)。该嵌接利用概念“旁路自由段”或“软件自由段(Software-Freischnitt)”来表示。旁路自由段或软件自由段精确地描述了软件函数中的位置,在所述位置上控制器变量不是通过软件程序而是经由弯路、例如经由一个旁路软件函数被写入。软件自由段是很个别的并且在正常情况下不是控制器软件程序的组成部分,因为为此消耗存储资源。
如果函数开发者需要具有软件自由段的控制器程序,则在开发部门指派之后才将这些软件自由段装入程序状态(Programmstand)。软件开发对此手工地改变相应函数的源代码,并且通过编译和连接过程创建新的控制器程序,所述控制器程序显性地被用于原型设计。
如现有技术中所实施的方法或装置的缺点在于,直到快速原型程序状态可用的过程时间较长。在此,一个重要因素是与其相联系的高的用于指定和转换软件嵌接的技术上及管理上的花费。
依照当前的知识状况,一种可比较的方法基于以下思想,即通过到子函数的跳转指令来替换存储指令(对控制器变量的写访问)。但是,对于具有混合指令组(16/32位CPU指令)的微控制器,存储指令可以是16位宽,因为寻址间接经由地址寄存器实现。该16位宽的指令不可以为调用子函数而被引用,因为直接的面向地址的子函数调用要求32位宽的跳转指令。因此,现有技术中的方法只能有条件地被应用并且只能被应用在具有纯32位指令组的微处理器中。也就是说,在存储指令具有确定位宽时,在这里强烈限制了关于函数开发的灵活性。这也适用于以下情况,即某一存储指令由于其他原因根本不允许操作,使得不能够通过到子函数的跳转指令来实现这样的占据。
在控制器软件的前面提到的函数开发中,在实验室汽车(测量位置)上或者通过相应的软件测试环境来实施软件函数的测试(模块测试)。在实验室汽车上测试的情况下,通过电信号从外部激励控制器输入端,以便观察和测量控制器和软件的相应的反应。在用于模块测试的软件环境可用的情况下,惟独要检查的软件函数在测试环境内在独立运行中被观察,而无须考虑对整体系统的反作用或横向耦合。
本发明的任务是,在运行时间上激励和测试软件程序内的在集成状态中的软件函数,并由此克服现有技术中存在的所响应的问题。
发明优点本发明源于激励用于控制工作过程的函数的一种装置和一种方法,其中所述函数动用(zurueckgreift)至少一个程序的至少一个全局变量用于控制,其中有利地设置至少一个激励函数,所述激励函数经由至少一个软件自由段来访问所述至少一个全局变量。
在此,最好在程序的运行时间上激励程序内的函数,特别是在运行时间系统(Laufzeitsystem)内实时地进行激励。
在此有利的是,给所述全局变量分配第一数据信息,并且通过对应新的激励值的第二数据信息替换该第一数据信息。
在本发明范围内优选的是,通过内部旁路来实现所述函数的激励,其中通过以下方式来实现软件自由段给所述全局变量分配地址信息,其中通过加载指令从存储装置中加载所述地址信息并且替换所述加载指令的全局变量的地址信息。
有利地,在此通过指针变量的地址信息来替换所述全局变量的地址信息,其中根据所述地址信息确定所述函数的起始地址,并且通过替换地址信息来用附加函数替换所述用于控制工作过程的函数。
最好,也可以通过以下方式来实现软件自由段,即由存储指令来响应所述全局变量,并且操作针对全局变量的存储指令,其方式是通过跳转指令替换所述存储指令,而且通过用跳转指令替换存储指令来用附加函数替换用于控制工作过程的函数。
在本发明中,因此最好使用软件自由段的“动态挂钩”(“Dynamic-Hooks”)而无无源代码更改。在此所描述的方法改变加载(Load)指令的地址信息,改变函数调用并且插入新的程序代码。该改变在已有的软件程序状态上、例如基于所针对的HEX代码修改加以实施。
此外有利的是,通过指针变量的地址信息来替换全局变量的地址信息,其中所述指针变量的地址信息位于保留的存储区域、特别是控制器中的存储装置的存储区域。
除了关于加载指令的修改,在一个扩展方案中最好规定操作针对全局变量的存储指令,其方式是通过跳转指令来替换存储指令。在此最好通过用跳转指令代替存储指令来用附加函数替换和/或扩展用于控制工作过程的函数。
根据所响应的装置以及方法,通过本发明还揭示一种包括这种装置的控制器和本发明的主题、如适合用于实施这种方法的计算机程序。对此,在计算机、特别是根据本发明的应用控制器装置或者应用PC上实施该计算机程序。在此,根据本发明的计算机程序能够存储在任意的机器可读的载体上。这种计算机可读的数据载体或者机器可读的载体可以特别地是磁盘、CD-ROM、DVD、存储棒或者每种另外的移动存储介质。同样地,存储介质、如ROM、PROM、EPROM、EEPROM或闪存以及暂时的RAM存储器等也能够被用于存储。因此,在作为本发明主题的计算机程序产品方面,存储介质或机器可读的载体的选择不应视为受到限制。
利用本发明能够快速使用并且灵活运用不同的快速原型设计方法、软件测试方法和数据校准方法。因此在不束缚软件开发能力的情况下实现软件自由段的实施。由此得到整体上更少的技术开销和管理开销,因此减少成本。同时可以支持具有混合的例如16/32位宽的CPU指令的指令组的微处理器类型。
有利地,在激活测试流程时,通过运行时间系统内的整合的测试软件独立地激励要检查的控制器函数。
根据本发明的主题的优点还在于,为了激励控制器函数不必从外部将电信号施加到控制器。另一优点是,被激励的控制器函数的所计算的输出值直接又可供实时系统使用。因此例如能够更精确地检查、测试并且必要时进一步开发控制器内的调节算法。
从说明书和权利要求的特征中得到另外的优点和有利的扩展。


下面根据附图中所示的主题更详细地说明本发明。在此,图1示出根据本发明的用于函数匹配的装置。
图2揭示确定程序中的自由接口或软件自由段的过程。
图3示出用于修改加载和/或存储指令的不同方法的概要和选择。
图4针对加载指令的优选的第一修改方法示出程序图示。
图5针对存储指令的第二修改方法示出程序图示。
图6针对存储指令的第三修改方法示出程序图示。
图7针对存储指令的第四修改方法示出程序图示。
图8示出对用于控制工作过程的函数的调用进行匹配的原理图。
在图9中示出用于绑定附加函数的Hook函数。
图10示出存储装置中关于Hook函数的存储段的示意图。
在图11中最后更详细地示出根据本发明的完整的开发过程。
图12示出内部的旁路、特别是动态链接过程。
图13揭示用于激励函数的原理14示出用于创建测试流程软件的流程图。
在图15中最后示出根据本发明的开发过程。
具体实施例方式
图1在示意图中示出具有控制器的应用装置100和应用系统101,其经由具有接口103和104的连接102相耦合。在此,该连接102可以如无线一样有线地加以实施。用105表示微处理器、特别是具有混合指令组的微处理器。106示出存储装置,所述存储装置包括地址寄存器108、数据寄存器107以及至少一个在函数方面要匹配的程序的存储区域。在此,用于实现本发明的控制装置可以被包含在应用系统中或者通过该应用系统来代表,但或者可以在使用微处理器的情况下自身被构造。同样地,用于实现本发明的存储装置被安装在控制器之外,特别地正好被安装在应用系统中。利用所示的装置能够实现根据本发明的主题。
虽然可以实现函数与外部旁路的匹配,但是有利的扩展可以在内部这样地进行匹配,使得该匹配被绑定在程序运行中并因此在不改变源代码的情况下实现软件嵌接的动态挂钩(Dynamic-Hook)。
这里描述的主题改变加载指令的地址信息,改变存储指令的内容,改变函数调用的地址信息并且插入新的程序代码。这里在实施例中,在已有的软件程序状态上基于所针对的十六进制代码修改来实施所述改变。
进一步揭示的关于本发明主题“动态软件自由段”的不同的组成部分的内容如下·确定程序位置·修改程序位置,包括修改加载/存储指令以及修改函数调用·创建附加的程序代码·绑定软件自由段代码·对存储区分段以及·用于创建程序代码的开发过程
·内部旁路·通过激励所述函数来进行软件测试下面所描述的方法基于微控制器的使用,所述微控制器的指令组是混合的并且特别地包含16/32位宽的CPU指令。作为示范性的实例,这里例如使用英飞凌的微控制器TriCore TC17xx(RISC/DSP/CPU),其是控制器的组成部分,所述控制器用于控制工作过程、特别是在汽车上的工作过程,例如用于发动机控制或者用于控制转向、传动、刹车等。
但是,所述方法也可以被应用在具有非混合指令组的微处理器上,特别是在纯32位微处理器(RISC处理器、例如PowerPC/MPC5xx)上。
原则上,在所述方法中假定编译器的代码生成器顺序地排列机器指令。这应被理解为连续的指令排列,以便将例如间接寻址的控制器变量的地址信息加载到相应的寄存器中。与此相反地,在直接寻址的变量的情况下,地址信息自身位于指令中。在大多数编译器中给出该情况。
确定程序位置(图2)对此的输出点是以十六进制代码文件的形式可供使用的控制器软件程序。作为另外的文件使用数据说明文件(例如ASAP)和连接器文件(例如ELF二进制),所述文件提供关于控制器变量和控制器函数的信息。
利用反汇编软件程序(例如一个Windows软件程序)将十六进制代码文件进行反汇编。从数据说明文件中或者从为本方法所创建的参考数据库中获取要自由截除(freizuschneidenden)的控制器变量。
根据本发明所创建的反汇编程序、例如Windows软件程序借助所查找的控制器变量的地址信息在被反汇编的程序代码中查找相应的对该变量的访问指令(加载指令/存储指令),所述指令影响变量内容。
作为Windows软件程序的该反汇编程序是在每个汇编指令之后检验寄存器内容的激励程序。如果存储指令被定位并且所加载的地址寄存器对应所查找的控制器变量的地址值或者存储指令的存储目标对应变量地址,那么就存在一个在其上改变控制器变量内容的查找位置。
如何改变在查找位置上的程序代码的方法和方式取决于控制器变量的各自的寻址方式。
这在图2中被示出。在图中用201标出控制器程序代码。202示出软件函数。箭头203用符号表示所述的用于确定存储指令的方法。用204标出变量访问的存储指令,而且该存储指令是这样的使得在直接寻址情况下存储指令的存储目标是RAM地址而在间接寻址情况下地址寄存器的内容对应RAM地址,由此就能够确定加载指令。因此,用205标出的箭头用符号表示所述的用于确定加载指令的方法。用于加载变量地址、专门地加载全局变量地址的加载指令用206来标出。
修改程序位置(图3至图8)在此,对于相应不同的寻址方式,加载指令查找位置和/或存储指令查找位置被定位,并且针对读查找位置确定查找位置位于其中的控制器函数,以便在整个程序代码中能够通过对新创建的Hook函数的函数调用来实现所有函数调用,使得控制器函数的最初的函数调用能够在相应的Hook函数内得以实现。
加载/存储指令的修改在所述的微控制器中,在最不相同的实施中存在多种不同的寻址方式。该多样性可以被减少到最小。
下面描述四种方法,其尽可能地揭示对全局变量进行写访问的可能组合。可以考虑用于代码分析的其他方法,诸如关于预设的地址寄存器的相对寻址。
对此在图3中给出关于用于修改加载和/或存储指令的不同方法的概况。存储指令st.x表明在其中st.b=存储字节,st.h=存储半字以及st.w=存储字。下面详细说明图3中所列举的四种方法。
在图4中详细示出了按照方法1的程序位置的修改。在方法1中示例性地涉及16位存储指令和间接寻址。基于所找到的存储指令的位置,在被反汇编的程序代码中对位置进行回溯,直到确定所属的加载指令。对于该方法,所找到的加载指令是重要的。该方法不仅被应用在混合指令集情况下出问题的场合,而且还被应用在由于其他原因不能够通过跳转指令来替换存储命令的场合。
在方法1中,所确定的加载指令关于后续的存储指令通过指针变量的地址信息来替换。通过开发环境、特别是Dhooks开发环境来产生该指针变量。指针变量的地址位于变量存储布局的、存储装置的保留的自由区域中。修改过的加载指令对与最初指令一样的地址寄存器进行寻址。修改过的加载指令的区别在于地址寄存器的寻址方式以及在于地址信息。
因此在图4中,在原理图示中说明方法1。在此,用401表示最初的程序代码,并且用411表示修改过的程序代码。402和406以及417和407形成控制器函数、这里为function_a()。在此,在402中或在417中示出指令或指令序列,并且在406或407中示出本身的函数性。用axx%表示对地址寄存器(例如在16位宽的情况下a0至a15)的访问,并且用dxx%表示对数据寄存器(例如在16位宽的情况下d0至d15)的访问。那么对此考察在408、409、410、413、414和415中的指令movh.a和ld.a(加载指令)以及st.x(存储指令)。在该实例中,movh.a和ld.a作为32位指令(参见412和403)。存储指令st.x被示出为16位指令(参见405),并由此在该实例中不能够通过32位跳转指令来替换。如所说的,这也适用于所有其他的在其中不能够或不期望进行这种替换的情况。那么将新的根据本发明的指令代码或程序代码403装入412,并且将加载指令改变到指针变量iB_PtrMsg_xxx(Ptr=指针)上。控制器变量的地址通过依照404的指针变量的地址来替换。稍后在四种方法之后详细说明用于创建附加程序代码或附加函数的方法。
在图5中详细描述了按照方法2的程序位置的修改。在此,针对方法1的相同的符号和缩写也适用于所有其余方法实例。在此,用501表示最初的程序代码,并且用511表示修改过的程序代码。502和506以及517和507形成控制器函数、这里为function_a()。在此,在502中或在517中示出指令或指令序列,并且在506或507中示出本身的函数性。用axx%表示对地址寄存器(例如在16位宽的情况下a0至a15)的访问,并且用dxx%表示对数据寄存器(例如在16位宽的情况下d0至d15)的访问。那么对此又考察指令movh.a和ld.a(加载指令)以及st.x(存储指令)。现在存储指令st.x被示出为32位指令(参见505),并由此在该实例中能够通过32位跳转指令来替换。那么将新的根据本发明的指令代码或程序代码503(jla跳转指令)装入505。
在方法2中涉及与间接寻址相联系的32位存储指令。32位的存储指令通过到软件Balkon(阳台)函数(balcony_M2)的决定跳转指令来替换(参见520对软件Balkon函数的调用)。在jla跳转指令的情况下将返回地址存储在地址寄存器a11中(参见521中)。在所提到的软件Balkon函数521中,地址寄存器%axx的内容通过指针变量(iB_PtrMsg_xxx)的地址值来替换,其中通过所述内容来对控制器变量进行寻址。地址寄存器%axx和先前加载的数据寄存器%dxx的索引在软件Balkon函数521中是相同的。
如果32位宽的存储指令考虑到软件自由段,则为此需要附加的程序代码。在Dhooks开发环境中产生该程序代码,并将其表示为Balkon函数。Balkon函数包含附加的初始化机制、复制机制和自由段机制,并且被用作用于改进自由段功能性的软件函数。Balkon函数被用于自由段方法2、3和4。
通过跳转指令jla,所用的数据寄存器%dxx的内容保持不变。那么在软件Balkon函数中实现经由指针的寻址,并因此将存储指令转向指针变量。存储指令st.x如在最初代码中一样写入数据。
随后,经由存储在地址寄存器a11中的返回地址,通过间接跳转依照522返回到控制器函数中。
在图6中详细描述了按照方法3的程序位置的修改。在此,相同的符号和缩写也适用于所有其余方法实例、这里特殊地适用于方法2。在此,用601表示最初的程序代码,并且用611表示修改过的程序代码。602和606以及617和607形成控制器函数、这里为function_a()。在此,在602中或在617中示出指令或指令序列,并且在606或607中示出本身的函数性。在此考察特殊的st.x(存储指令)、即st.t。现在存储指令st.t被示出为32位指令(参见605),并由此在该实例中能够通过32位函数调用(call balcony_M3)来替换。那么将新的根据本发明的指令代码或程序代码603(call函数调用)装入605。
在方法3中涉及与直接寻址618相联系的32位存储指令st.t(具有地址610的存储指令)。32位存储指令通过软件Balkon函数(balcony_m3,621)的32位函数调用(call balcony_M3,603)来替换(参见604)。软件Balkon函数621包含自由段的查询和最初状态中的存储指令。在激活自由段时不执行存储指令。因此,所述变量与控制器函数解耦。对此,根据612实现Balkon函数621的调用620。然后,经由控制器变量的地址(ecu变量的地址)619实现到控制器函数的返回622。
在图7中详细描述了按照方法4的程序位置的修改,相同的符号和缩写适用于所有其余的方法实例、这里特殊地适用于方法2。在此,用701表示最初的程序代码,并且用711表示修改过的程序代码。702和706以及717和707形成控制器函数、这里为function_a()。在此,在702中或在717中示出指令或指令序列,并且在706或707中示出本身的函数性。用%axx表示对地址寄存器的访问,并且用%dxx或%dyy表示对数据寄存器的访问。那么对此考察先前在方法中所述的指令mov、st.x(存储指令)调用和jla。存储指令st.x被示出为32位指令(参见705),并由此在该实例中能够通过32位跳转指令来替换。那么将新的根据本发明的指令代码或程序代码703(jla跳转指令)装入705。
在方法4中涉及与直接寻址(718)相联系的32位存储指令st.x(710)。32位的存储指令通过32位跳转指令(Jla balcony_M4_a)来替换。跳转指令指向利用720被调用的软件Balkon函数1(balcony_M4-a(),721)。在软件Balkon函数1 721中,先前所加载的数据寄存器%dxx的内容被缓冲存储到临时的DHooks变量(iB_TempMsg_xxx)。根据721,通过函数调用利用723来调用另一个Balkon函数(balcony_M4_b(),724)。该第二软件Balkon函数2包含如方法3中的本身的自由段。软件Balkon函数724包含对自由段的查询。在去活自由段的情况下,将临时变量iB_TmpMsg_xxx的内容回写到控制器变量中(参见725)。在激活自由段的情况下不进行回写。因此,控制器变量与控制器函数相解耦。然后,经由722返回到控制器函数。
修改函数调用(图8)针对被定位的加载/存储查找位置,确定查找位置所处的控制器函数,这利用为本方法所开发的Windows软件程序来实现,该Windows软件程序根据加载/存储指令的位置且借助参考信息来确定所述控制器函数的相应的起始和终止地址。
随后,在整个程序代码中通过对新创建的Hook函数的函数调用来替换所有对所述控制器函数的函数调用。
在相应的Hook函数内实现最初的对控制器函数的函数调用。
在图8中,由于清晰性的原因而选择与在至此的图2、4、5、6、7中的图示相同的图示,以便使得该修改图示是可比较的。用801表示最初的控制器程序代码,并用811表示各自被修改的程序代码。在此,使用一个任务列表task_list和一个相应的附加函数或子函数subfunction_x()。出于简化的目的,现在不再显性地在指令序列和本身的函数性之间进行区分(相较于图3至7)。用804表示根据图2的用于确定函数地址和函数调用的过程。依照805,function_a的地址通过hook_function_a的地址来替换。相应地,在806处通过对hook_function_a的调用来替换对function_a的函数调用。最后在807中通过对hook_function_a的调用来替换对function_a的间接的函数调用(这里作为32位指令)。在此,用nP分别表示通过替换新形成的程序代码。
用于创建附加程序代码的方法(图9)因此,对于自由段位于其中的控制器函数,可以安放Hook函数,或者安放了这种函数。在图9中对此揭示了这种Hook函数hook_function_a()和hook_function_x()的示意图。在此,用901表示控制器程序代码。902表示附加程序代码的存储区域。用903表示本身的Hook函数,在该Hook函数中用904表示有可能需要的指针变量的可能的初始化。905揭示针对特别是快速原型设计方法的软件自由段、配置和绑定的程序代码。最后,用906表示对最初的控制器函数function_a()的调用。这对于第二Hook函数hook_function_x()是可比较的,但是出于清晰性原因未再示出。
Hook函数也包含自由段机制,其控制对关于应用数据的快速原型设计方法的访问。此外,在Hook函数中必要时实施指针变量的初始化以及对本身的控制器函数的函数调用。
下面根据自由段方法来描述Hook函数的特征对于自由段方法1和2在存储指令可以被有意义地写入由指针寻址的控制器变量之前,必须对具有变量地址的指针变量进行寻址。在Hook函数中实现指针的初始化。如果自由段访问不是有效的,则初始化具有临时DHooks变量的地址的指针。在读位置上例如在对控制器变量间接寻址的情况下转到对临时变量的写访问。
对于自由段方法3和4在这两种方法中涉及控制器变量的直接寻址。不使用必须被初始化的指针。在Hook函数中有用于控制软件自由段的机制以及对最初的控制器函数的函数调用。
在该位置上,在如已经简要说明的通过跳转指令进行替换的情况下还应执行Balkon函数。提前详细描述了所述应用。如果32位宽的存储命令考虑软件自由段,则对此需要附加的程序代码。该程序代码在DHooks开发环境中被产生并且被表示为Balkon函数。Balkon函数包含附加的初始化机制、复制机制和自由段机制,并且用作用于扩展自由段函数性的软件函数。Balkon函数被应用于自由段方法2、3和4。
存储区域的分段(图10)对于自由段方法,在控制器软件程序的存储布局S1中需要存储装置的自身的存储区域。根据图10,本方法要求用于代码(Dhook-Code)S4、数据(Dhook-Data)S3和RAM(Dhook-RAM)S2的自由区域。在代码区域存有自由段函数(附加程序代码),在数据区域存有应用量,通过所述应用量来控制自由段机制。为本方法所需的指针变量和管理的RAM变量被存储在RAM变量的自由区域中。
用于创建程序代码的开发过程(图11)软件自由段代码的产生自动地通过为本方法所创建的开发环境来实现,并且在图11中再次被示明。在此,也可以自动地按照可预定的判据实现或实施在点8处的变量选择。
1.十六进制代码文件(包含例如以Intel十六进制或者Motorola-S19格式的机器代码)2.应用数据说明文件(例如包含变量和特征参数的地址和换算公式)3.ELF二进制文件(具有函数和变量的地址的连接器输出文件)4.用于将机器代码转换成可读汇编指令的程序5.被反汇编的程序代码(用作模拟器的输入)6.用于提供程序信息的转换器7.参考数据库(用于对公开索引进行解析)8.应用者完成自由段变量的选择9.关于要自由截除的控制器变量
10.程序代码模拟器(顺序地读取所有操作码并检验寄存器内容)11.自动生成的源代码(包含软件自由段的程序代码、附加函数和关于要修改的程序代码位置的信息)12.软件开发环境(控制用于产生十六进制代码和应用数据的所有过程)13.用于控制自由段的应用数据14.程序代码+自由段代码+补丁代码15.Hex/A2L合并过程(DynamicHooks部分与原始的程序代码相连接)16.应用数据说明文件(包含项目数据以及自由段应用数据)17.具有软件自由段的程序状态用于绑定软件自由段代码的方法软件自由段代码的绑定例如通过十六进制代码合并过程来实施。在该动作中,动态自由段方法的开发环境的结果(十六进制代码)被复制到最初软件程序(十六进制代码)的自由区域中。类似于内部控制器旁路方法地设计本方法,在所述内部控制器旁路方法中将来自两个分离软件开发过程的十六进制代码信息相互连接。
内部旁路(图12)包括至少一个旁路函数的旁路程序的耦合通过对控制程序中预定接口的动态链接来实施。按这种方式在控制程序的程序运行期间能够实现对位于电计算单元中的数据的访问。
图12说明旁路函数的动态连接。第一框60描述了可用于控制程序的向量表。在图中,在向量表60中可以识别第一列(向量)62和第二列(通道)64。在第一列62中包含参考,依照所述参考决定是否应激活旁路函数。在第二列64中有以下信息,即是涉及内部旁路还是涉及外部旁路。
第二框66描述函数指针的表格,所述表格包含要激活的多个旁路函数。
第三框68代表旁路业务。第四和第五框70和72代表被激活的旁路函数,并且第六框代表控制程序。
控制程序74中设置了用于旁路函数的潜在的嵌接位置。这通过激活驱动层(旁路业务)来执行。
在检验控制程序74之前,应用系统将旁路函数加载到ECU的存储器中。此外,由应用系统将对旁路函数的索引填入到函数指针表66。
在检验期间、亦即在控制程序74的运行期间,ECU中的旁路业务68根据向量表60中的项来决定哪个嵌接是有效的、亦即哪个旁路函数必须被激活并且在哪里存有对旁路函数的索引,如用箭头76所表明的。
如果潜在嵌接位置的旁路函数是激活的,则通过索引实现对其的调用(动态链接),如箭头78所说明的。旁路业务68执行两个有效的旁路函数70和72(箭头80)。利用被激活的旁路函数70和72来访问控制程序74中的某些所选出的数据82,如箭头84所说明的。
在将数据传输到旁路函数70和72时,该旁路函数70和72通过地址索引访问其输入量和参数(应用值)。从而旁路函数70和72具有对所有静态位于ECU中的数据82的读访问。
在控制程序或应用软件74传输数据时,向旁路驱动器递送一个对可激励的数据流的索引。按这种方式可以符合对数据一致性的要求。
旁路的计算以及到数据流的嵌接发生在这样的时刻,在所述时刻上在基本软件中也计算值。通过应用该触发机制和上述的通信,不形成旁路函数信号流中的滞后时间。
通过激励所述函数的软件测试本发明涉及一种软件测试方法,利用该软件测试方法在使用DynamicHooks(自动的软件自由段)方法和内部旁路(快速原型设计方法)的情况下依照应用者的预先给定而在测试环境中生成测试流程并在控制器软件内运行该测试流程。在使用DynamicHooks软件自由段方法的情况下,自由截除相应控制器函数的输入量。以一种为本方法开发的程序描述语言在为本方法所创建的开发环境中生成测试描述或时间上的测试流程。在此所产生的描述测试流程的源代码通过编译过程和连接过程被翻译成针对目标硬件(控制器)可运行的软件程序。测试流程代码的整合和执行按照内部旁路方法来实现。
运行时间系统内软件函数的激励(图13)在检查控制器函数时,自由截除所述软件函数的相应输入量(RAM变量)。通过被整合在控制器软件中的测试流程程序来激励被自由截除的RAM量。对测试流程代码的调用的调度可以在开发环境中进行规定。通过索引来实现对被自由截除的RAM变量的访问。
在图13中示意地示出这样的激励。在此,91示出相应的一个或多个控制器函数。用92(inp1,inp2,inp3)示出接口变量或输入量,其例如在另外的一个或多个软件函数中被计算并且作为系统中的全局变量是可用的。用93示出三个已经说明的软件自由段,其最好通过应用系统(特别是图1中的101)被激活。
根据测试流程软或激励函数94,激励值95(inp1s,inp2s,inp3s)或其数据信息可供用作接口变量或输入量92在自由段范畴内的替代,并且在激活自由段时被加入。
最后,用96表示控制器软件本身。
用于创建测试流程软件的方法(图14)在为本方法所开发的测试描述语言中规定测试流程。在该测试流程中将控制器函数的输入量装入已定义的状态。激励值、斜坡或曲线的不同组合可以被规定。时间特性通过描述语言内相应的软件函数来控制。
在图14中示出这种测试流程描述的实例。
图15针对本发明主题示出开发过程又用E1表示控制器软件。在E2中是测试函数和关于接口变量的信息。因此在其中也描述了测试规模亦即要测试或要激励的软件函数或函数的接口信息。E3示出自由段选择,亦即自由段变量的选择及由此自由段的软件规模。在E4中,如前面所述的Dynamik Hooks方法被定位(lokalisiert)。在E5中放置具有要测试或要激励的软件函数的被自由截除的输入量的软件状态、亦即具有软件自由段的控制器程序。
然后,在E6中创建或处理测试流程脚本、亦即用脚本语言对测试流程的测试描述。在E7中,通过转换器或代码生成器根据测试脚本创建可翻译的代码、特别是C代码。用E8表示这种所产生的代码、亦即测试流程程序代码。在E9中示出用于流程控制的库(LIB)中的库函数。
图10随后示出用于创建程序代码的软件测试开发环境、亦即十六进制代码和应用数据。在E10中也放置有编译器/连接器工具箱,由此最后在E10中产生用于控制器中测试流程的软件。在此区分E11(用于控制测试流程和变量访问的应用数据(A2L))和E12(程序代码和测试流程代码、亦即本身的测试流程软件(HEX))。
在E13中实现聚集、合并过程(A21-HEX合并过程),以产生具有整合的软件自由段和测试流程代码的项目软件。
由此最后形成具有整合的软件测试流程的控制器程序。在其中包含用E14表示的、具有项目数据或自由段数据和用于测试流程控制的应用数据的应用数据描述文件。也包含用E15表示的、具有软件自由段和测试流程代码的完成了的程序状态。
从而根据本发明,在控制器系统内在运行时间上通过激励软件函数的输入量,能够通过整合的软件测试方法和相应的装置在不同的运行点的情况下经由相应的软件嵌接或软件自由段来测试软件函数或函数,所述函数用于控制工作过程、特别是汽车中的工作过程。
权利要求
1.激励用于控制工作过程的函数的方法,其中所述函数动用至少一个程序的至少一个全局变量用于控制,其特征在于,设置至少一个激励函数,所述激励函数经由至少一个软件自由段来访问至少一个全局变量。
2.如权利要求1所述的方法,其特征在于,在所述程序的运行时间上在所述程序内实现对所述函数的激励。
3.如权利要求1所述的方法,其特征在于,在运行时间系统内实时地实现对所述函数的激励。
4.如权利要求1所述的方法,其特征在于,给所述全局变量分配第一数据信息,并且通过对应于新的激励值的第二数据信息来替换该第一数据信息。
5.如权利要求1所述的方法,其特征在于,通过内部旁路来实现对所述函数的激励。
6.如权利要求1所述的方法,其特征在于,通过以下方式实现所述软件自由段,即给所述全局变量分配地址信息,其中通过加载指令从存储装置中加载所述地址信息并且替换所述加载指令的全局变量的地址信息。
7.如权利要求6所述的方法,其特征在于,通过指针变量的地址信息来替换所述全局变量的地址信息。
8.如权利要求6所述的方法,其特征在于,根据所述地址信息确定所述函数的起始地址。
9.如权利要求6所述的方法,其特征在于,通过替换地址信息来用附加函数替换所述的用于控制工作过程的函数。
10.如权利要求1所述的方法,其特征在于,由存储指令响应所述全局变量,并且通过以下方式操作针对所述全局变量的存储指令用跳转指令替换所述存储指令。
11.如权利要求10所述的方法,其特征在于,通过用跳转指令替换存储指令来用附加函数替换所述的用于控制工作过程的函数。
12.激励用于控制工作过程的函数的装置,其中所述函数动用至少一个程序的至少一个全局变量用于控制,其特征在于,设置第一激励装置,所述第一激励装置被设计使得激活至少一个激励函数,并且设置控制装置,所述控制装置被设计使得所述控制装置产生至少一个软件自由段,其中所述所述激励函数经由所述软件自由段来访问所述至少一个全局变量。
13.具有用于激励用于控制工作过程的函数的装置的控制器,其中所述函数动用至少一个程序的至少一个全局变量用于控制,其特征在于,设置第一激励装置,所述第一激励装置被设计使得激活至少一个激励函数,并且设置控制装置,所述控制装置被设计使得所述控制装置产生至少一个软件自由段,其中所述所述激励函数经由所述软件自由段来访问所述至少一个全局变量。
14.具有存储在机器可读的载体上的程序代码的计算机程序产品,所述程序代码用于在计算机上执行所述程序时实施如权利要求1至11之一所述的方法。
15.具有程序代码的计算机程序,所述程序代码用于在计算机上执行所述程序时实施如权利要求1至11之一所述的所有步骤。
全文摘要
激励用于控制工作过程的函数的方法和装置,其中所述函数访问至少一个程序的至少一个全局变量用于控制,其特征在于,设置至少一个激励函数,该激励函数经由至少一个软件自由段来访问至少一个全局变量。
文档编号G06F11/36GK1879066SQ200480032776
公开日2006年12月13日 申请日期2004年11月4日 优先权日2003年11月5日
发明者M·瓦茨尔 申请人:罗伯特.博世有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1