一種可程式語言編譯裝載系統及方法與流程
2023-12-11 19:06:57 3

本發明涉及一種可程式語言編譯裝載系統及方法,特別適用於各種工業可編程控制應用場合,能有效提高程序的執行效率。
背景技術:
傳統的工業現場使用的可編程控制器(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)中的分散處理單元中的編程模塊,也可用於其他具有用戶可編程特性的系統中。