Nucleus Plus是美國原始碼作業系統商ATI公司推出的新一代嵌入式作業系統,屬於搶先式即時多任務作業系統核心, 95%的代碼使用ANSI C編寫,非常便於移植於各種處理器家族。從實現的角度講,不同於傳統嵌入式開發,Nucleus Plus是以函數庫的形式連結到目標應用程式中,形成可執行目標代碼,下載到目標板上或燒到ROM/FLASH ROM 中去執行。Nucleus Plus核心在典型的CISC體繫結構上佔據大約20k空間,而在典型的RISC體繫結構上佔據空間為40k左右,其核心資料結構佔據1.5k位元組的空間。Nucleus Plus以其即時響應、搶先、多任務以及原始碼開放特性獲得在通訊、國防、工業控制、航空/航天、鐵路、網路、POS、自動化控制、智能家電等領域的廣泛應用。
Nucleus Plus核心技術
ATI公司使用一種叫做軟體組件的方法。所謂軟體組件,就是具有明確目的或用途的由1個或數個C語言/彙編源檔案的一段非獨立執行應用程式,且每個組件都提供一個定義好的外部介面,必須通過外部介面來使用組件。訪問組件內的全域資料結構是被禁止的。使用了組件方法,軟體組件既易於更新也易於重用。Nucleus Plus軟體組件通常由定義資料類型、常量以及外部介面的INCLUDE 標頭檔和一個或多個C語言/彙編源檔案組成。Nucleus Plus 提供如下組件:任務控制管理、記憶體管理、定時器管理、中斷、系統診斷、I/O驅動管理等共16個組件如下,
Nucleus Plus Kernel:
Common Service Component(CS)
Initialization Component(IN)
Tread Control Component(TC)
Timer Component(TI)
Mailbox Component(MB)
Pipe Component(PI)
Semaphore Component(SM)
Event Flag Component(EV)
Partition Component(PM)
Queue Component(QM)
Dynamic Memory Component(DM)
I/O Component(I/O)
History Component(HI)
Error Component(ER)
License Component (LI)
Release Component(RL)
其中:
* IN:負責初始化Nucleus Plus 系統
* TC:負責管理Nucleus Plus的搶佔式即時 任務和HISR的運行
* CS:負責提供具有連結清單其它的裝置Nucleus Plus 組件
* TM:負責管理所有的Nucleus Plus 定時器裝置。Nucleus Plus 的基本定時單元為一個Tick,它相當於一次硬體定時器中斷
* MB:負責管理所有的Nucleus Plus 信箱裝置
* QM:負責管理所有的Nucleus Plus 隊列裝置
* PI :負責管理所有的Nucleus Plus 管道裝置
* SM:負責管理所有的Nucleus Plus 訊號量裝置
* EV:負責管理所有的Nucleus Plus 事件組裝置
* PM:負責管理所有的Nucleus Plus 分區記憶體
* DM:負責管理所有的Nucleus Plus 動態記憶體
* I/O:負責管理所有的Nucleus Plus 輸入/輸出
* HI:負責Nucleus Plus的曆史裝置管理
* ER:負責管理所有的Nucleus Plus 系統錯誤
* LI:負責Nucleus Plus的許可證管理
* RL:負責Nucleus Plus 的版本管理
Nucleus Plus 其它功能模組
Nucleus Plus 除了其功能強大的核心外,還提供了面向INTERNET、TCP/IP、WEB瀏覽器、圖形以及檔案系統的軟體包。
Nucleus Plus 開發
1, Nucleus Plus 定製
Nucleus Plus 也能根據目標板的需要進行裁剪和定製,產生適合目標系統的作業系統,盡量少佔系統記憶體。OS定製完成後,將其連結到目標應用程式,成為目標應用程式的一部分。在典型的CISC體繫結構的目標板上,它佔用約20K 左右的空間,而在RISC體繫結構的目標板上佔用約40K左右的空間。一般地,Nucleus Plus 足以滿足絕大多數的嵌入式應用。ATI公司提供了一個名為BUILD_LI.BAT或PLUS.BAT的批次檔,使用者可以刪剪其中的模組,更改相關的選項或開關,執行該檔案產生與目標相關的作業系統,也就是根據系統需要產生定製的作業系統。需要注意的是,該批次檔的內容與開發工具有關。
2,開發方案
Nucleus Plus可以結合Paradigm、SDS以及ATI的多任務調試器組成功能強大的整合式開發環境,配合相應的編譯器(Borland c/c++ 編譯器、Turbo c/c++ 編譯器或者Microsoft c/c++編譯器)和動態連結程式庫以及各類底層驅動軟體就可以滿足嵌入式應用的開發。
3,開發流程
用Nucleus Plus 開發嵌入式應用程式,一般遵循如下步驟:
* 如果有必要,應對低級系統初始設定檔案.INT進行修改,使之符合目標板的需要。如中斷向量、I/O地址、時鐘頻率等。
* 定義Application _Initialize()函數。該函數在啟動系統之前先執行。注意的是要把NUCLEUS.H標頭檔包括在目標應用程式中,以便利用Nucleus Plus 的服務。
* 定義應用程式的任務。如果調用Nucleus Plus 的服務,要把NUCLEUS.H包含進去。
* 編譯/彙編所有的應用程式軟體,並且包含系統低級初始設定檔案.INT。
* 連結.INT和所有的應用程式目標檔案、Nucleus Plus庫檔案以及相關的開發工具庫。
* 把產生的最終目標代碼下載或燒到目標板上執行。
4, Nucleus Plus 初始化
Nucleus Plus 分三個層次的初始化,即:系統低級初始化Int-Initialize()、系統進階初始化Inc-Initialize()和應用程式初始化Application_Initialize(),初始化之後便進入Nucleus Plus 的任務調度迴圈。各個初始化函數任務見表1。
Int_Initialize()
Inc_Initialize()
Application_Initialize()
5, Nucleus MNT
Nucleus MNT是為軟體開發人員設計的,在WIN95/NT下構築Nucleus Plus嵌入式應用的原型(Prototyping)環境。它通過兩個庫來實現,即針對目標環境的庫和針對Win95/NT開發環境的庫。開發時,應用程式代碼可以不變,僅僅替換掉MNT庫,使用交叉開發套件重構目標環境下的可執行目標代碼.
6, 開發注意事項
嵌入式開發在記憶體需求、任務管理等方面存在著特殊性,因此,開發中對以下方面要額外加以注意,
* 任務饑荒
任務優先順序的分配要合理,否則會導致系統中的一些任務一直不斷地在運行而另一些任務永遠得不到運行,引起饑荒。
* 死結
系統資源的分配要合理,否則會引起兩個或多個任務為競爭某一系統資源而處於無限掛起現象。
* 記憶體
* 記憶體泄露
記憶體配置過程中要盡量避免片段並且要注意及時回收。
* 記憶體節約
* 預設情況下,Nucleus Plus, 在進階初始化函數Inc_Initialize()中。調用其它函數初始化它所提供的所有特徵的資料結構中,有些特徵使用者目標應用程式可能用不到,為此,要去掉不必要的函數調用。
* 改變Nucleus.H中NU_MAX_LISRS的大小,它定義的是目標處理器的最大中斷向量數。
* 改變TC_DEFS.H中TC_PRIORITIES的大小。它定義了任務的優先順序數。Nucleus Plus 能支援256個優先順序。
* HISR棧共用。
* TCD.C中禁止查詢表TCD_LOWEST_SET_BIT的RAM拷貝。
* 使用一個更小的INT選項。
結束語
由於Nucleus Plus 的模組化、可靠、重用、開放、易用以及安全等特性使得它成為嵌入式應用開發的理想平台,尤其是關係到國計民生的領域,如航空/航天、軍隊、國防等方面。