新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > labview棧和隊列

        labview棧和隊列

        作者: 時間:2017-01-09 來源:網絡 收藏

        同步控制技術----棧與隊列

        本文引用地址:http://www.104case.com/article/201701/337150.htm

        (其中有很多圖片不是馬上就能看到的,查看方法是:鼠標右擊不可看圖片,選擇復制圖片地址,然后在瀏覽器中打開即可。因為本文是摘錄的,給各位朋友帶來不便,請多諒解!)

        在計算機編程中棧是一個很重要的概念,尤其在匯編語言中,需要不斷進棧和出棧的操作.棧是限定在一個表的尾端進行插入(進堆棧)和刪除(出堆棧)的線性表.是后進先出結構(LIFO).

        隊列的定義和棧的定義是類似的,區別是數據是先進先出(FIFO)

        labview還有一個概念緩沖區BUFFER,典型的比如CHART,它默認保存數據長度是1024.BUFFER的概念和隊列是非常相似的,都是一個先進先出的結構.如果我們設定隊列的數據長度也是1024.比較一下他們的區別.

        區別一:未達到設定

        開始的時候,隊列和緩沖區中都是沒有數據的,當有數據進入的時候,隊列和緩沖區中的數據在不斷地增加,對于緩沖區,因為未達到它最大許可的長度 1024,因此數據是不斷第增加的,隊列則不同,它的數據是否增加取決于是否有讀隊列的過程,就是所說的出隊,如果出隊的速度大于入隊的速度,隊列中則根本不會有數據.如果沒有出隊的過程或者出隊的速度小于入隊的過程,隊列中的數據也是不斷地增加的.這是第一個區別.

        區別二:到達設定值

        當隊列和BUFFER都達到了1024個數據后,這是再有新的數據要進來,隊列和BUFFER的表現是不同的,對于BUFFER,它將自動擠出(形象的說法,當然也是編程實現的)最早進入BUFFER的數據,所謂先進先出.而隊列則不同.要求進入隊列的線程只能被動等待,一直到隊列中有別的線程取出數據,隊列中有空閑位置.所以隊列有調節讀寫速度線程的能力.

        相同點一:數據進入都是在尾部,(隊列插入如果在頭部,就編程上面所說的棧了)

        相同點二:對于中間數據都實現了有效的封裝,你無法直接提取中間的某個數據,你可以讀出中間的數據,但是不能改變當前BUFFER和隊列的值.

        LABVIEW提供的隊列的功能函數(包括棧),在逐點分析庫提供了DBL型的BUFFER,我在另外的日志中專門提到了,這里就不多說了.

        LV隊列的函數是基本函數,無法進行深入跟蹤,估計應該是采用C++的算法然后封裝的,我實際測試過,它的運行效率遠高于用數組的方式構成的隊列,為了詳細說明隊列和棧的細節,我還是用數組的形式,然后在介紹LV的隊列函數.

        首先看看如何用數組實現棧的功能:

        棧的操作是非常簡單的,只有壓棧和出棧兩個操作(PUSH AND POP)

        我們用AE來實現它.分成三個action: Init,Push ,Pop

        首先嚴格自定義ENUM,表示三個動作.

        這樣我們就完成了棧的AE的制作過程。

        看看它的調用過程。

        10次循環,棧中的數據應該是0,1,2,3,4,5,6,7,8,9。棧的彈出次序應該是9,8,7,6,5,4,3,2,1,0

        運行結果確實如此。

        與棧相反,隊列是一個先入先出的數據結構,我們對棧的過程稍微修改一下,就可以得到隊列。就不多介紹了。

        下面重點介紹一下LV提供的隊列的具體功能。

        分別介紹這8個節點的具體功能:
        1:獲得隊列(實際是得到隊列的參考)它有5個數據端子

        name:String
        隊列在LV系統中是名稱來區分的,LV系統自己維護一個包含的目前所有隊列的表,當你運行這個函數的時候,它首先會查找表中是否已經存在這個隊列參考,如果存在,就直接返回這個參考,如果不存在,就建立一個新的隊列,并將隊列參考加入表中進行維護。這樣做的好處是非常明顯的,允許我們在任何子VI中,只需要知道隊列的名稱就可以運行這個函數直接得到隊列參考,不用通過全局變量或者數據流輸入來得到參考,在一個層層嵌套的VI中想傳遞一個數據很不容易,也不利于模塊化。

        上一頁 1 2 下一頁

        關鍵詞: labview棧隊

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 仙游县| 区。| 海兴县| 中江县| 登封市| 铁岭市| 兴业县| 六盘水市| 调兵山市| 镇安县| 隆尧县| 云南省| 临澧县| 陆丰市| 广昌县| 武冈市| 柳江县| 昭平县| 平潭县| 大丰市| 安多县| 五华县| 呼伦贝尔市| 綦江县| 保德县| 阳原县| 汕尾市| 汾西县| 湘潭市| 札达县| 邳州市| 贡觉县| 永吉县| 惠安县| 吉首市| 瓮安县| 富源县| 普安县| 乌苏市| 纳雍县| 遂宁市|