<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > LabVIEW編譯程序設計

LabVIEW編譯程序設計

作者: 時(shí)間:2010-10-19 來(lái)源:網(wǎng)絡(luò ) 收藏

  是一個(gè)復雜的話(huà)題,即使對內行的軟件工程師來(lái)說(shuō)也要考慮很多專(zhuān)業(yè)知識。

本文引用地址:http://dyxdggzs.com/article/195256.htm

  NI 軟件是一種多規范的圖形化編程環(huán)境,含有多種概念,包括數據流,面向對象,以及事件驅動(dòng)編程。也是跨越多種平臺的,能夠很好地用于多種操作系統(OSs),芯片組,嵌入式設備,以及現場(chǎng)可編程門(mén)陣列(FPGAs)。程序是一種精密的系統,在過(guò)去的20年中具有令人矚目的發(fā)展。探索NI公司的LabVIEW程序的處理過(guò)程以及近來(lái)編譯程序的創(chuàng )新。

  LabVIEW編譯程序處理過(guò)程

  首先一個(gè)VI的編譯是類(lèi)的擴展,主要負責將隱含的類(lèi)解析為適于終端輸出與檢查句法錯誤的類(lèi)型。在類(lèi)擴展之后,VI從編輯模型轉化為可以被編譯程序使用的數據流中間表示(DFIR)圖表。編譯程序執行幾種變換,例如在DFIR圖表分解過(guò)程中的死碼刪除,優(yōu)化,并為代碼生成做好準備。DFIR接下來(lái)被轉化成底層的虛擬機(LLVM)中間表示(IR),有關(guān)IR的一系列掃描被運行,以利于更進(jìn)一步的優(yōu)化與底層化——最終——變?yōu)闄C器碼。

  DFIR提供一種高級的中間表示

  DFIR是一種分級的,結構圖代碼的,基于圖表的IR。類(lèi)似于G代碼,DFIR包含很多具有端點(diǎn)的節點(diǎn),能夠與其它端點(diǎn)相連。一些節點(diǎn),例如框圖,含有圖表,這些圖表也可以依此類(lèi)推地包含其它節點(diǎn)。

  圖1顯示了一個(gè)簡(jiǎn)單VI的最初DFIR。當LabVIEW首次為VI創(chuàng )建一個(gè)DFIR時(shí),這是一種G代碼的直接翻譯,DFIR圖表中的節點(diǎn)具有像G 代碼中節點(diǎn)一樣的一對一的對應性。隨著(zhù)編譯程序的執行,DFIR節點(diǎn)有可能被移動(dòng),部分分離,或者是增加,然而編譯程序將仍然保留原有的特性,例如 LabVIEW代碼中固有的并行特性。

  

查看一個(gè)簡(jiǎn)單VI 的初始 DFIR 圖表 www.elecfans.com

  圖 1. 查看一個(gè)簡(jiǎn)單VI 的初始 DFIR 圖表

  DFIR能夠為L(cháng)abVIEW編譯程序提供兩種可觀(guān)的優(yōu)勢:

  1. DFIR將編輯程序從編譯程序的表示中分離——在DFIR出現以前,LabVIEW具有一個(gè)單獨的VI表示,由編輯程序和編譯程序共享。這樣在編譯過(guò)程中,阻止了編譯程序修改表示,也會(huì )使引入編譯程序優(yōu)化很困難。DFIR引入了一系列的優(yōu)化與分解措施,能夠極大地提高LabVIEW代碼的性能,僅要求結構圖節點(diǎn)與連線(xiàn)被斷開(kāi)并可以移動(dòng)。

  2. DFIR作為多個(gè)編譯程序的前段與后段的公用連接點(diǎn)——今天,LabVIEW能處理很多明顯不同的任務(wù)。類(lèi)似地,LabVIEW也為用戶(hù)提供了多種算法模式,例如LabVIEW MathScript,C一體化,仿真圖表,以及狀態(tài)表(statecharts)。DFIR提供了一種常用IR,它由前端生成而由后端使用,使不同組合的重新使用更加便利。

  DFIR分解與優(yōu)化

  一旦進(jìn)入DFIR,VI運行一系列的分解變換,來(lái)縮減或標準化DFIR圖表。在DFIR圖表徹底分解后,DFIR優(yōu)化掃描開(kāi)始。有超過(guò)30種分解與優(yōu)化能夠提高LabVIEW代碼的性能。請仔細查看圖2和3顯示的簡(jiǎn)單VI,它被稱(chēng)為T(mén)rim Whitespace VI(Trim Whitespace.vi),來(lái)自vi.lib。

  

2.png

  圖 2. 這是任意 DFIR分解前的 VI

  

Trim Whitespace.vi 結構圖的定義 www.elecfans.com

  圖 3. 上面是Trim Whitespace.vi 結構圖的定義

  首先,Trim Whitespace.vi被內聯(lián)到調用VI,如圖4所示?,F在,不可達代碼與死碼刪除運算可以簡(jiǎn)化代碼。第一個(gè)條件結構將總是執行相同的分支,因為輸入的是一個(gè)恒定值。因此,其余的分支可以同整個(gè)第二個(gè)條件結構一起移走,因為它們從不執行。循環(huán)不變式代碼移動(dòng)將匹配模式基元(Match Pattern primitive)移出循環(huán)框,確保其只被執行一次,如圖5所示。

  

  圖 4. subVI內聯(lián)到調用程序,導致一個(gè) DFIR圖表等價(jià)于該 G代碼

  

5.png

  圖 5. 一次執行產(chǎn)生優(yōu)化的 DFIR圖表


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: LabVIEW 編譯 程序設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>