介紹一種實時操作系統DSP/BIOS
所有SWI任務共享一個堆棧,SWI任務只能在程序編制時預先定義好。DSP/BIOS中對任務的動態產生和對阻塞狀態的支持是通過TSK模塊來實現的。TSK有15個優先級,也是可以搶斷的,但是每個TSK任務使用獨立的堆棧。TSK任務是通過TSK_create()和TSK_delete()來動態生成和結束的。它的運行狀態如圖2所示。
5 同步(SEM/ATM/QUE/MBX)
多任務系統中多個任務之間的協調同步工作可以通過多種方法來實現。常用方法如信號量、原子量、隊列和郵箱等。在DSP/BIOS中對這些方法的支持分別通過模塊SEM、ATM、QUE和MBX來實現。由于這些方法的使用與一般的操作系統完全一樣,在這里就不再贅述了。僅就最靈活的在SWI中使用Mailbox的方法來加以簡單地說明。每個SWI任務都帶有一個Mailbox,對它的操作可以是計數型的SWI_inc()、 SWI_dec() 也可以是比特位操作型的 SWI_or()、 SWI_andn()。Mailbox控制SWI任務被調度的條件。這些操作的功能如表2所示。
or操作是將Mailbox中的某一位置1,同時引起SWI任務的調度。當一個SWI任務可能由多個事件觸發時,使用or操作可以方便地表示出觸發的事件。如例3使用or操作指示觸發事件:
andn操作是將Mailbox中的某一位清0,如果Mailbox為0,則引起SWI任務的調度。一個SWI任務需要多個條件都滿足時才運行的情況下,使用andn操作可以方便地表示出這些條件的狀態。如例4用andn操作來表示多條件時SWI任務調度:
inc和dec操作則更加靈活,用戶可以借此實現多種應用。唯一需要注意的是,inc操作總是引起任務調度,而dec操作僅在Mailbox減到0時才引起一次任務調度。
6 通訊(PIP/SIO/HST)
一個系統如何從外部設備中取得數據,向外部設備輸出數據,如何在兩個任務之間進行數據正常交換是多樣靈活的。但是這種多樣性也給軟件的維護升級以及模塊化工作帶來許多不利因素。因此在保持多樣性的同時,保持接口的一致性對于一個軟件來說是非常有幫助的。考慮到DSP大多數是通過某種類型的串行接口如中繼線E1、IIS、SPI、同步串行口等與外部設備進行數據交換的,所以在DSP/BIOS中提供了兩種非常有用的接口對象PIP和 SIO。
PIP對象包含一個緩沖隊列,與之對應的有兩個任務讀和寫。圖3很好地說明了PIP的邏輯關系和操作方式。例5,例6分別是一個PIP對象對應的讀任務和寫任務的示范程序。
評論