標籤:嵌入式rtos nucleus 軟體組件 nucleus組件
(一)組件和軟體組件方法學1,軟體組件(Software Component)的定義
從一般意義上來說,組件(Component)是系統中可以明確辨識的組成部分,一個不透明的功能實現體。軟體開發中,組件是對資料和方法的簡單封裝,它具有約定式規範的介面。組件具有物件導向的特徵,具有功能獨立性、高度的可重用性、與語言和平台無關性等特點。軟體組件是軟體系統中具有一定意義的、相對獨立的構成部分,是一個通過規定的介面提供一組服務代碼的執行單元,這個執行單元的特點是高內聚、低偶合。組件的介面和組件的實現相分離,調用者只需要知道介面並提供者就可以使用組件。介面相對固定,組件功能和實現的變化不應該引起介面的變化。軟體組件是軟體複用的關鍵技術。
2,軟體組件方法學:
組件技術是90年代初出現的一種軟體開發技術,它是在結構化設計和物件導向技術的基礎上發展起的,是物件導向技術之後的軟體開發的標準方法系,是物件導向的開發技術的延伸。軟體組件開發主要是開發與維護系統構造過程中用到的組件。將軟體組件作為一個單獨的過程,目的是將組件作為構造軟體的“零組件”。有了組件的概念和組件技術,軟體開發就可以借鑒建築學和現代製造業中成功的執行個體,先構造出軟體的總體架構,然後根據組件重用技術,在架構上根據需要組裝上所需功能的組件,最後形成應用程式。版本更新只須用新的組件替換舊組件即可實現,而無須改動整個程式,也不需要對整個程式進行重新編譯。
(二)Nucleus PLUS系統架構
Nucleus PLUS系統採用軟體組件的形式構成以增加系統的代碼清晰性、可靠性和可重用性,使系統模組化、易於維護。Nucleus PLUS由多個軟體組件構成,每個組件都有唯一的用途和特定的外部介面。每個組件的使用通過這些介面的調用實現,而組件內部的資料結構絕大多數情況下都不可以被其他組件直接存取。這種組件架構使得Nucleus PLUS的每個軟體組件可以被輕鬆的替換和重用。
每個軟體組件都由兩個標頭檔和若干個源檔案組成,其中源檔案大多用C語言寫成,少數用組合語言寫成。標頭檔中一個用於資料類型定義和常量聲明,另外一個用於聲明組件的外部介面。下表是每個組件檔案的概述,組件不一定還包含表中所有的檔案,其中XX標示組件名縮寫。
在支援使用者模式和管理員模式的處理器架構上,Nucleus PLUS 核心和所有應用任務都運行在管理員模式。這種做法實現簡單、任務系統調用開銷小,但是每個任務都能訪問任何資源。
所有需要調用Nucleus PLUS系統服務或者使用Nucleus資料類型的使用者代碼源檔案中都要包含標頭檔“NUCLEUS.h”,該檔案包含資料類型、常量定義以及Nucleus PLUS服務的所有函式宣告。事實上,“NUCLEUS.h”中所有以“NU_”開頭的函數實質上在Nucleus各組件原始碼中是不存在的。絕大多數Nucleus函數都有一個真正執行操作的函數(各組件中定義)和一個調用真正執行函數前對使用者調用進行錯誤檢查的“殼”函數。錯誤檢查功能是可以停用的,不定義宏標示“NU_NO_ERROR_CHECKING”即可。NU_NO_ERROR_CHECKING的定義與否決定”NU_“函數真正映射的組件函數。
(三)Nucleus PLUS的組件
Nucleus Plus 系統共16個組件,分別討論如下(主要描述組件的功能):
1,泛型服務組件Common Service Component(CS)
所有的Nucleus PLUS組件控制的控制資料結構採用的都是鏈表,CS即負責提供連結結構和鏈表操作函數,包括添加、刪除節點。
2,初始化組件Initialization Component(IN)
負責初始化和啟動Nucleus Plus 系統。初始化和啟動過程包含兩部分:具體硬體目標板依賴部分(處理器相關和板級初始化)先初始化,然後是Nucleus PLUS各組件和使用者程式的初始化。
INT_Initialize 子程式在Nucleus PLUS 系統中是最先啟動並執行,負責所有與目標硬體板相關的初始化。INT_Initialize 完成後將控制權轉移到進階Nucleus PLUS 初始化子程式INC_Initialize上並不再返回。INC_Initialize調用所有的Nucleus plus組件初始化函數、調用Application_Initialize建立使用者任務等對象,最後將控制權交給調度函數TCT_schedule,系統啟動完畢。初始化具體過程參見博文”Nucleus PLUS的啟動、運行線程和中斷處理“。
3,線程調度組件Tread Control Component(TC)
負責Nucleus Plus的搶佔式即時任務和HISR的調度管理。每個使用者應用由多個工作群組成,一個任務就是具有特定目的的半獨立程式片段,任務處於五種狀態之一--運行、就緒、掛起、終止、完成。任務具有不同的優先順序,高優先順序任務能夠搶佔低優先順序任務,同優先順序任務按照進入”就緒狀態“的順序調度,優先順序從0-255遞減。
Nucleus PLUS每一個任務都有一個控制結構體稱為線程式控制制塊Thread Control Block(TCB)-TC_TCB,任務支援動態建立和刪除,TC通過一個雙向鏈表TCD_Created_Tasks_List管理所有的任務,全域變數TCD_Total_Tasks表示已建立的總任務數。
TCD_Priority_List是一個大小為256的TCB指標數組(數組大小與Nucleus PLUS優先順序數相同),每個數組指標是一個表的頭部(某元素為空白則表示沒有該優先順序的任務),該表的元素是具有相同優先順序的進入就緒狀態的任務的TCB指標。即Nucleus PLUS維護一個指標數組來調度不同優先順序的任務鏈表。
任務調度過程見博文”Nucleus PLUS任務調度“。
HISR是中斷處理常式的下半部分,能夠訪問絕大多數Nucleus PLUS任務(不可自動掛起)。HISR也是搶佔式的,其優先順序0-2遞減。HISR由LISR啟用,因此必須事先建立並註冊。
HISR的管理和任務的管理是類似的,每個HISR都有一個控制結構TC_HCB和獨佔的堆棧,TCD_Created_HISRs_List是一個儲存已建立HISR常式的雙向鏈表的表頭,TCD_Total_HISRs表示已建立的HISR總數。另外TC會維護兩個已啟用的HISR表,表項分別是三個優先順序已啟用的HISR雙向鏈表的頭和尾。TC還通過鏈表維護LISR常式,包括中斷向量註冊和LISR入口函數。TC組件提供了HISR的建立、刪除、啟用等函數。
4,時鐘組件Timer Component(TM)
負責管理所有的Nucleus Plus 定時器裝置。Nucleus Plus 的基本定時單元為一個Tick,它相當於一次硬體定時器中斷。系統層面上,定時器用於任務管理-定時睡眠和喚醒等;使用者應用程式層面,定時器用於那些需要有逾時處理機制的地方。
定時器支援動態建立/刪除,每個定時器都有一個控制結構TM_TCB、TMD_HISR或TM_APP_TCB,分別用於系統任務定時器、HISR定時器和應用程式專用計時器。TM通過鏈表維護已建立的、已啟用的定時器列表。TM提供一個系統定時器TMD_System_Clock。
定時器函數包括建立、開始、停止、重設、刪除、逾時處理等。
5,郵箱組件Mailbox Component(MB)下述Nucleus PLUS處理序間通訊機制郵箱、隊列、管道、訊號量和事件組詳見博文”Nucleus處理序間通訊(IPC)方式“。
負責管理Nucleus Plus 所有的郵箱服務,提供一種低開銷的處理序間通訊機制。每個郵箱包含一個長度為4個32-bit字的訊息。郵箱可以由使用者動態建立/刪除,支援任務的掛起和恢複。
每個郵箱都有一個控制塊Mailbox Control Block (MCB) MB_MCB,MB通過雙向鏈表維護已建立的郵箱。郵箱的任務掛起/喚醒支援FIFO順序和任務優先順序順序進行,也是通過維護一個雙向鏈表進行,每有一個任務掛起在郵箱上就會建立一個控制塊MB_SUSPEND結構體。
MB提供了郵箱的建立、刪除、訊息發送/擷取、重設、清空、廣播等函數。
6 隊列組件Queue Component(QM)和7管道組件Pipe Component(PI)
分別負責管理所有的Nucleus Plus 佇列服務,管理所有的Nucleus Plus 管道服務。兩組件的管理與MB是類似的,區別在於:隊列的訊息是一個或者多個32-bit字,管道的訊息是一個或者多個8-bit位元組。
8,訊號量組件Semaphore Component(SM)
負責管理所有的Nucleus Plus 訊號量服務,用於多個任務間的同步。訊號量支援動態建立/刪除,SM可提供的訊號量計數範圍是0-4,294,967,294,其管理與MB類似。
9,事件組件Event Flag Component(EV)
負責管理所有的Nucleus Plus 事件組服務,每個事件組包含32個事件標示(event flag),即32位無符號整型數的每個位即是一個event flag(為1表示事件發生,0表示未發生)。其管理與MB類似。
10,儲存分配組件Partition Memory Component(PM)
負責管理所有的Nucleus Plus 分區記憶體,分區記憶體的記憶體池指的是由使用者指定的記憶體總數目固定、每個分區(partition)的位元組數也確定的記憶體。分區記憶體支援動態建立和任務的掛起/喚醒(FIFO或者任務優先順序順序)。
每個分區記憶體都需要一個控制塊Partition Memory Control Block (PCB)-PM_PCB(額外佔據記憶體,不包含在分區記憶體內),PM通過雙向鏈表維護所有建立的分區記憶體。每個分區記憶體的可用分區由一個null結尾的單鏈表控制,每個可用分區由頭結構體PM_HEADER開始。
11,動態記憶體組件Dynamic Memory Component(DM)
負責管理所有的Nucleus Plus 動態記憶體服務,動態記憶體池的起始位置和長度由使用者指定,支援動態建立/刪除和任務掛起/喚醒。動態記憶體的分配按照first fit演算法分配,沒有固定位元組數的分區。DM的管理與PM類似。
12,I/O驅動組件Iinput/Output Driver Component(I/O)
負責管理所有的Nucleus Plus 輸入/輸出裝置的驅動服務,提供了一種通用的、相似的s驅動服務介面,包括初始化、分配、釋放、輸入/輸出、裝置狀態擷取和服務申請終止等服務。
13,錯誤處理組件Error Component(ER)
負責管理所有的Nucleus Plus 系統錯誤。
14,曆史組件History Component(HI)
負責Nucleus Plus的曆史裝置管理。
15,許可證組件License Component (LI)
負責Nucleus Plus的許可證管理。
16,版本控制組件Release Component(RL)
負責Nucleus Plus 的版本管理。