用于生成源代码的方法和计算机系统技术方案

技术编号:36866809 阅读:56 留言:0更新日期:2023-03-15 19:14
本发明专利技术涉及一种用于从框图的一个或多个块生成源代码的方法,该框图包括至少两个块和两个块之间的至少一个信号连接。源代码的生成包括将框图转换为中间表示,逐步优化中间表示并将优化的中间表示编译成源代码。根据本发明专利技术,已经在转换期间识别并且最小化等值赋值,使得在后续的优化步骤中根本不必考虑这些等值赋值。本发明专利技术还涉及一种用于配置控制器的方法、一种计算机程序产品以及一种计算机系统。一种计算机程序产品以及一种计算机系统。一种计算机程序产品以及一种计算机系统。

【技术实现步骤摘要】
用于生成源代码的方法和计算机系统


[0001]本专利技术涉及从框图生成可执行代码,尤其是用于给控制器编程。

技术介绍

[0002]控制器用于大量应用中,以检测过程的物理参数和/或借助连接的执行器影响过程;这例如可以是制动过程的防抱死控制。决定过程动态特性的时间常数通常以1ms或更短的循环时间为条件,因此需要控制器的实时能力。出于成本原因,控制器通常具有存储器很小且计算能力有限的微控制器,因此可执行代码的大小和效率非常重要。
[0003]为了加快控制器的设计,控制策略通常借助计算环境如MATLAB/Simulink中的模型来开发。因此,可以首先仿真过程和/或控制器或概括来说控制器的特性并检查希望特性的存在。模型尤其可以是框图,其包括执行诸如计算的操作的块,一个块例如能够从多个输入信号计算一个输出信号。通常,框图是循环执行的,所有块都持续保存在存储器中,每个块在每个时间步长中执行一次。尤其是一个块可以在每个时间步长中对于来自前置块的输入信号应用一个或多个操作,以便生成当前步长的输出信号。框图附加地也可以包括用于描述离散特性的子模型,在该子模型中定义一定数量的或多个状态和过渡条件。可以借助代码生成器直接从模型中生成用于对控制器进行编程的源代码。例如可从文件“Production Quality Code Generation from Simulink Block Diagrams”中(计算机辅助控制系统设计1999年国际研讨会论文集,夏威夷Kohala海岸,由H.Hanselmann等人撰写)已知用于生成生产质量源代码的代码生成器。
[0004]当以框图的形式描述模型时,各个块通过定向连接或信号连接联接以便交换数据或转发信号,代码生成的一种常见方法是为块的每个输出在源代码中创建一个变量。但这样做的缺点是,通常最初创建的块变量比实际需要的要多。通过随后的优化可以减小块变量的数量或概括而言代码大小。因此,从EP2418577A1已知将框图转换成中间表示并且对该中间表示应用至少一种优化,以生成优化的中间表示。本身由编译器构造已知的多种其它优化可以依次应用,以生成进一步优化的中间表示。然后从优化的中间表示中尤其是生成C代码。
[0005]由于每次优化都会导致中间表示发生变化,因此代码整体优化的程度可以取决于优化步骤的顺序。位于两个处理块之间的函数调用——关于其本地没有其它信息可用——会使优化无法进行。在多组元变量的情况下,这种优化缺点具有特别大的影响,因为即使是简单的复制也可能伴随着高存储器消耗和相当长的执行时间。例如向量或矩阵的复制可以作为对全部的变量的赋值而通过在循环中的赋值或通过逐个元素的赋值进行,使得在中间表示中即使是本身相同的操作也不能总是被识别出来。
[0006]在写到特殊介质(例如尤其是具有有限可写入次数的闪存)上的情况下,US10078500B2建议:检查块组是否通过仅对多组元变量的部分的赋值操作而发生值改变,然后仅对各个相关的元素生成写入指令。因此,识别特殊块组并且适合于该状况地修改生成的代码。但对于许多不属于此特殊方案的块组或操作来说,可能会出现存储器需求增加
和执行时间长于实际需要的情况。

技术实现思路

[0007]在此背景下,本专利技术的任务是进一步改进现有技术并且尤其是辅助生成更精简的源代码,同时避免不希望的副作用。
[0008]所述任务通过根据权利要求1所述的用于生成源代码的方法、根据权利要求14所述的计算机程序产品和根据权利要求15所述的计算机系统来解决。有利的扩展方案是从属权利要求的技术方案。
[0009]本专利技术提供一种用于从框图的一个或多个块生成源代码的方法,该框图包括至少两个非虚拟块和在两个非虚拟块之间的至少一个信号连接,源代码的生成包括将框图转换为中间表示,逐步优化中间表示并将优化的中间表示编译成源代码,其中,非虚拟块的转换包括创建块输出变量的关联(Bezug)。根据本专利技术,对于具有访问多组元变量的第一块的转换包括检查由该块和一个相邻块组成的块对是否具有等值赋值(或者说等值分配、wertgleiche Zuweisung),所述块对由第一块和其前置块或由第一块和其后续块组成,如果第一块的多组元变量的至少一部分不改变地复制到后续块的多组元变量的一部分中,则存在等值赋值。如果存在等值赋值,则替换变量关联,在替换变量关联中第一块的变量的所述部分的关联被后续块的变量的相应部分的关联替换,或者第一块的输出变量的关联被数据存储

变量的关联替换。此外,转换包括删除如下赋值,在所述赋值中在两边存在同一变量的关联。
[0010]通过信号连接可以传输数据或信号;在此第一块输出一个值或根据定义输出多个相关值并且第二块接收这些值并在确定第二块的一个或多个相关输出值时考虑它们。信号可以包含标量变量和/或结构化数据类型如数组,例如在总线中是这种情况。如果一个块包括访问多组元变量,则节省这些变量可以显著节省存储器空间和执行时间,例如通过不在代码中生成用于复制变量的各个组元或元素的指令并且因此不必在运行时执行它们。多组元变量可以是包括同一数据类型的多个变量的向量、包括多个向量的矩阵、包括任意数据类型的多个变量的结构或结构的向量或矩阵。
[0011]转换步骤可以包括多个子步骤,例如检查多个规则并附加进一步的代码生成信息。根据本专利技术的优化原则上可以在转换的任何中间步骤中进行。在中间表示中,各个块已被编译成具有固定执行顺序的指令,由此结构在语义上表示文本编程语言(相应于C代码)。不变地复制的变量也可以是常量。
[0012]“虚拟块”是指仅用于构建框图但对仿真没有直接影响的块。例如将多个信号组合成一个虚拟向量或提取虚拟向量的一个元素信号的Mux

或Demux块(复用器或解复用器块)就是虚拟块。计算输出值和/或至少对信号的部分进行赋值的处理块构成非虚拟块。块的关联尤其可以是块的名称。块变量可以在块中明确定义或自动生成,例如借助信号连接,在其中为块的输出信号适宜的是生成块变量,即块输出变量。块变量的标识符或名称可以固定预定或借助生成规则定义。因此,块输出变量的标识符可以包括块的名称和/或信号所源自的块中的端口的名称。由于根据本专利技术跟踪框图中的信号流并且不仅仅是比较中间表示的变量名称,因此优化可以独立于命名惯例或生成规则。
[0013]有利的是,根据本专利技术的方法识别不同的块对或块组和引起等值赋值的块变量并
且分别覆盖所识别的块对中的变量之一,以引起相同变量或相同变量部分之间的赋值,在此情况下在生成中间表示时根本不必创建它们,或者将相同的值赋给相同变量,从而省略所述变量中的至少一个。由此不仅在整体上生成更高效的代码,而且还加速了中间表示的优化,因为从一开始就需考虑更少的变量或代码模式。
[0014]优选地,针对以下块类型中的一种或多种检查等值赋值:
[0015]从数据存储

变量进行读取的DataStore

Read

块;
[0016]向数据存储<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.用于从框图的一个或多个块生成源代码的方法,该框图包括至少两个非虚拟块和在两个非虚拟块之间的至少一个信号连接,源代码的生成包括将框图转换为中间表示,逐步优化中间表示并将优化的中间表示编译成源代码,其中,非虚拟块的转换包括创建块输出变量的关联,其中,对于具有访问多组元变量的第一块的转换包括检查由该块和一个相邻块组成的块对是否具有等值赋值,所述块对要么由第一块和第一块的前置块组成、要么由第一块和第一块的后续块组成,如果第一块的多组元变量的至少一部分被不改变地复制到后续块的多组元变量的一部分中,则存在等值赋值,其中,如果存在等值赋值,则替换变量关联,在其中要么第一块的变量的所述部分的关联被后续块的变量的相应部分的关联替换,要么第一块的输出变量的关联被数据存储

变量的关联替换,并且其中,转换包括删除如下赋值,在所述配置中在两边存在同一变量的关联。2.根据权利要求1所述的方法,其特征在于,针对以下块类型中的一种或多种检查等值赋值:从数据存储

变量进行读取的DataStore

Read

块、向数据存储

变量进行写入的DataStore

Write

块、选择性地将一个输出与多个输入之一连接的Switch

块、模型化向总线的输出的Bus

Outport

块、模型化输出的Outport

块和/或将输入信号延迟一个时间步长后重新输出的Delay

块,其中,在DataStore

Read

块的情况下,将该DataStore

Read

块与后续块一起加以考虑,并且在存在等值赋值时,将DataStore

Read

块的输出变量的关联通过数据存储

变量的相应部分的关联替换,和/或在DataStore

Write

块、Switch

块、Bus

Outport

块、Outport

块和/或Switch

块的情况下,将相应块与前置块一起加以考虑,并且在存在等值赋值时,将前置块的输出变量的关联通过第一块的变量的关联替换。3.根据权利要求1或2中任一项所述的方法,其特征在于,一个框图包括多个块,其块类型相应于待检查等值赋值的块类型,并且对于所述多个块中的每个块根据块类型进行等值赋值检查并且在存在等值赋值时,替换变量关联。4.根据前述权利要求中任一项所述的方法,其特征在于,所述多组元变量是包括同一数据类型的多个变量的向量、包括多个向量的矩阵、包括任意数据类型的多个变量的结构或结构的向量。5.根据前述权利要求中任一项所述的方法,其特征在于,框图是分层定义的,较高层级中的一个块能够包括较低层级的多个块,较低层级的多个块分配给较高层级的一个块,并且如果对DataStore

Read

块检查等值赋值,则在综合性的分层块、尤其是在原子性分层块中搜索访问同一数据存储

变量的DataStore

Write

块。6.根据权利要求5所述的方法,其特征在于,如果在所述综合性的分层块中找到访问同一数据存储

变量的DataStore

Read

块和DataStore

Write

块,则检查所述DataStore

Read

块和DataStore

Write

块是否至少部分地在信号流中连接,使得数据存储

变量的被读入DataStore

Read

块中的部分与数据存储

变量的在DataStore

Write

块中被写入的部分具有非空交集,其中,至少一个块位于DataStore

Read

块和DataStore

Write

块之间的信号流中,一个或多个位于其间的块包括至少一个非虚拟处理块,该处理块处理输入变量以生成输出变量,并且作为附加条件检查所述一个或多个位于其间的块是否具有如下处理顺序,使得所述至少一个处理块在DataStore

Write

块之前执行,并且如果满足所述附加条件,则将DataStore

Read

块的输出变量的与交集相对应的部分通过数据存储

变量的与交集相对应的部分替换。
7.根据权利要求5至6中任一项所述的方法,其特征在于,如果最...

【专利技术属性】
技术研发人员:M
申请(专利权)人:德斯拜思有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1