首页 / 专利库 / 物理 / 能量 / 功函数 / 一种功能函数的数据区复用处理方法

一种功能函数的数据区复用处理方法

阅读:180发布:2020-05-13

专利汇可以提供一种功能函数的数据区复用处理方法专利检索,专利查询,专利分析的服务。并且本 发明 公开一种功能函数的数据区复用处理方法,包括如下步骤:步骤1,对源程序进行词法、语法扫描,形成语法树;提取程序的变量、函数列表,按照输入变量、输出变量、函数变量、临时变量的顺序分配数据区,同名函数只分配一个数据区实例,函数数据区按照函数输入变量、函数返回值变量顺序分配;步骤2,根据语法树,进行语义分析,形成与机器无关的二进制指令,在输出调用函数的指令前插入函数实参与形参的数据复制指令;步骤3,解释执行指令文件,调用函数前,执行数据复制指令,将实际形参值复制到该函数所分配的数据区,之后执行函数调用指令时,传入函数数据区的首地址。此种方法可简化解释器的实现并提高可靠性。,下面是一种功能函数的数据区复用处理方法专利的具体信息内容。

1.一种功能函数的数据区复用处理方法,其特征在于包括如下步骤:
步骤1,对源程序进行词法、语法扫描,形成语法树;提取程序的变量、函数列表,按照输入变量、输出变量、函数变量、临时变量的顺序分配数据区,同名函数只分配一个数据区实例,函数数据区按照函数输入变量、函数返回值变量顺序分配;
步骤2,根据语法树,进行语义分析,形成与机器无关的二进制指令,在输出调用函数的指令前插入函数实参与形参的数据复制指令;
步骤3,解释执行指令文件,调用函数前,执行数据复制指令,将实际形参值复制到该函数所分配的数据区,之后执行函数调用指令时,传入函数数据区的首地址。
2.如权利要求1所述的一种功能函数的数据区复用处理方法,其特征在于:所述步骤1中,单个变量在数据区用1个复合结构体表示,记录IEC61131-3规范定义的属性。
3.如权利要求1所述的一种功能函数的数据区复用处理方法,其特征在于:所述步骤1中,每个基本类型的变量在数据区的分配大小相同,对于复合类型,依次平铺展开为基本类型的子变量进行分配。
4.如权利要求1所述的一种功能函数的数据区复用处理方法,其特征在于:所述步骤2中,数据复制指令是记录实参变量、形参变量在数据区的序号。
5.如权利要求1所述的一种功能函数的数据区复用处理方法,其特征在于:所述步骤3中,move指令为数据复制指令,call指令为函数执行指令。

说明书全文

一种功能函数的数据区复用处理方法

技术领域

[0001] 本发明属于工业控制编程领域,特别涉及一种功能函数的数据区复用处理方法。

背景技术

[0002] IEC61131-3标准定义的结构化文本(ST)是一种是类似于Pascal的高级编程语言,特别适合复杂的应用算法设计编程。ST代码可编译为目标机器直接运行的文件,但通常在应用过程中,存在以程序组织单元(POU)为单位的在线无扰更新的需求,此时不适合使用编译型产物,需要解释执行与机器无关的二进制伪指令。ST程序中经常调用标准功能函数,函数的调用实现通常使用堆栈的方法,存在形参和实参的入栈、出栈操作,加大了解释器的设计难度,并影响了嵌入式系统运行效率。
[0003] 基于此,本案发明人深入研究功能函数的数据区的解决方案,本案由此产生。

发明内容

[0004] 本发明的目的,在于提供一种功能函数的数据区复用处理方法,通过同名函数复用数据区的方法,通过解释器程序高效率运行。
[0005] 为了达成上述目的,本发明的解决方案是:
[0006] 一种功能函数的数据区复用处理方法,包括如下步骤:
[0007] 步骤1,对源程序进行词法、语法扫描,形成语法树;提取程序的变量、函数列表,按照输入变量、输出变量、函数变量、临时变量的顺序分配数据区,同名函数只分配一个数据区实例,函数数据区按照函数输入变量、函数返回值变量顺序分配;
[0008] 步骤2,根据语法树,进行语义分析,形成与机器无关的二进制指令,在输出调用函数的指令前插入函数实参与形参的数据复制指令;
[0009] 步骤3,解释执行指令文件,调用函数前,执行数据复制指令,将实际形参值复制到该函数所分配的数据区,之后执行函数调用指令时,传入函数数据区的首地址。
[0010] 上述步骤1中,单个变量在数据区用1个复合结构体表示,记录IEC61131-3规范定义的属性。
[0011] 上述步骤1中,每个基本类型的变量在数据区的分配大小相同,对于复合类型,依次平铺展开为基本类型的子变量进行分配。
[0012] 上述步骤2中,数据复制指令是记录实参变量、形参变量在数据区的序号。
[0013] 上述步骤3中,move指令为数据复制指令,call指令为函数执行指令。
[0014] 采用上述方案后,本发明具有如下有益效果:针对解释执行的应用场景,通过功能函数数据区的复用方法,在函数执行前插入数据同步复制指令,简化了解释器的复杂度,不需要采用堆栈的方式处理形参,运行过程中数据区固定,便于离线分析确定数据区是否超限,提高了系统的可靠性。附图说明
[0015] 图1是本发明中功能函数的数据区复用过程。

具体实施方式

[0016] 以下将结合附图,对本发明的技术方案及有益效果进行详细说明。
[0017] 如图1所示,本发明提供一种功能函数的数据区复用处理方法,包括如下步骤:
[0018] 步骤1,对源程序进行词法、语法扫描,形成语法树。提取程序的变量、函数列表,按照输入变量、输出变量、函数变量、临时变量的顺序分配数据区。同名函数只分配一个数据区实例,函数数据区按照函数输入变量、函数返回值变量顺序分配。其中单个变量在数据区是用1个复合结构体表示,记录变量类型、变量值、变量是否为上升沿、下降沿、保持、常量等IEC61131-3规范定义的属性。每个基本类型的变量在数据区的分配大小是相同的。对于结构体、数组等复合类型,依次平铺展开为基本类型的子变量进行分配。
[0019] 优选地,以图1为例,该ST程序中定义了IN1[0..100]、IN2[0..100]、OUT[0..100]的数组变量、VAR1、VAR2、VAR3的单个变量,在循环语句中调用了ADD函数。ADD函数有2个输入变量和1个返回值。故数据区分配时按照程序的输入、输出、内部变量、函数数据区依次分配。各个变量在数据区用1个结构体表示,优选地,单个变量在数据区的结构体定义如下:
[0020]
[0021] 步骤2,根据语法树,进行语义分析,形成与机器无关的二进制指令。在输出调用函数的指令前插入函数实参与形参的数据复制指令。其中数据复制指令是记录实参变量、形参变量在数据区的序号。IDX(IN1[I])表示第I个输入变量IN1[I]在数据区的序号,例如IDX(IN1[0])=0。
[0022] 步骤3,解释执行指令文件,调用函数前,执行数据复制指令,将实际形参值复制到该函数所分配的数据区,之后执行函数调用指令时,传入函数数据区的首地址。优选地,move指令为数据复制指令,call指令为函数执行指令。以图1为例,相当于先执行P1=IN1[I]、P2=IN2[I]后,再执行ADD(P1,P2)功能。解释器不需要构建临时堆栈结构,而是复用函数的数据区,运行过程中数据区大小固定,避免了频繁的堆栈申请销毁、数据入栈出栈等操作。
[0023] 综合上述,本发明一种功能函数的数据区复用处理方法,针对IEC61131中定义结构化文本(ST)语言的程序组织单元(POU)中多次调用同一标准函数的情况,进行数据空间的优化,同名标准函数只分配一个公共数据区,该数据存放该函数声明的输入变量、返回值。编译形成指令时,在调用该函数的指令前插入数据复制指令,将实际形参值复制到该函数所分配的数据区,函数的执行时传入固定的数据区首地址。该方法实现了数据区的复用,不需要通过构建临时堆栈来维护函数形参的生命周期,简化了指令解释器的实现,适用于嵌入式实时系统中数据空间有限、执行效率要求高的场合。
[0024] 以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈