CN106648681A - 一种可编程语言编译装载系统及方法 - Google Patents
一种可编程语言编译装载系统及方法 Download PDFInfo
- Publication number
- CN106648681A CN106648681A CN201611243395.3A CN201611243395A CN106648681A CN 106648681 A CN106648681 A CN 106648681A CN 201611243395 A CN201611243395 A CN 201611243395A CN 106648681 A CN106648681 A CN 106648681A
- Authority
- CN
- China
- Prior art keywords
- program
- machine
- compiling
- target
- fictitious order
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种可编程语言编译装载系统及方法。该可编程语言编译装载系统包括编译系统和执行系统;编译系统和执行系统通过通讯线缆相连;其中,编译系统包括:编辑器,对高级语言源文件进行编辑后,发送至编译器;编译器,接收编辑后的源文件,进行编译生成虚拟指令程序;虚拟机,执行虚拟指令程序;汇编器,将虚拟指令程序进一步编译为机器指令,生成目标程序;执行系统包括:加载器,通过通讯线缆下载目标程序,加载形成目标代码;执行器,执行目标代码。本发明通过对源文件进行虚拟指令转换后再生成机器指令,进行执行,既具有虚拟指令可移植的特性,能够方便在各个平台移植运行,又具有机器指令的运行速度,解决虚拟指令运行效率低的问题。
Description
技术领域
本发明涉及一种可编程语言编译装载系统及方法,特别适用于各种工业可编程控制应用场合,能有效提高程序的执行效率。
背景技术
传统的工业现场使用的可编程控制器(PLC)以及分散控制系统(DCS)中的分散处理单元,均可通过组态软件进行用户编程,用户编程软件通过对高级语言源文件进行编译,生成虚拟指令,通过通讯接口下载到控制器中,控制器通过解释虚拟指令运行组态程序。这种方法的优点是可移植性强,能够在不同硬件平台进行移植,缺点是运行效率不高,相同的计算功能,虚拟指令的运行比机器指令运行至少慢20倍。另一种编译方式是通过对高级语言直接编译为目标平台的机器指令,把编译完成的机器指令下载到目标机的处理器中运行,这种方式的优点是执行效率高,缺点是可移植性差,程序的任何改动要重新编译整个工程,同时对目标平台依赖太强,可用性较低。
发明内容
本发明的目的是为了解决现有技术中存在的缺陷,提供一种可编程语言编译装载系统,该可编程语言编译装载系统包括编译系统和执行系统;编译系统和执行系统通过通讯线缆相连;
其中,编译系统包括:
编辑器,对高级语言源文件进行编辑后,发送至编译器;
编译器,接收编辑后的源文件,进行编译生成虚拟指令程序;
虚拟机,执行虚拟指令程序;
汇编器,将虚拟指令程序进一步编译为机器指令,生成目标程序;
执行系统包括:
加载器,通过通讯线缆下载目标程序,加载形成目标代码;
执行器,执行目标代码。
上述执行系统装载于目标机内;编译系统装载于宿主机内。
加载器加载形成目标代码的方式为:加载器提供代码段加载基地址、数据段加载基地址、BSS段加载基地址和系统函数调用基地址,以函数指针形式调用加载目标程序。
本发明还提供了一种可编程语言编译装载方法,可编程语言编译装载方法将高级语言源文件先转换成虚拟指令程序,运行虚拟指令程序进行程序逻辑正确性的验证后,再将虚拟指令程序转换成机器指令程序,进行执行。
虚拟指令程序通过汇编器逐条翻译转换成机器指令程序。
可编程语言编译装载方法包括以下步骤:
(1)通过编辑器对高级语言源文件进行编辑;
(2)采用编译器对编辑后的源文件进行编译,生成虚拟指令程序,虚拟指令程序以文件形式保存;
(3)虚拟机执行虚拟指令程序,验证编辑程序的正确性;如果不正确,进行步骤(1),如果正确,则进行步骤(4);
(4)选择目标平台,汇编器将虚拟指令程序进一步编译为目标平台的机器指令,生成目标程序,以文件形式保存;
(5)把目标程序通过通讯线缆下载到目标机内;
(6)目标机内的加载器提供代码段加载基地址、数据段加载基地址、BSS段加载基地址和系统函数调用基地址,以函数指针形式调用加载目标程序,形成目标代码;
(7)执行器执行目标代码。
本发明相比现有技术具有以下优点:
1、最终编译后进行执行的目标指令是机器指令,运行效率高,比传统虚拟指令效率提高至少10倍,非常适合应用在对运行效率要求较高的场合。
2、对源文件首先编译生成的虚拟指令,具有较强的可移植特性,相同的高级语言源程序无需修改,即可根据不同的硬件平台逐条编译成不同目标平台下的机器指令。
3、且编译的目标程序的执行与内存地址无关,只需要加载器提供代码段加载基地址、数据段加载基地址、BSS段加载基地址和函数调用基地址即可,程序加载执行与目标平台耦合性低,可即时编译即时运行。
4、本发明通过对高级语言源文件进行虚拟指令转换后再生成机器指令,进行执行,既具有虚拟指令可移植的特性,能够方便在各个平台移植运行,又具有机器指令的运行速度,解决虚拟指令运行效率低的问题。
附图说明
图1为本发明可编程语言编译装载系统的结构框图;
图2为本发明可编程语言编译装载方法的流程图。
图中,101-编译系统,102-执行系统,103-通讯线缆,104-编辑器,105-编译器,106-虚拟指令,107-汇编器,108-虚拟机,109-目标程序,110-加载器,111-执行器。
具体实施方式
下面结合附图对本发明进行详细说明。
如图1所示,本发明可编程语言编译装载系统由编译系统101和执行系统102构成,编译系统101和执行系统102通过通讯线缆103相连。其中,编译系统101包括编辑器104、编译器105、汇编器107和虚拟机108;执行系统102包括加载器110和执行器111。
编辑器104输出编辑后的源文件,编译器105接收,编译输出虚拟指令106,由汇编器107和虚拟机108接收,汇编器107输出目标程序109后,通过通讯线缆103由加载器110加载生成目标代码后,执行器111执行。
本发明可编程语言编译装载系统的编译及装载方法如下:编辑器104对高级语言(C语言等)源文件进行编辑,由编译器105编译成虚拟指令代码,虚拟指令代码可由虚拟机108解释执行,验证程序逻辑的正确性;汇编器107把虚拟指令106进一步编译为各硬件平台的目标程序109;目标程序109通过通讯线缆103下载到执行系统102,由加载器110加载目标代码,最终由执行器111执行。目标程序109的执行与绝对内存位置无关,加载器110加载时仅需提供代码段加载基地址、数据段加载基地址、BSS段加载基地址和系统函数调用基地址即可。
一种具体实现方式包括如下步骤:
步骤1)以C语言为例,在C语言编辑环境中,通过编辑器104对源程序进行编辑,使用的目标平台系统函数通过函数号进行调用,可预先在编译环境中定义目标平台所有的系统函数。
步骤2)在步骤1)中编辑完成后,调用编译器105,对源文件进行编译,编译具体过程分为预编译、生成抽象语法树、生成虚拟指令,虚拟指令文件是该步骤的产物。
步骤3)如果需要仿真执行,根据步骤2)生成的虚拟指令106调用虚拟机108程序,验证逻辑程序的正确性,如果程序逻辑有错误,回到步骤1)对源文件进行重新编辑;如果正确,进入步骤4)
步骤4)根据步骤2)生成的虚拟指令,调用汇编器107生成目标平台的机器码指令,即由该汇编器107的机器码生成程序进行逐条翻译虚拟指令转换为机器指令,同时所有指令执行都采用相对地址偏移,即程序执行与内存绝对地址无关,包括全局数据段的存储和引用都采用相对地址,系统函数的调用也采用相对地址偏移的方式,该步骤生成的目标程序以文件形式存放。
步骤5)通过编译机器(即宿主机)与目标机器(即目标机)之间的通讯接口(串行通讯或者网络通讯接口)把目标程序下载到目标机器中。
步骤6)目标机器收到目标程序后,调用加载器110进行程序加载操作,程序加载过程需要提供目标程序运行的基地址,包括代码段加载基地址、数据段加载基地址、BSS段加载基地址和函数调用列表基地址。
步骤7)执行器111执行程序,目标代码与系统所有的交互采用函数调用方式实现,避免了每次运算含有中间寄存变量的问题。
本发明可编程语言编译及装载方法可用于可编程控制器(PLC)以及分散控制系统(DCS)中的分散处理单元中的编程模块,也可用于其他具有用户可编程特性的系统中。
Claims (6)
1.一种可编程语言编译装载系统,其特征在于:所述可编程语言编译装载系统包括编译系统和执行系统;所述编译系统和执行系统通过通讯线缆相连;
所述编译系统包括:
编辑器,对高级语言源文件进行编辑后,发送至编译器;
编译器,接收编辑后的源文件,进行编译生成虚拟指令程序;
虚拟机,执行虚拟指令程序;
汇编器,将虚拟指令程序进一步编译为机器指令,生成目标程序;
所述执行系统包括:
加载器,通过通讯线缆下载目标程序,加载形成目标代码;
执行器,执行目标代码。
2.根据权利要求1所述的可编程语言编译装载系统,其特征在于:所述执行系统装载于目标机内;所述编译系统装载于宿主机内。
3.根据权利要求1所述的可编程语言编译装载系统,其特征在于:所述加载器加载形成目标代码的方式为:所述加载器提供代码段加载基地址、数据段加载基地址、BSS段加载基地址和系统函数调用基地址,以函数指针形式调用加载目标程序。
4.一种可编程语言编译装载方法,其特征在于:所述可编程语言编译装载方法将高级语言源文件先转换成虚拟指令程序,运行虚拟指令程序进行程序逻辑正确性的验证后,再将虚拟指令程序转换成机器指令程序,进行执行。
5.根据权利要求4所述的可编程语言编译装载方法,其特征在于:所述虚拟指令程序通过汇编器逐条翻译转换成机器指令程序。
6.根据权利要求4所述的可编程语言编译装载方法,其特征在于:所述可编程语言编译装载方法包括以下步骤:
(1)通过编辑器对高级语言源文件进行编辑;
(2)采用编译器对编辑后的源文件进行编译,生成虚拟指令程序,虚拟指令程序以文件形式保存;
(3)虚拟机执行虚拟指令程序,验证编辑程序的正确性;如果不正确,进行步骤(1),如果正确,则进行步骤(4);
(4)选择目标平台,汇编器将虚拟指令程序进一步编译为目标平台的机器指令,生成目标程序,以文件形式保存;
(5)把目标程序通过通讯线缆下载到目标机内;
(6)目标机内的加载器提供代码段加载基地址、数据段加载基地址、BSS段加载基地址和系统函数调用基地址,以函数指针形式调用加载目标程序,形成目标代码;
(7)执行器执行目标代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611243395.3A CN106648681A (zh) | 2016-12-29 | 2016-12-29 | 一种可编程语言编译装载系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611243395.3A CN106648681A (zh) | 2016-12-29 | 2016-12-29 | 一种可编程语言编译装载系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106648681A true CN106648681A (zh) | 2017-05-10 |
Family
ID=58835925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611243395.3A Pending CN106648681A (zh) | 2016-12-29 | 2016-12-29 | 一种可编程语言编译装载系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106648681A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109766268A (zh) * | 2018-12-17 | 2019-05-17 | 南瑞集团有限公司 | 一种顺序汇编指令程序验证方法与系统 |
CN109976760A (zh) * | 2017-12-27 | 2019-07-05 | 北京东土科技股份有限公司 | 一种图形语言的交叉编译方法及交叉编译器 |
CN110471670A (zh) * | 2019-08-20 | 2019-11-19 | 杭州和利时自动化有限公司 | 一种编译器、编译方法和追踪方法及dcs控制器 |
CN111309308A (zh) * | 2020-02-27 | 2020-06-19 | 思客云(北京)软件技术有限公司 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
CN111857033A (zh) * | 2020-08-07 | 2020-10-30 | 深圳市派姆智能机器有限公司 | 一种可编程控制器的编译系统 |
CN112506519A (zh) * | 2020-12-15 | 2021-03-16 | Oppo广东移动通信有限公司 | 应用程序的编译方法、移动终端及服务器 |
CN113485228A (zh) * | 2021-07-19 | 2021-10-08 | 深圳市汇川技术股份有限公司 | 可编程逻辑控制器的混合编译方法、存储介质及程序产品 |
CN115688708A (zh) * | 2023-01-03 | 2023-02-03 | 江西曼荼罗软件有限公司 | 一种适用多种操作系统的病历编辑器控制方法及系统 |
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
WO2023124543A1 (zh) * | 2021-12-27 | 2023-07-06 | 清华大学 | 用于大数据的数据处理方法和数据处理装置 |
CN116661757A (zh) * | 2023-07-26 | 2023-08-29 | 北京乐研科技股份有限公司 | 一种程序模块化的文件优先编译系统和方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1900905A (zh) * | 2005-07-24 | 2007-01-24 | 华为技术有限公司 | 测试描述语言的实现方法及其装置 |
CN101013377A (zh) * | 2007-01-12 | 2007-08-08 | 中山大学 | 一种Java Processor启动时类装载方法 |
CN101226569A (zh) * | 2007-01-19 | 2008-07-23 | 国际商业机器公司 | 在虚拟机中验证代码模块的方法及装置 |
CN103412784A (zh) * | 2013-08-23 | 2013-11-27 | 东南大学 | 大型火电机组热力计算模型的虚拟控制集成方法 |
WO2015123956A1 (zh) * | 2014-02-19 | 2015-08-27 | 华为技术有限公司 | 一种数据处理方法及装置 |
-
2016
- 2016-12-29 CN CN201611243395.3A patent/CN106648681A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1900905A (zh) * | 2005-07-24 | 2007-01-24 | 华为技术有限公司 | 测试描述语言的实现方法及其装置 |
CN101013377A (zh) * | 2007-01-12 | 2007-08-08 | 中山大学 | 一种Java Processor启动时类装载方法 |
CN101226569A (zh) * | 2007-01-19 | 2008-07-23 | 国际商业机器公司 | 在虚拟机中验证代码模块的方法及装置 |
CN103412784A (zh) * | 2013-08-23 | 2013-11-27 | 东南大学 | 大型火电机组热力计算模型的虚拟控制集成方法 |
WO2015123956A1 (zh) * | 2014-02-19 | 2015-08-27 | 华为技术有限公司 | 一种数据处理方法及装置 |
Non-Patent Citations (5)
Title |
---|
(美)达尔文(DARWUB,F.I.): "《java经典实例(第二版)》", 28 February 2009 * |
戴明桢等编著: "《TMS320C54X DSP结构、原理及应用 (第二版)》", 31 August 2007, 北京航空航天大学出版社 * |
罗庆生: "《仿生四足机器人技术》", 30 April 2016, 北京理工大学出版社 * |
郭伟等: "让你的java程序飞起来", 《软件工程师》 * |
陈赜主编: "《ARM嵌入式技术实践教程》", 28 February 2005, 北京航空航天大学出版社 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976760A (zh) * | 2017-12-27 | 2019-07-05 | 北京东土科技股份有限公司 | 一种图形语言的交叉编译方法及交叉编译器 |
CN109766268A (zh) * | 2018-12-17 | 2019-05-17 | 南瑞集团有限公司 | 一种顺序汇编指令程序验证方法与系统 |
CN109766268B (zh) * | 2018-12-17 | 2019-10-25 | 南瑞集团有限公司 | 一种顺序汇编指令程序验证方法与系统 |
CN110471670A (zh) * | 2019-08-20 | 2019-11-19 | 杭州和利时自动化有限公司 | 一种编译器、编译方法和追踪方法及dcs控制器 |
CN111309308A (zh) * | 2020-02-27 | 2020-06-19 | 思客云(北京)软件技术有限公司 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
CN111857033A (zh) * | 2020-08-07 | 2020-10-30 | 深圳市派姆智能机器有限公司 | 一种可编程控制器的编译系统 |
CN112506519A (zh) * | 2020-12-15 | 2021-03-16 | Oppo广东移动通信有限公司 | 应用程序的编译方法、移动终端及服务器 |
CN113485228A (zh) * | 2021-07-19 | 2021-10-08 | 深圳市汇川技术股份有限公司 | 可编程逻辑控制器的混合编译方法、存储介质及程序产品 |
WO2023124543A1 (zh) * | 2021-12-27 | 2023-07-06 | 清华大学 | 用于大数据的数据处理方法和数据处理装置 |
CN115688708A (zh) * | 2023-01-03 | 2023-02-03 | 江西曼荼罗软件有限公司 | 一种适用多种操作系统的病历编辑器控制方法及系统 |
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
CN116661757A (zh) * | 2023-07-26 | 2023-08-29 | 北京乐研科技股份有限公司 | 一种程序模块化的文件优先编译系统和方法 |
CN116661757B (zh) * | 2023-07-26 | 2023-10-03 | 北京乐研科技股份有限公司 | 一种程序模块化的文件优先编译系统和方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648681A (zh) | 一种可编程语言编译装载系统及方法 | |
CN108415719B (zh) | 代码热更新方法和装置、存储介质、处理器及终端 | |
CN111736954B (zh) | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 | |
US8464230B2 (en) | Methods and systems to implement non-ABI conforming features across unseen interfaces | |
US9047101B2 (en) | Method for compiling an intermediate code of an application | |
CN115185539B (zh) | 一种生成可执行动态链接库文件方法、装置及存储介质 | |
CN106737676A (zh) | 一种基于脚本可二次开发的工业机器人编程系统 | |
US20130211545A1 (en) | Embedded Multi-Processor Parallel Processing System and Operating Method for Same | |
CN106020905A (zh) | 一种微控制器固件开发与更新的方法及系统 | |
CN111316227B (zh) | 一种调试应用程序的方法及设备 | |
CN114217886A (zh) | 一种函数调用方法、计算设备及存储介质 | |
CN105373411A (zh) | 一种用于星载数字信号处理器的在轨编程系统及设计方法 | |
CN107340995B (zh) | 一种牵引控制应用软件开发系统及对平台无关代码的优化编译方法 | |
CN108121285B (zh) | 基于连续功能图的应用软件协同编译方法及装置 | |
KR102063966B1 (ko) | Plc 명령어 컴파일 최적화 방법 | |
US6928641B1 (en) | Method and system for far branch and call instructions | |
CN102508445B (zh) | 一种智能算法处理系统和方法 | |
CN102508691A (zh) | 一种图形语言程序的有序分解方法及有序分解器 | |
CN107203380A (zh) | 一种sfc程序解释运行方法及装置 | |
CN114546409A (zh) | 一种编译产物与源码隔离的方法、系统及存储介质 | |
CN1936746A (zh) | 基于arm的嵌入式数控系统g代码解释器 | |
US10088834B2 (en) | Control system having function for optimizing control software of numerical controller in accordance with machining program | |
CN104281443A (zh) | 利用tcm实现代码、数据替换的方法 | |
CN113535230B (zh) | 一种工程源码动态自适应不同硬件资源的方法及系统 | |
CN109062556A (zh) | 一种多返回值的函数编程系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170510 |
|
RJ01 | Rejection of invention patent application after publication |