利用多線(xiàn)程思想實(shí)現單片機系統的偽并行處理
1.開(kāi)始后,主CPU發(fā)給從CPU1一個(gè)信號,從CPU啟動(dòng)對象M1進(jìn)行動(dòng)作17,并由從CPU向主CPU返回一個(gè)信號。主CPU收到信號后,置起標志1。當對象M1進(jìn)行完動(dòng)作17后,從CPU向主CPU發(fā)出信號,CPU將標志1清掉。
2.開(kāi)始后,主CPU發(fā)給從M2一個(gè)信號,從CPU啟動(dòng)對象M2。從CPU向主CPU不斷查詢(xún)標志1。當標志1被清掉后,從//控制對象2執行動(dòng)作23。
3.開(kāi)始后,主CPU發(fā)給從CPU一個(gè)信號,從CPU啟動(dòng)對象M3和對象M4。執行動(dòng)作25,然后開(kāi)電磁閥6,然后延時(shí)1秒,關(guān)電磁閥6,執行動(dòng)作24,然后執行動(dòng)作26,等////1的動(dòng)作17完成后,啟動(dòng)步進(jìn)電機20,執行動(dòng)作25,等等。
如上所說(shuō), 主CPU設置了多個(gè)標志位用以跟蹤各個(gè)線(xiàn)程的運行情況。并用這些標志位承擔了各個(gè)相關(guān)線(xiàn)程之間的通訊。凡是線(xiàn)程運行到與其他線(xiàn)程相關(guān)的地方都會(huì )在主CPU 內設置一個(gè)標志位以供其它相關(guān)線(xiàn)程查詢(xún)。而那些不相關(guān)的線(xiàn)程可以完全獨立運行。相關(guān)線(xiàn)程除了需檢測標志的部分,其他部分也可獨立運行。
這種多CPU控制的作法實(shí)現了單片機的并行運作方式。但多CPU的控制方案成本幾乎是成倍提高,而且在硬件的基礎上實(shí)現的多CPU之間的通訊花費時(shí)間稍長(cháng)。并且容易有干擾。
方案二(作者推薦): 另一種實(shí)現的方法是在軟件的層面上模擬多cpu的運作。從而實(shí)現單片機的偽并行處理.這種實(shí)現方法借鑒了計算機實(shí)現多線(xiàn)程的編程方法。
多線(xiàn)程編程編程思想,即:同時(shí)給CPU分配了幾個(gè)任務(wù)或線(xiàn)程。當然計算機 CPU實(shí)際上不可能同一時(shí)間做幾件事,而是把時(shí)間分到不同的線(xiàn)程,使每個(gè)線(xiàn)程都有點(diǎn)進(jìn)展。如果一個(gè)線(xiàn)程無(wú)法進(jìn)行,比如線(xiàn)程要求的鍵盤(pán)輸入尚未取得,則轉入另一個(gè)線(xiàn)程的工作。通常,CPU在線(xiàn)程間的切換非常迅速,使人們感覺(jué)好象所有的線(xiàn)程是同時(shí)進(jìn)行的。
多線(xiàn)程編程中有一個(gè)很重要的環(huán)節:各個(gè)線(xiàn)程之間的通訊與控制問(wèn)題
在多線(xiàn)程編程中,每個(gè)線(xiàn)程都用編碼提供線(xiàn)程的行為,用數據供給編碼操作。多個(gè)線(xiàn)程同時(shí)處理同一編碼和數據,不同線(xiàn)程可能各有不同的編碼和數據。事實(shí)上,編碼和數據部分是相當獨立的,需要時(shí)即可向線(xiàn)程提供。因此經(jīng)常是幾個(gè)線(xiàn)程使用同一段編碼和數據這就會(huì )出現下面的情況
當一個(gè)線(xiàn)程在調用數據時(shí),另一個(gè)線(xiàn)程可能正在修改這些數據。則前一個(gè)線(xiàn)程所調用的數據出現了不確定性。這會(huì )影響整個(gè)運行結果。為了避免這個(gè)問(wèn)題,多線(xiàn)程編程中,各個(gè)線(xiàn)程之間通訊和控制尤為重要。在將多線(xiàn)程的思想向單片機控制系統移植時(shí),這點(diǎn)要非常注意。因為系統多線(xiàn)程運作的實(shí)現從其最基本的層面看仍然是單線(xiàn)程的操作;他的實(shí)現歸根結底是利用了計算機的高速度。它將系統運行的基準時(shí)間分成了許多時(shí)間片,將各個(gè)時(shí)間片分給不同的線(xiàn)程,如此一來(lái)在一個(gè)基準時(shí)間內各個(gè)線(xiàn)程全都向前行進(jìn)了一步,然后運行下一個(gè)基準時(shí)間,周而復始。這樣在用戶(hù)層的角度看來(lái),各個(gè)線(xiàn)程是同步進(jìn)行的。只要速度夠塊,時(shí)間片的劃分不會(huì )影響用戶(hù)層面上的應用,這樣就可以實(shí)現多線(xiàn)程的操作。近年來(lái)單片機速度的大幅度提升,這就使多線(xiàn)程思想向單片機控制系統的移植成為可能。
在整個(gè)項目中全部的輸入信號共39個(gè);同時(shí)并行查詢(xún)的對象最多時(shí)有61個(gè)系統要求以步進(jìn)電機最快的速度打拍。時(shí)間約40us---60us,為了保證步進(jìn)電機打拍的穩定性和靈活性。我選用了DSP內部的一個(gè)定時(shí)器,定時(shí)時(shí)間為打拍時(shí)間的1/3—1/5。設定為10us中斷。這個(gè)時(shí)間為整個(gè)系統運行的基準時(shí)間。在這段時(shí)間內,系統要查詢(xún)一遍所有對象并向相應的步進(jìn)電機打拍。在一些線(xiàn)程中還需要采樣多次。換句話(huà)說(shuō),在這個(gè)系統時(shí)間內。所有線(xiàn)程都要向前行進(jìn)一步。
就像計算機一樣,將這個(gè)基準時(shí)間分為多個(gè)時(shí)間片。將各個(gè)時(shí)間片分給不同的線(xiàn)程,在這種情況下,各個(gè)線(xiàn)程的執行是間斷的。這與用硬件模擬多線(xiàn)程有本質(zhì)的不同。像這樣既要應用各線(xiàn)程執行的間斷性,又要保證各線(xiàn)程運行的連續性。這對軟件的設計有了很高的要求,這同時(shí)也是單片機控制系統用軟件模擬多線(xiàn)程方法中的難點(diǎn)之一,為了解決這個(gè)問(wèn)題,可在個(gè)線(xiàn)程自帶線(xiàn)程進(jìn)度指示器用來(lái)標志線(xiàn)程的運行進(jìn)度,即用一個(gè)變量記載線(xiàn)程的每一步;如圖2
圖2
系統設定線(xiàn)程進(jìn)度指示器用來(lái)指引線(xiàn)程的連續運行,同時(shí)在一個(gè)中斷中輪詢(xún)所有對象。其編程結構大致如下:
時(shí)鐘中斷:
線(xiàn)程1:
線(xiàn)程進(jìn)度標志:
1: ;
2: ;
3 ;
線(xiàn)程2:
線(xiàn)程進(jìn)度標志:
1: ;
2: ;
。。。。。。。。
用軟件模擬多線(xiàn)程還有很多要注意的地方。
光電開(kāi)關(guān)相關(guān)文章:光電開(kāi)關(guān)原理
評論