嵌入式實(shí)時(shí)操作系統Salvo的內核分析與配置
摘要:簡(jiǎn)要介紹Salvo的基本特點(diǎn);詳細分析Salvo的內核管理、運行機制;深入探討Salvo用戶(hù)目標代碼的生成與配置,并給出不同用戶(hù)目標代碼生成方式下的用戶(hù)目標代碼生成流程。
關(guān)鍵詞:嵌入式操作系統 Salvo 內核分析 任務(wù)控制塊 配置
引言
目前電子產(chǎn)品開(kāi)發(fā)廣泛采用以微處理器為核心的電子系統。開(kāi)發(fā)以微處理器為核心的電子系統(以下簡(jiǎn)稱(chēng)微處理器系統)采用傳統的無(wú)限循環(huán)函數模式,產(chǎn)品的開(kāi)發(fā)周期和穩定性都無(wú)法保障,因此,在微處理器系統開(kāi)發(fā)中引入嵌入式實(shí)時(shí)操作系統RTOS。RTOS的引入消耗了部分系統資源。這部分系統資源對于高檔微處理器系統影響不大;對于中小規模微處理器系統,特別是單片機系統,由于RTOS資源的占用,使用戶(hù)可用資源大大減少,嚴重影響系統的實(shí)時(shí)性,甚至系統功能無(wú)法完成。市場(chǎng)上雖然有一些專(zhuān)用于單片機的RTOS,如應用于51系列單片機RTX51 tiny,但由于功能相對薄弱,無(wú)太大實(shí)用價(jià)值;另外也有一些功能較強的RTOS可移植到單片機系統,但由于占用資源較多,需擴展大量的RAM和ROM,并且產(chǎn)時(shí)性差。本文介紹一種適用于小容量存儲器單片機(如PIC系列)系統且功能強大的RTOS―Salvo。
1 Salvo特點(diǎn)
嵌入式實(shí)時(shí)操作系統Salvo有兩大特點(diǎn):①占用系統資源少;②功能強大。
(1)Salvo占用的系統資源
Salvo最大的特點(diǎn)是占用系統資源少,特別是占用存儲器資源極少。它不但適用于51系列單片機,也適用于存儲器資源更少的PIC系列單片機。Salvo占用ROM資源取決于用戶(hù)調用的系統函數,占用RAM取決于用戶(hù)定義的變量、任務(wù)和事件的數量。以PIC16系列單片機為例,每個(gè)全局變量占10B,任務(wù)點(diǎn)5B,事件占3B。
(2)Salvo功能和性能
Salvo是一個(gè)基于優(yōu)先級任務(wù)切換,支持事件驅動(dòng)的多任務(wù)嵌入式實(shí)時(shí)操作系統。Salvo共支持16個(gè)任務(wù)優(yōu)先級。且多個(gè)任務(wù)可以共用一個(gè)優(yōu)先級,任務(wù)按優(yōu)先級高低切換,對于多個(gè)同一優(yōu)先級的任務(wù),以時(shí)間片循環(huán)方式 (round-robin)切換。Salvo支持任務(wù)和事件的數量不限,取決于RAM的大小。(Salvo默認支持255個(gè)任務(wù)、255個(gè)事件和255個(gè)消息隊列)
圖1
Salvo內核主要提供以下幾類(lèi)函數供用戶(hù)應用程序引用:
①任務(wù)管理―提供任務(wù)建立、任務(wù)撤消等功能;
②時(shí)間管理―提供任務(wù)延時(shí)函數等功能;
③信號管理―提供信號量建立、刪除、等待、發(fā)出等功能;
④消息管理―提供消息建立、刪除、等待、發(fā)出等功能。
2 Salvo的內核分析
(1)任務(wù)狀態(tài)及狀態(tài)轉移
Salvo的用戶(hù)任務(wù)具有以下幾種狀態(tài):
①運行狀態(tài)。任務(wù)占用系統資源正在運行中,任務(wù)一時(shí)刻只能有一個(gè)任務(wù)可以處于運行狀態(tài);
②就緒狀態(tài)。由于任務(wù)的優(yōu)先級不是最高優(yōu)先級,任務(wù)正在等待運行;
③延時(shí)狀態(tài)。任務(wù)先前已運行過(guò),現在暫停運行等待延時(shí)時(shí)間到達,一旦延時(shí)時(shí)間到達,任務(wù)處于就緒狀態(tài);
④停止狀態(tài)。任務(wù)先前已運行過(guò),現在由于某種確定原因暫停運行,直到RTOS再次啟動(dòng)該任務(wù);
⑤等待狀態(tài)。任務(wù)暫停運行,直到它的等待事件發(fā)生。
Salvo的任務(wù)狀態(tài)轉移圖如圖1所示。
(2)任務(wù)同步和通信
為保證應用系統各任務(wù)的協(xié)調和信息傳輸,嵌入式操作系統需要同步和通信機制。一般采用信號量、事件標志、消息和消息隊列實(shí)現任務(wù)間的同步和通信。
信號量(semaphores)分二進(jìn)制信號量和計數式信號量,用于表示事件的發(fā)生或對共享資源的訪(fǎng)問(wèn)。信號量使用前應先采用OSCreateSem()函數產(chǎn)生,信號量接收的任務(wù)在處理中用OS_WaitSem()函數等待事件發(fā)生而掛起。一旦信號量發(fā)送,任務(wù)根據事件的發(fā)送情況用OSSignalSem()函數設置信號量,掛起的信號量接收任務(wù)繼續運行。對于二進(jìn)制信號量,Salvo提供OSCreateBinSem()、OS_WaitBinSem()、OSSignalBinSem()等函數用于二進(jìn)制信號量的產(chǎn)生、等待和設置等功能。
圖2
信號量和事件標志只能用于傳遞事件的發(fā)生或對共享事件的訪(fǎng)問(wèn),任務(wù)間其它信息的傳遞通過(guò)消息(messages)實(shí)現。消息可以傳遞各種信息,包括數值、字符、數組、函數、指針等。任務(wù)間傳遞的并非消息本身,而是指向消息的指針,消息內容的含義由發(fā)送和接收消息的任務(wù)約定。Salvo提供OSCreateMsg()、OS_WaitMsg()、OSSignalMsg()等函數用于消息的產(chǎn)生、等待和設置等功能。消息隊列實(shí)際是消息陣列,用于任務(wù)或中斷服務(wù)程序(ISR)向一個(gè)或多個(gè)任務(wù)發(fā)送消息,隊列中的消息按先進(jìn)選出(FIFO)原則被任務(wù)讀取。Salvo提供OSCreateMsgQ()、OS_WaitMsg()、OSSignalMsgQ()等函數用于消息的產(chǎn)生、等待和設置等功能。
(3)任務(wù)調度和任務(wù)控制塊
Salvo是基于優(yōu)先級的嵌入式實(shí)時(shí)操作系統,Salvo總是運行就緒任務(wù)表中優(yōu)先級最高的任務(wù)。(Salvo允許2個(gè)以上任務(wù)處于同一優(yōu)先級,同一優(yōu)先級任務(wù)按時(shí)間片輪轉調度)Salvo由函數OSSched()實(shí)現任務(wù)調度。
在任務(wù)切換過(guò)程中,被剝奪CPU使用權的任務(wù)必須保存該任務(wù)的當前運行狀態(tài),如CPU內寄存器的值;而獲得CPU使用權的任務(wù)必須恢復前一次被剝奪CPU使用權時(shí)的運行狀態(tài),繼續運行。為完成這些功能,Salvo為每一個(gè)建立的任務(wù)建立一個(gè)任務(wù)控制埠(TCB)。任務(wù)控制埠是一個(gè)數據結構,當任務(wù)的CPU使用權被剝奪時(shí),Salvo用它來(lái)保存該任務(wù)的運行狀態(tài);當任務(wù)重新獲得CPU使用權時(shí),任務(wù)控制塊能確保任務(wù)從當時(shí)被中斷處繼續運行。
3 Salvo的配置
當了成功地編譯Salvo應用程序,并使編譯后的目標代碼小,系統運行時(shí)占用RAM空間少,在編譯Salvo應用程序時(shí),需要對Salvo進(jìn)行配置。
(1)目標代碼建立方式
Salvo應用程序目標代碼建立方式有兩種:基于庫的建立和基于源泉代碼的建立。
在基于庫的目標代碼建立中,Salvo提供的用戶(hù)函數包含在預編譯的Salvo庫文件中,Salvo應用程序從用戶(hù)程序源代碼(包括C語(yǔ)言和匯編語(yǔ)言)、Salvo庫和Salvo的mem.c建立而成。由于Salvo庫是預先編譯的,應用程序編譯時(shí)的配置文件對Salvo庫,即用戶(hù)函數無(wú)效?;趲斓哪繕舜a建立過(guò)程如圖2所示。
在基于源代碼的目標代碼建立中,Salvo提供用戶(hù)函數的源代碼。Salvo應用程序從用戶(hù)程序源代碼、Salvo用戶(hù)函數源代碼(包括C語(yǔ)言和匯編語(yǔ)言)和Salvo的mem.c建立而成。由于Salvo用戶(hù)函數是源代碼形式,Salvo應用程序編譯時(shí)的配置文件對Salvo的用戶(hù)函數有效?;谠创a的目標代碼建立過(guò)程如圖3所示。
相對于基于庫的建立方式,基于源代碼的目標代碼建立配置文件作用范圍更大,生成的目標代碼更貼近應用系統。即目標代碼更小,運行時(shí)占用RAM更少。
圖3
Salvo的配置信息保存在應用程序同一目標的salvocfg.h文件中,文件以文本形式,每項配置操作通過(guò)C語(yǔ)言的#define語(yǔ)句實(shí)現。Salvo的配置主要有以下幾類(lèi)操作:
①任務(wù)和事件―配置任務(wù)數,開(kāi)啟/關(guān)閉信號量、消息和消息隊列;
②大小指定―配置延時(shí)RAM、計數器、事件標志、標記的位數;
③定時(shí)和標記―開(kāi)啟/關(guān)閉定時(shí)器;
④優(yōu)化操作―優(yōu)化運行速度、消息隊列、全局變量等;
⑤監視和調試―配置指針、延時(shí)、任務(wù)、事件的監視;
⑥錯誤檢查―開(kāi)啟/關(guān)閉用戶(hù)函數錯誤檢查;
⑦存儲器定位―配置Salvo對象在RAM中的位置。
典型的配置文件格式如下:
#define OSBYTES_OF_DELAYS 1
//設置延時(shí)RAM長(cháng)度
#define OSENABLE_MESSAGES TRUE
//開(kāi)啟消息處理功能
#define OSEVENTS 1
//設置應用系統中事件數
#define OSTASKS 3
//設置應用程序系統中任務(wù)數
4 結論
以上分析可知,嵌入式實(shí)時(shí)操作系統Salvo以其功能強大、內核簡(jiǎn)潔高效、占用資源少、可配置性強等特點(diǎn),非常適合于資源較少,特別是存儲器資源少的單片機系統使用。在單片機系統中嵌入實(shí)時(shí)操作系統Salvo,可大大縮短產(chǎn)品開(kāi)發(fā)周期,提高可靠性,增強產(chǎn)品市場(chǎng)競爭力。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論