LabVIEWCompactRIO 開發(fā)指南8 消除不必要的驅(qū)動(dòng)因素
LabVIEWCompactRIO?開發(fā)指南8
消除不必要的驅(qū)動(dòng)因素
要釋放一些系統(tǒng)內(nèi)存,可以卸載實(shí)時(shí)系統(tǒng)上不使用的任何驅(qū)動(dòng)程序。要自定義軟件堆棧,右鍵單擊實(shí)時(shí)目標(biāo)下的軟件,并選擇添加/刪除軟件。選擇推薦的軟件集并刪除任何不必要的驅(qū)動(dòng)程序。

圖3.24?卸載不用于增加內(nèi)存的軟件驅(qū)動(dòng)程序。
選擇具有更多板載內(nèi)存的硬件目標(biāo)
可以選擇各種CompactRIO和NI單板里RIO目標(biāo),具有不同數(shù)量的板載內(nèi)存。如果在靜態(tài)內(nèi)存分配方面存在問題,請(qǐng)考慮使用具有更多板載內(nèi)存的CompactRIO系統(tǒng)。
動(dòng)態(tài)內(nèi)存分配
動(dòng)態(tài)內(nèi)存分配是在運(yùn)行時(shí)分配的內(nèi)存。動(dòng)態(tài)內(nèi)存分配會(huì)影響應(yīng)用程序的性能和確定性,因?yàn)樗鼈冋{(diào)用內(nèi)存管理器,而內(nèi)存管理器充當(dāng)共享資源。動(dòng)態(tài)分配內(nèi)存的時(shí)間取決于需要分配的內(nèi)存量和內(nèi)存的當(dāng)前狀態(tài)。動(dòng)態(tài)內(nèi)存分配也會(huì)影響實(shí)時(shí)應(yīng)用程序的可靠性。如果內(nèi)存管理器在內(nèi)存中找不到足夠大的連續(xù)段來填充請(qǐng)求,它將終止程序。
設(shè)計(jì)代碼以避免動(dòng)態(tài)內(nèi)存分配所需的工作量應(yīng)該與嵌入式系統(tǒng)所需的正常運(yùn)行時(shí)間相關(guān)??梢蕴幚矶ㄆ谥匦聠?dòng)或維護(hù)的系統(tǒng)可以自由地使用動(dòng)態(tài)內(nèi)存,只要它們監(jiān)視內(nèi)存狀態(tài)。一旦系統(tǒng)重新啟動(dòng),內(nèi)存就會(huì)被釋放。如果系統(tǒng)不能處理常規(guī)重啟,那么應(yīng)該考慮使用以下技術(shù)來減少動(dòng)態(tài)內(nèi)存分配。為了獲得最大的可靠性,請(qǐng)將代碼移動(dòng)到FPGA或創(chuàng)建冗余系統(tǒng)。
通過關(guān)閉引用來避免內(nèi)存泄漏
內(nèi)存泄漏是永遠(yuǎn)不會(huì)釋放的資源分配。內(nèi)存泄漏可能需要很長時(shí)間才能耗盡內(nèi)存,但最終可能導(dǎo)致系統(tǒng)崩潰。常見的內(nèi)存泄漏來源如下:
■調(diào)用帶有泄漏的庫
■未關(guān)閉的文件句柄
■未關(guān)閉的VI服務(wù)器引用
■未閉合的驅(qū)動(dòng)手柄
■未封閉的共享變量API引用
■未關(guān)閉的TCP連接ID或偵聽器ID
通過關(guān)閉初始化期間打開的所有引用來避免內(nèi)存泄漏。用移位寄存器替換任何引用的終端也是一種安全的做法。
使用固定大小的數(shù)據(jù)避免過度分配
當(dāng)程序試圖在RAM中存儲(chǔ)過多的數(shù)據(jù)時(shí),就會(huì)發(fā)生內(nèi)存過度分配。它通常來自沒有固定大小的隊(duì)列或緩沖區(qū)。圖3.25中的圖表顯示了緩沖區(qū)正在擴(kuò)展的情況。注意,一旦緩沖區(qū)擴(kuò)展,它通常不會(huì)收縮。當(dāng)代碼運(yùn)行時(shí),緩沖區(qū)可能會(huì)被定期清空,但它仍然保留其最大值的大小。

圖3.25?無界緩沖區(qū)隨著時(shí)間的推移會(huì)減少內(nèi)存。
以下是動(dòng)態(tài)內(nèi)存分配的常見來源:
■隊(duì)列沒有固定大小
■可變大小的數(shù)組(和波形)
■可變大小的字符串
■變體
本章討論了在實(shí)時(shí)目標(biāo)上的進(jìn)程之間共享數(shù)據(jù)的兩種方法。默認(rèn)情況下,隊(duì)列具有可變大小的緩沖區(qū)。即使有固定數(shù)量的元素,包含可變大小數(shù)據(jù)(字符串、變量)的隊(duì)列的大小仍然是可變的。對(duì)于網(wǎng)絡(luò)流和共享變量也是如此。如果正在處理一個(gè)需要考慮動(dòng)態(tài)內(nèi)存分配的應(yīng)用程序,請(qǐng)使用RT?FIFO在進(jìn)程之間傳輸數(shù)據(jù)。
需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復(fù)制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個(gè)問題就不用加微信咨詢了。有關(guān)LabVIEW編程、LabVIEW開發(fā)等相關(guān)項(xiàng)目,可聯(lián)系們。附件中的資料這里無法上傳,可去公司網(wǎng)站搜索下載。