国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種編譯函數(shù)類型pou對(duì)象的方法

      文檔序號(hào):9396269閱讀:1200來源:國知局
      一種編譯函數(shù)類型pou對(duì)象的方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及程序編譯技術(shù)領(lǐng)域,尤其涉及一種編譯函數(shù)類型P0U(PrOgramOrganizat1n Unit,程序組織單元)對(duì)象的方法。
      【背景技術(shù)】
      [0002]在工業(yè)控制領(lǐng)域經(jīng)常涉及到將用戶使用標(biāo)準(zhǔn)的編程語言編寫的控制程序轉(zhuǎn)換成工業(yè)設(shè)備(例如工業(yè)控制器等)能夠執(zhí)行的程序指令,即所謂的程序編譯過程。所使用的高級(jí)語言一般為工業(yè)控制領(lǐng)域的相關(guān)標(biāo)準(zhǔn)確定的編程語言,例如廣泛適用的IEC 61131-3規(guī)定的FBD、LD、SFC、ST、IL等編程語言。用戶使用這些面向應(yīng)用的編程語言編寫適合特定工業(yè)場景的控制邏輯和其它相關(guān)邏輯,通過編譯器的編譯生成目標(biāo)代碼,并通過通信等手段將其載入至工業(yè)設(shè)備進(jìn)行執(zhí)行。
      [0003]在編譯器將用戶使用工業(yè)標(biāo)準(zhǔn)編程語言編寫的控制程序進(jìn)行編譯翻譯成工業(yè)設(shè)備直接執(zhí)行的目標(biāo)代碼時(shí),關(guān)注程序邏輯的同時(shí),更應(yīng)根據(jù)不同的工業(yè)設(shè)備產(chǎn)生不同的目標(biāo)代碼。特別是當(dāng)編譯函數(shù)以及函數(shù)調(diào)用程序邏輯時(shí),編譯器需要依賴實(shí)際面對(duì)的工業(yè)設(shè)備的加載或執(zhí)行環(huán)境以及提供的指令結(jié)構(gòu)。在控制器中調(diào)用程序時(shí),需要進(jìn)行入棧與出棧的動(dòng)作,程序中調(diào)用函數(shù)對(duì)象時(shí),需要再次進(jìn)行入棧與出棧的動(dòng)作,更甚至當(dāng)函數(shù)允許嵌套調(diào)用時(shí),入棧與出棧的動(dòng)作進(jìn)行的更頻繁。故而導(dǎo)致對(duì)控制系統(tǒng)堆??臻g的影響較大,存在溢出的風(fēng)險(xiǎn),對(duì)現(xiàn)場存在安全隱患。

      【發(fā)明內(nèi)容】

      [0004]本發(fā)明提供了一種編譯函數(shù)類型POU對(duì)象的方法,能夠降低與真實(shí)控制器之間的耦合,不依賴于控制器本身堆棧,去除控制器本身堆??臻g的大小對(duì)編譯的影響,降低堆棧溢出的風(fēng)險(xiǎn)。
      [0005]本發(fā)明提供了一種編譯函數(shù)類型POU對(duì)象的方法,包括:
      [0006]分配一片固定內(nèi)存作為函數(shù)類實(shí)例區(qū),所述類實(shí)例區(qū)用于編譯函數(shù)對(duì)象時(shí)使用的模擬堆棧空間;
      [0007]分配函數(shù)對(duì)象的參數(shù)到所述類實(shí)例區(qū);
      [0008]調(diào)用已編譯的函數(shù)對(duì)象。
      [0009]優(yōu)選地,所述類實(shí)例區(qū)為由控制器固定分配的或編譯時(shí)分配的一片固定內(nèi)存或由編譯器分配的一片固定內(nèi)存。
      [0010]優(yōu)選地,所述分配一片固定內(nèi)存作為函數(shù)類實(shí)例區(qū)包括:
      [0011]依據(jù)函數(shù)允許的最大調(diào)用層數(shù),分配相應(yīng)數(shù)量的函數(shù)類實(shí)例區(qū);
      [0012]依據(jù)函數(shù)語句的最大復(fù)雜度確定每個(gè)函數(shù)類實(shí)例區(qū)的大小。
      [0013]優(yōu)選地,所述依據(jù)函數(shù)語句的最大雜度確定每個(gè)函數(shù)類實(shí)例區(qū)的大小具體為:
      [0014]以所述函數(shù)語句的輸入、輸出引腳的最大數(shù)目和最長表達(dá)式包含的操作符數(shù)目之和確定每個(gè)函數(shù)類實(shí)例區(qū)的大小。
      [0015]優(yōu)選地,不同調(diào)用層數(shù)的函數(shù)分配于不同的類實(shí)例區(qū)。
      [0016]優(yōu)選地,所述分配函數(shù)對(duì)象的參數(shù)到所述類實(shí)例區(qū)具體為:
      [0017]函數(shù)對(duì)象的參數(shù)按照參數(shù)描述表的順序分配類實(shí)例區(qū)中的內(nèi)存。
      [0018]優(yōu)選地,所述調(diào)用已編譯的函數(shù)對(duì)象包括:
      [0019]將函數(shù)對(duì)象的引腳參數(shù)入棧;
      [0020]翻譯函數(shù)對(duì)象的執(zhí)行語句;
      [0021]將函數(shù)對(duì)象的引腳參數(shù)出棧,生成賦值語句。
      [0022]優(yōu)選地,所述將函數(shù)對(duì)象的引腳參數(shù)入棧包括:
      [0023]將函數(shù)對(duì)象輸入?yún)?shù)關(guān)聯(lián)的數(shù)據(jù)通過模擬入棧的方式,賦值到函數(shù)相關(guān)引腳參數(shù)的內(nèi)存;
      [0024]將函數(shù)對(duì)象輸出參數(shù)關(guān)聯(lián)的數(shù)據(jù)通過模擬入棧的方式,賦值到函數(shù)相關(guān)引腳參數(shù)的內(nèi)存。
      [0025]優(yōu)選地,所述將函數(shù)對(duì)象的引腳參數(shù)出棧,生成賦值語句具體為:
      [0026]將輸出參數(shù)賦值給函數(shù)調(diào)用語句的變量。
      [0027]由上述方案可知,本發(fā)明提供的一種編譯函數(shù)類型POU對(duì)象的方法,通過分配一片固定內(nèi)存作為函數(shù)的類實(shí)例區(qū),用于編譯函數(shù)對(duì)象時(shí)使用的模擬堆??臻g,使得函數(shù)對(duì)象的參數(shù)的分配以及調(diào)用已編譯的函數(shù)對(duì)象均在分配的類實(shí)例區(qū)中完成,因此能夠降低與真實(shí)控制器之間的耦合,不依賴于控制器本身堆棧,去除控制器本身堆??臻g的大小對(duì)編譯的影響,降低堆棧溢出的風(fēng)險(xiǎn)。
      【附圖說明】
      [0028]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
      [0029]圖1為本發(fā)明公開的一種編譯函數(shù)類型POU對(duì)象的方法的流程圖;
      [0030]圖2為本發(fā)明公開的調(diào)用已編譯的函數(shù)對(duì)象的流程圖;
      [0031]圖3為本發(fā)明公開的程序調(diào)用函數(shù)的編譯過程示意圖;
      [0032]圖4為本發(fā)明公開的建立的函數(shù)類實(shí)例區(qū)的示意圖。
      【具體實(shí)施方式】
      [0033]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
      [0034]如圖1所示,為本發(fā)明公開的一種編譯函數(shù)類型POU對(duì)象的方法,包括:
      [0035]S101、分配一片固定內(nèi)存作為函數(shù)類實(shí)例區(qū),所述類實(shí)例區(qū)用于編譯函數(shù)對(duì)象時(shí)使用的模擬堆棧空間;
      [0036]在編譯的過程中,首先為函數(shù)分配一片固定內(nèi)存的全局?jǐn)?shù)據(jù)區(qū),作為函數(shù)的類實(shí)例區(qū),用于在編譯函數(shù)對(duì)象時(shí)作為模擬堆??臻g使用,代替控制器本身的堆??臻g。
      [0037]S102、分配函數(shù)對(duì)象的參數(shù)到所述類實(shí)例區(qū);
      [0038]當(dāng)分配好函數(shù)的類實(shí)例區(qū)后,將函數(shù)對(duì)象的參數(shù)分配到類實(shí)例區(qū)中。
      [0039]S103、調(diào)用已編譯的函數(shù)對(duì)象。
      [0040]編譯程序中通過模擬入棧和模擬出棧的方式調(diào)用已編譯的函數(shù)對(duì)象。
      [0041]綜上所述,本發(fā)明提供的一種編譯函數(shù)類型POU對(duì)象的方法,通過分配一片固定內(nèi)存作為函數(shù)的類實(shí)例區(qū),用于編譯函數(shù)對(duì)象時(shí)使用的模擬堆??臻g,使得函數(shù)對(duì)象的參數(shù)的分配以及調(diào)用已編譯的函數(shù)對(duì)象均在分配的類實(shí)例區(qū)中完成,因此能夠降低與真實(shí)控制器之間的耦合,不依賴于控制器本身堆棧,去除控制器本身堆??臻g的大小對(duì)編譯的影響,降低堆棧溢出的風(fēng)險(xiǎn)。
      [0042]具體的,上述實(shí)施例中,函數(shù)的類實(shí)例區(qū)可以是由控制器分配的一片固定內(nèi)存,或者是由編譯器分配的一片固定內(nèi)存。類實(shí)例區(qū)的個(gè)數(shù)由當(dāng)前允許的函數(shù)的最大調(diào)用層數(shù)決定,例如,函數(shù)最大的調(diào)用層數(shù)為3層,則分配3個(gè)類實(shí)例區(qū)。每個(gè)類實(shí)例區(qū)的大小以允許的函數(shù)語句的復(fù)雜度為參照,一般的,每個(gè)類實(shí)例區(qū)的大小等于函數(shù)語句的輸入、輸出引腳的最大數(shù)目和最長表達(dá)式包含的操作符數(shù)目之和,如圖3所示的Cl,包含3個(gè)引腳(IN1\IN2\0UT),以及表達(dá)式“IN1+IN2”包含I個(gè)操作符+,所以它實(shí)際使用的類實(shí)例區(qū)的長度為4。在編譯時(shí),由調(diào)用層級(jí)低的函數(shù)開始編譯,例如如圖4所示,先編譯函數(shù)C,然后是B,再編譯函數(shù)A,函數(shù)A允許調(diào)用函數(shù)B,函數(shù)B允許調(diào)用函數(shù)C,相同層級(jí)內(nèi)的函數(shù)不允許調(diào)用,層級(jí)低的函數(shù)不允許調(diào)用層級(jí)高的函數(shù),如函數(shù)B不允許調(diào)用A。每個(gè)調(diào)用層級(jí)獨(dú)立分配唯一的類實(shí)例區(qū),編譯每個(gè)函數(shù)時(shí),傳遞相應(yīng)的類實(shí)例區(qū)供函數(shù)編譯時(shí)使用。
      [0043]具體的,上述實(shí)施例中,分配函
      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1