<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 介紹一種實時操作系統(tǒng)DSP/BIOS

          介紹一種實時操作系統(tǒng)DSP/BIOS

          作者: 時間:2009-04-09 來源:網(wǎng)絡(luò) 收藏

          所有SWI任務(wù)共享一個堆棧,SWI任務(wù)只能在程序編制時預(yù)先定義好。/中對任務(wù)的動態(tài)產(chǎn)生和對阻塞狀態(tài)的支持是通過TSK模塊來實現(xiàn)的。TSK有15個優(yōu)先級,也是可以搶斷的,但是每個TSK任務(wù)使用獨立的堆棧。TSK任務(wù)是通過TSK_create()和TSK_delete()來動態(tài)生成和結(jié)束的。它的運行狀態(tài)如圖2所示。

          5  同步(SEM/ATM/QUE/MBX)
            多任務(wù)系統(tǒng)中多個任務(wù)之間的協(xié)調(diào)同步工作可以通過多種方法來實現(xiàn)。常用方法如信號量、原子量、隊列和郵箱等。在/中對這些方法的支持分別通過模塊SEM、ATM、QUE和MBX來實現(xiàn)。由于這些方法的使用與一般的完全一樣,在這里就不再贅述了。僅就最靈活的在SWI中使用Mailbox的方法來加以簡單地說明。每個SWI任務(wù)都帶有一個Mailbox,對它的操作可以是計數(shù)型的SWI_inc()、  SWI_dec()  也可以是比特位操作型的  SWI_or()、  SWI_andn()。Mailbox控制SWI任務(wù)被調(diào)度的條件。這些操作的功能如表2所示。

           or操作是將Mailbox中的某一位置1,同時引起SWI任務(wù)的調(diào)度。當(dāng)一個SWI任務(wù)可能由多個事件觸發(fā)時,使用or操作可以方便地表示出觸發(fā)的事件。如例3使用or操作指示觸發(fā)事件:

          andn操作是將Mailbox中的某一位清0,如果Mailbox為0,則引起SWI任務(wù)的調(diào)度。一個SWI任務(wù)需要多個條件都滿足時才運行的情況下,使用andn操作可以方便地表示出這些條件的狀態(tài)。如例4用andn操作來表示多條件時SWI任務(wù)調(diào)度:

          inc和dec操作則更加靈活,用戶可以借此實現(xiàn)多種應(yīng)用。唯一需要注意的是,inc操作總是引起任務(wù)調(diào)度,而dec操作僅在Mailbox減到0時才引起一次任務(wù)調(diào)度。
          6  通訊(PIP/SIO/HST)
            一個系統(tǒng)如何從外部設(shè)備中取得數(shù)據(jù),向外部設(shè)備輸出數(shù)據(jù),如何在兩個任務(wù)之間進行數(shù)據(jù)正常交換是多樣靈活的。但是這種多樣性也給軟件的維護升級以及模塊化工作帶來許多不利因素。因此在保持多樣性的同時,保持接口的一致性對于一個軟件來說是非常有幫助的。考慮到大多數(shù)是通過某種類型的串行接口如中繼線E1、IIS、SPI、同步串行口等與外部設(shè)備進行數(shù)據(jù)交換的,所以在中提供了兩種非常有用的接口對象PIP和  SIO。
            PIP對象包含一個緩沖隊列,與之對應(yīng)的有兩個任務(wù)讀和寫。圖3很好地說明了PIP的邏輯關(guān)系和操作方式。例5,例6分別是一個PIP對象對應(yīng)的讀任務(wù)和寫任務(wù)的示范程序。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();