介紹一種實時操作系統(tǒng)DSP/BIOS
所有SWI任務(wù)共享一個堆棧,SWI任務(wù)只能在程序編制時預(yù)先定義好。DSP/BIOS中對任務(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)。常用方法如信號量、原子量、隊列和郵箱等。在DSP/BIOS中對這些方法的支持分別通過模塊SEM、ATM、QUE和MBX來實現(xiàn)。由于這些方法的使用與一般的操作系統(tǒng)完全一樣,在這里就不再贅述了。僅就最靈活的在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ù)之間進(jìn)行數(shù)據(jù)正常交換是多樣靈活的。但是這種多樣性也給軟件的維護(hù)升級以及模塊化工作帶來許多不利因素。因此在保持多樣性的同時,保持接口的一致性對于一個軟件來說是非常有幫助的。考慮到DSP大多數(shù)是通過某種類型的串行接口如中繼線E1、IIS、SPI、同步串行口等與外部設(shè)備進(jìn)行數(shù)據(jù)交換的,所以在DSP/BIOS中提供了兩種非常有用的接口對象PIP和 SIO。
PIP對象包含一個緩沖隊列,與之對應(yīng)的有兩個任務(wù)讀和寫。圖3很好地說明了PIP的邏輯關(guān)系和操作方式。例5,例6分別是一個PIP對象對應(yīng)的讀任務(wù)和寫任務(wù)的示范程序。
評論