?? nucleus操作系統-實時內核介紹.txt
字號:
Nucleus操作系統-實時內核介紹
第二章 Nucleus PLUS內核介紹
2.1 Nucleus PLUS應用開發綜述
2.1.1 開發調試環境
嵌入式實時應用程序的開發基于宿主機系統。IBM PC 和UNIX 工作站都是典型的宿主機系統。一般來說,應用程序都是運行在分離的計算機系統上被目標系統調用。然而,IBM PC系統并 不遵循上述規則,因為它既可以作為Nucleus PLUS 應用程序的主機,也可為目標機為其服務。運行在IBM PC系統 上的應用程序以EXE 文件的形式存在。
針對目標系統的調試軟件通常包括ICE 仿真工具和TRM(目標仿真)工具。ICE仿真工具給工程師提供了完全控制和了解目標系統硬件狀況的工具,特別是在校驗新硬件時尤為有用。但是,考慮到開發工具成本問題和ICE時有的使用局限性,許多項目采用TRM調試。TRM 就是一個運行在目標系統(通常為ROM)上的小型的軟件組件。TRM 提供包括下載、下斷點和內存入口服務。ICE 和TRM 都有宿主系統控制。這通常由串口來完成。
2.1.2使用Nucleus PLUS
Nucleus PLUS被設計成C庫的形式使用。使用內部應用程序軟件的服務從Nucleus PLUS 庫文件取出并且組合成應用程序目標文件來生成最終的映像文件。此映像文件可以下載到目標系統或是存放到目標系統ROM 中。
使用Nucleus PLUS 的步驟被描述成下列通用的方式:
1) 如果有必要,修改低級系統初始化文件,INT.S。注:這些文件通常以匯編語言形式交貨并且它的的擴展是指定的開發工具。
2) 定義Application_Initialize 函數,Nucleus PLUS 啟動系統時它優先運行。注意NUCLEUS.H 文件必須包含以至于能被Nucleus PLUS 服務調用。
3) 定義應用程序任務。如果用到Nucleus PLUS 服務,文件NULCUES.H 必須被包含。
4) 編譯所有應用程序軟件,包括低級系統初始化文件INT.s。
5) 用Nucleus PLUS 庫和必要的開發工具庫連接INT.a 和所有應用程序目標文件。
6) 下載應用程序映像文件到目標系統并運行。
2.1.3 初始化
INT_Initialize 程序在Nucleus PLUS 內核中是最先運行的程序。對大多數的目標環境而言,硬件復位向量必須包含在 INT_Initialize 地址中。INT_Initialize 程序主要負責所有與目標硬件相關的初始化,通常包括設置不同種類處理器的控制寄存器、中斷向量表、全局C數據元素、Nucleus PLUS的一些變量以及系統的堆棧指針。當 INT_Initialize 程序執行完成后,控制權交給到Nucleus PLUS上一層初始化程序INC_Initialize,并且控制權不會再返回給 INT_Initialize 程序。
INC_Initialize 調用每一個Nucleus PLUS 組件的初始化程序進行初始化操作,在所有Nucleus PLUS初始化完成之后,它還調用用戶提供的初始化程序Application_Initialize。
Application_Initialize 程序負責定義初始化應用環境,包括初始化應用任務、郵箱、隊列、管道、信號量、事件集、內存池和其他Nucleus PLUS 對象。在Application_Initialize 返回后,INC_Initialize程序開始初始化任務調度表。
2.2 實現約定
Accelerated Technology(ATI)使用軟件組件方法學。組件具有簡單、清晰的優點,一個軟件組件往往只包括幾個C程序和匯編程序。并且,每一個軟件組件都有特定的目的和提供給其他組件的外部接口,使得可以通過外部接口來方便的使用組件。在組件方法中,除了很少的特例外,一般不允許在組件外訪問組件的全局數據結構。由于采用了組件方法學,Nucleus PLUS 具有代碼清晰、模塊化、可靠、可復用和易于維護的特點。
2.2.1 組件的組成
一個軟件組件通常包含頭文件、一個或多個C程序文件,有的還包括匯編程序文件。包含的文件的文件名滿足如下的約定:
文件 含義
XX_DEF.H 定義組件的常量和數據類型
XX_ EXTR.H 定義組件的外部接口,以函數原型的形式定義
XXD.C 定義組件的靜態和全局變量,除很少的特例外,一個組件的數據結構只能被本組件訪問
XXI.C 定義組件的初始化函數
XXF.C 提供被組件管理的對象的信息
XXC.C 提供組件的核心函數
XXS.C 提供組件核心函數的錯誤處理外殼函數
XXS.C 組件的補充定義函數
XXSE.C 提供組件補充定義函數的錯誤處理外殼函數
2.2.2 命名規則
1、 組件命名
組件名字一般限于兩個字符。組件名字作為構造組件的每個文件名的首兩個字符。例如:
動態內存管理組件(Dynamic Memory Management Component)名字:DM,構成DM 的文件:
DM_DEFS.H
DM_EXTR.H
DMC.C
DMCE.C
DMI.C
DMF.C
DMD.C
2、 宏定義名字
宏名由下劃線、大寫字母和數字字符構成。最大支持長度為31 個字符。此外一個宏定義首3 個字符是CC_ ,其中“CC”與定義該宏的文件名的首2 個字符相同。例如:(對于EX_DEFS . H 文件)
#define EX_MY_CONSTANT 10
3、 結構體名字
結構體名字由下劃線、大寫字母和數字字符構成。最大支持長度為31 個字符。此外,一個結構體名的首3 個字符是CC_ ,其中“CC”與定義該結構體的文件名的首2 個字符相同。例如:(對于 EX_DEFS.H)
struct EX_MY_STRUCT
{
int ex_member_a;
int ex_member_b;
int ex_member_c;
};
4、typedef 名字
typedef 定義新結構體名字由下劃線、大寫字母和數字字符構成。最大支持長度為31個字符。此外,一個由typedef 定義新結構體名字的首3 個字符是CC_ ,其中“CC”與定義由typedef 命名結構體的文件名的首2 個字符相同。例如:(對于EX_DEFS.H 文件)
typedef struct EX_MY_STRUCT
{
int ex_member_a;
int ex_member_b;
int ex_member_c;
} EX_MY_TYPEDEF;
5、 結構體成員名字
結構體成員名字由下劃線、大寫字母和數字字符構成,最大支持長度為31 個字符。此外,一個結構體成員名字的首3 個字符是CC_ ,其中“cc”與包含該結構體定義的文件“cc_defs”的首2 個字符相同。例如:(對于EX_DEFS.H 文件)
struct EX_MY_STRUCT
{
int ex_member_a;
int ex_member_b;
int ex_member_c;
};
6、 全局變量名字
Nucleus PLUS 全局變量名由下劃線以及緊跟著每個下劃線的一個大寫字母、小寫字母、數字字符組成,最大支持長度為31 個字符。此外,一個全局變量名字的首3 個字符是CCC ,其中“CCC”與包含實際變量描述的文件“ccc.C”的首3 個字符相同。例如:(對于EXD.C 文件)
int EXD_Global_Integer;
7、 局部變量命名
局部變量名由小寫字母、有可能是下劃線或數字字符組成,最大支持長度為31 個字符。局部變量名字沒有要求包含定義它們的文件的首3 個字符。例如:(對于EXD.C 文件)
/* Assume the following declaration is inside a function. */
int I;
8、 函數名字
Nucleus函數名字由下劃線以及緊跟在下劃線的一個大寫字母、小寫字母、數字組成,最大支持長度為31個字符。此外,一個函數名的首3個字符與包含該函數定義的文件名相同。例如:(對于EXD.C文件)
void EXD_My_Function(unsigned int i)
{
…
…
}
2.3 軟件概述
2.3.1 基本用法
Nucleus PLUS 通常是以C語言庫的形式實現的。實時Nucleus PLUS應用程序和Nucleus PLUS庫鏈接在一起生成的目標文件可以被下載到目標板或者固化到ROM中。
NUCLEUS.LIB是典型的Nucleus PLUS庫文件名。它由批處理文件PLUS.BAT運行產生,而且PLUS.BAT文件的內容依賴于所使用的開發工具。
1、 運行模式
在處理器結構中有管理模式和用戶模式之分。由于Nucleus PLUS應用任務需要直接地調用需要調用特權指令的系統服務程序,所以Nucleus PLUS應用任務通常是在管理模式下運行。這樣的實現方法減少了系統服務調用的開銷而且便于實現。
2、 應用初始化
用戶有責任提供自己的初始化程序Application_Initialize,該程序應創建任務、隊列和其他系統初始化時需要的系統對象。如果應用程序不在系統運行時動態創建和刪除系統對象,那么所有的系統對象都應該在Application_Initialize中被創建。用戶的Application_Initialize程序一旦返回,多任務立即開始執行。在一些目標環境中,底層的系統初始化文件INT.S、INT.ASM或INT.SRC文件可能需要修改。這些文件初始化系統的定時中斷、可用存儲空間以及處理器或目標板的其他實體。
3、 頭文件
所有的用戶代碼在調用Nucleus PLUS服務或數據類型時,都必須包含NUCLEUS.H文件。該文件包含數據類型定義、常量定義和所有Nucleus PLUS服務函數的原型。不同的Nucleus PLUS移植系統,該文件是不同的。
2.3.2 數據類型
Nucleus PLUS在NUCLEUS.H文件中定義了標準的數據類型。這些數據類型保證了Nucleus PLUS能以相同的風格在不同的目標環境中運行。
Nucleus PLUS定義的數據類型如下:
數據類型 含義
UNSIGNED 32位無符號整數,常被定義為無符號長整型(unsigned long)的C數據類型
SIGNED 32位有符號整數,常被定義為有符號長整型(long)的C數據類型
IPTION 容易操作的最小的數據類型,常被定義為無符號字符型(unsigned char)的C數據類型
DATA_ELEMENT 和OPTION數據類型相同
UNSIGNED CHAR 8位無符號字符
CHAR 8位有符號字符
STATUS 等價于目標C編譯器的有符號整數(int)
INT 整數數據類型,具有word大小
VOID 等價于目標C編譯器的void數據類型(void)
UNSIGNED_PTR 指向UNSIGNED數據類型的指針
BYTE_PTR 指向UNSIGNED_CHAR數據類型的指針
2.3.3 系統服務映射關系
1、 錯誤檢查
Nucleus PLUS的主包含文件NUCLEUS.H包含了和《Nucleus PLUS Reference Manual》里面定義的函數相匹配的函數的原型。然而,這些NU_*函數并不真是存在。對于絕大多數Nucleus PLUS函數,都有一個真正操作的函數,也有一個在調用真正執行操作函數前對用戶調用進行錯誤檢查的外殼函數。錯誤檢查條件定義宏NU_ERROR_CHECKING定義和不定義時的具體的系統服務映射關系請參見附錄(表格形式,Nucleus PLUS Internals文檔中的表格)。
2、 條件編譯
Nucleus PLUS源碼有一定的條件編譯選項。有一些是在應用程序編譯時用到,而絕大多數時在Nucleus PLUS系統庫編譯時可用。
Nucleus系統庫條件編譯標識往往是在一個編譯批處理文件中使用。這些條件編譯選項控制各種Nucleus PLUS系統庫特征。
這些條件編譯選項如下:
條件編譯選項 含義
NU_ENABLE_HISTORY 運行在特定文件中保存歷史記錄。注意:僅形如**C.C的文件受該選項影響
NU_ENABLE_STACK_CHECK 運行在特定文件中的每個函數開始檢查堆棧。注意:僅形如**C.C的文件受該選項影響
NU_ERROR_STRING 允許在一個致命系統錯誤發生時生成一個ASCII錯誤字符串。該標記適用ERD.C、ERI.C和ERC.C三個文件
NU_NO_ERROR_CHECKIN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -