當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]嵌入式實(shí)時(shí)操作系統(tǒng)Salvo的內(nèi)核分析與配置

    摘要:簡要介紹Salvo的基本特點(diǎn);詳細(xì)分析Salvo的內(nèi)核管理、運(yùn)行機(jī)制;深入探討Salvo用戶目標(biāo)代碼的生成與配置,并給出不同用戶目標(biāo)代碼生成方式下的用戶目標(biāo)代碼生成流程。

    關(guān)鍵詞:嵌入式操作系統(tǒng) Salvo 內(nèi)核分析 任務(wù)控制塊 配置

引言

目前電子產(chǎn)品開發(fā)廣泛采用以微處理器為核心的電子系統(tǒng)。開發(fā)以微處理器為核心的電子系統(tǒng)(以下簡稱微處理器系統(tǒng))采用傳統(tǒng)的無限循環(huán)函數(shù)模式,產(chǎn)品的開發(fā)周期和穩(wěn)定性都無法保障,因此,在微處理器系統(tǒng)開發(fā)中引入嵌入式實(shí)時(shí)操作系統(tǒng)RTOS。RTOS的引入消耗了部分系統(tǒng)資源。這部分系統(tǒng)資源對(duì)于高檔微處理器系統(tǒng)影響不大;對(duì)于中小規(guī)模微處理器系統(tǒng),特別是單片機(jī)系統(tǒng),由于RTOS資源的占用,使用戶可用資源大大減少,嚴(yán)重影響系統(tǒng)的實(shí)時(shí)性,甚至系統(tǒng)功能無法完成。市場(chǎng)上雖然有一些專用于單片機(jī)的RTOS,如應(yīng)用于51系列單片機(jī)RTX51 tiny,但由于功能相對(duì)薄弱,無太大實(shí)用價(jià)值;另外也有一些功能較強(qiáng)的RTOS可移植到單片機(jī)系統(tǒng),但由于占用資源較多,需擴(kuò)展大量的RAM和ROM,并且產(chǎn)時(shí)性差。本文介紹一種適用于小容量存儲(chǔ)器單片機(jī)(如PIC系列)系統(tǒng)且功能強(qiáng)大的RTOS—Salvo。

1 Salvo特點(diǎn)

嵌入式實(shí)時(shí)操作系統(tǒng)Salvo有兩大特點(diǎn):①占用系統(tǒng)資源少;②功能強(qiáng)大。

(1)Salvo占用的系統(tǒng)資源

Salvo最大的特點(diǎn)是占用系統(tǒng)資源少,特別是占用存儲(chǔ)器資源極少。它不但適用于51系列單片機(jī),也適用于存儲(chǔ)器資源更少的PIC系列單片機(jī)。Salvo占用ROM資源取決于用戶調(diào)用的系統(tǒng)函數(shù),占用RAM取決于用戶定義的變量、任務(wù)和事件的數(shù)量。以PIC16系列單片機(jī)為例,每個(gè)全局變量占10B,任務(wù)點(diǎn)5B,事件占3B。

(2)Salvo功能和性能

Salvo是一個(gè)基于優(yōu)先級(jí)任務(wù)切換,支持事件驅(qū)動(dòng)的多任務(wù)嵌入式實(shí)時(shí)操作系統(tǒng)。Salvo共支持16個(gè)任務(wù)優(yōu)先級(jí)。且多個(gè)任務(wù)可以共用一個(gè)優(yōu)先級(jí),任務(wù)按優(yōu)先級(jí)高低切換,對(duì)于多個(gè)同一優(yōu)先級(jí)的任務(wù),以時(shí)間片循環(huán)方式 (round-robin)切換。Salvo支持任務(wù)和事件的數(shù)量不限,取決于RAM的大小。(Salvo默認(rèn)支持255個(gè)任務(wù)、255個(gè)事件和255個(gè)消息隊(duì)列)

圖1

    Salvo內(nèi)核主要提供以下幾類函數(shù)供用戶應(yīng)用程序引用:

①任務(wù)管理—提供任務(wù)建立、任務(wù)撤消等功能;

②時(shí)間管理—提供任務(wù)延時(shí)函數(shù)等功能;

③信號(hào)管理—提供信號(hào)量建立、刪除、等待、發(fā)出等功能;

④消息管理—提供消息建立、刪除、等待、發(fā)出等功能。

2 Salvo的內(nèi)核分析

(1)任務(wù)狀態(tài)及狀態(tài)轉(zhuǎn)移

Salvo的用戶任務(wù)具有以下幾種狀態(tài):

①運(yùn)行狀態(tài)。任務(wù)占用系統(tǒng)資源正在運(yùn)行中,任務(wù)一時(shí)刻只能有一個(gè)任務(wù)可以處于運(yùn)行狀態(tài);

②就緒狀態(tài)。由于任務(wù)的優(yōu)先級(jí)不是最高優(yōu)先級(jí),任務(wù)正在等待運(yùn)行;

③延時(shí)狀態(tài)。任務(wù)先前已運(yùn)行過,現(xiàn)在暫停運(yùn)行等待延時(shí)時(shí)間到達(dá),一旦延時(shí)時(shí)間到達(dá),任務(wù)處于就緒狀態(tài);

④停止?fàn)顟B(tài)。任務(wù)先前已運(yùn)行過,現(xiàn)在由于某種確定原因暫停運(yùn)行,直到RTOS再次啟動(dòng)該任務(wù);

⑤等待狀態(tài)。任務(wù)暫停運(yùn)行,直到它的等待事件發(fā)生。

Salvo的任務(wù)狀態(tài)轉(zhuǎn)移圖如圖1所示。

(2)任務(wù)同步和通信

為保證應(yīng)用系統(tǒng)各任務(wù)的協(xié)調(diào)和信息傳輸,嵌入式操作系統(tǒng)需要同步和通信機(jī)制。一般采用信號(hào)量、事件標(biāo)志、消息和消息隊(duì)列實(shí)現(xiàn)任務(wù)間的同步和通信。

信號(hào)量(semaphores)分二進(jìn)制信號(hào)量和計(jì)數(shù)式信號(hào)量,用于表示事件的發(fā)生或?qū)蚕碣Y源的訪問。信號(hào)量使用前應(yīng)先采用OSCreateSem()函數(shù)產(chǎn)生,信號(hào)量接收的任務(wù)在處理中用OS_WaitSem()函數(shù)等待事件發(fā)生而掛起。一旦信號(hào)量發(fā)送,任務(wù)根據(jù)事件的發(fā)送情況用OSSignalSem()函數(shù)設(shè)置信號(hào)量,掛起的信號(hào)量接收任務(wù)繼續(xù)運(yùn)行。對(duì)于二進(jìn)制信號(hào)量,Salvo提供OSCreateBinSem()、OS_WaitBinSem()、OSSignalBinSem()等函數(shù)用于二進(jìn)制信號(hào)量的產(chǎn)生、等待和設(shè)置等功能。

圖2

    事件標(biāo)志(event flags)用于某任務(wù)與多個(gè)事件的同步。任務(wù)與多個(gè)事件的同步可以是獨(dú)立同步(邏輯或關(guān)系),也可以是關(guān)聯(lián)同步(邏輯與關(guān)系)。Salvo提供OSCreateEFlag()、OS_WaitEFlag、OSSignalEFlag()等函數(shù)用于事件標(biāo)志的產(chǎn)生、等待和設(shè)置等功能。

信號(hào)量和事件標(biāo)志只能用于傳遞事件的發(fā)生或?qū)蚕硎录脑L問,任務(wù)間其它信息的傳遞通過消息(messages)實(shí)現(xiàn)。消息可以傳遞各種信息,包括數(shù)值、字符、數(shù)組、函數(shù)、指針等。任務(wù)間傳遞的并非消息本身,而是指向消息的指針,消息內(nèi)容的含義由發(fā)送和接收消息的任務(wù)約定。Salvo提供OSCreateMsg()、OS_WaitMsg()、OSSignalMsg()等函數(shù)用于消息的產(chǎn)生、等待和設(shè)置等功能。消息隊(duì)列實(shí)際是消息陣列,用于任務(wù)或中斷服務(wù)程序(ISR)向一個(gè)或多個(gè)任務(wù)發(fā)送消息,隊(duì)列中的消息按先進(jìn)選出(FIFO)原則被任務(wù)讀取。Salvo提供OSCreateMsgQ()、OS_WaitMsg()、OSSignalMsgQ()等函數(shù)用于消息的產(chǎn)生、等待和設(shè)置等功能。

(3)任務(wù)調(diào)度和任務(wù)控制塊

Salvo是基于優(yōu)先級(jí)的嵌入式實(shí)時(shí)操作系統(tǒng),Salvo總是運(yùn)行就緒任務(wù)表中優(yōu)先級(jí)最高的任務(wù)。(Salvo允許2個(gè)以上任務(wù)處于同一優(yōu)先級(jí),同一優(yōu)先級(jí)任務(wù)按時(shí)間片輪轉(zhuǎn)調(diào)度)Salvo由函數(shù)OSSched()實(shí)現(xiàn)任務(wù)調(diào)度。

在任務(wù)切換過程中,被剝奪CPU使用權(quán)的任務(wù)必須保存該任務(wù)的當(dāng)前運(yùn)行狀態(tài),如CPU內(nèi)寄存器的值;而獲得CPU使用權(quán)的任務(wù)必須恢復(fù)前一次被剝奪CPU使用權(quán)時(shí)的運(yùn)行狀態(tài),繼續(xù)運(yùn)行。為完成這些功能,Salvo為每一個(gè)建立的任務(wù)建立一個(gè)任務(wù)控制埠(TCB)。任務(wù)控制埠是一個(gè)數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的CPU使用權(quán)被剝奪時(shí),Salvo用它來保存該任務(wù)的運(yùn)行狀態(tài);當(dāng)任務(wù)重新獲得CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷處繼續(xù)運(yùn)行。

3 Salvo的配置

當(dāng)了成功地編譯Salvo應(yīng)用程序,并使編譯后的目標(biāo)代碼小,系統(tǒng)運(yùn)行時(shí)占用RAM空間少,在編譯Salvo應(yīng)用程序時(shí),需要對(duì)Salvo進(jìn)行配置。

(1)目標(biāo)代碼建立方式

Salvo應(yīng)用程序目標(biāo)代碼建立方式有兩種:基于庫的建立和基于源泉代碼的建立。

在基于庫的目標(biāo)代碼建立中,Salvo提供的用戶函數(shù)包含在預(yù)編譯的Salvo庫文件中,Salvo應(yīng)用程序從用戶程序源代碼(包括C語言和匯編語言)、Salvo庫和Salvo的mem.c建立而成。由于Salvo庫是預(yù)先編譯的,應(yīng)用程序編譯時(shí)的配置文件對(duì)Salvo庫,即用戶函數(shù)無效?;趲斓哪繕?biāo)代碼建立過程如圖2所示。

在基于源代碼的目標(biāo)代碼建立中,Salvo提供用戶函數(shù)的源代碼。Salvo應(yīng)用程序從用戶程序源代碼、Salvo用戶函數(shù)源代碼(包括C語言和匯編語言)和Salvo的mem.c建立而成。由于Salvo用戶函數(shù)是源代碼形式,Salvo應(yīng)用程序編譯時(shí)的配置文件對(duì)Salvo的用戶函數(shù)有效?;谠创a的目標(biāo)代碼建立過程如圖3所示。

相對(duì)于基于庫的建立方式,基于源代碼的目標(biāo)代碼建立配置文件作用范圍更大,生成的目標(biāo)代碼更貼近應(yīng)用系統(tǒng)。即目標(biāo)代碼更小,運(yùn)行時(shí)占用RAM更少。

圖3

    (2)Salvo配置

Salvo的配置信息保存在應(yīng)用程序同一目標(biāo)的salvocfg.h文件中,文件以文本形式,每項(xiàng)配置操作通過C語言的#define語句實(shí)現(xiàn)。Salvo的配置主要有以下幾類操作:

①任務(wù)和事件—配置任務(wù)數(shù),開啟/關(guān)閉信號(hào)量、消息和消息隊(duì)列;

②大小指定—配置延時(shí)RAM、計(jì)數(shù)器、事件標(biāo)志、標(biāo)記的位數(shù);

③定時(shí)和標(biāo)記—開啟/關(guān)閉定時(shí)器;

④優(yōu)化操作—優(yōu)化運(yùn)行速度、消息隊(duì)列、全局變量等;

⑤監(jiān)視和調(diào)試—配置指針、延時(shí)、任務(wù)、事件的監(jiān)視;

⑥錯(cuò)誤檢查—開啟/關(guān)閉用戶函數(shù)錯(cuò)誤檢查;

⑦存儲(chǔ)器定位—配置Salvo對(duì)象在RAM中的位置。

典型的配置文件格式如下:

#define OSBYTES_OF_DELAYS 1

//設(shè)置延時(shí)RAM長度

#define OSENABLE_MESSAGES TRUE

//開啟消息處理功能

#define OSEVENTS 1

//設(shè)置應(yīng)用系統(tǒng)中事件數(shù)

#define OSTASKS 3

//設(shè)置應(yīng)用程序系統(tǒng)中任務(wù)數(shù)

4 結(jié)論

以上分析可知,嵌入式實(shí)時(shí)操作系統(tǒng)Salvo以其功能強(qiáng)大、內(nèi)核簡潔高效、占用資源少、可配置性強(qiáng)等特點(diǎn),非常適合于資源較少,特別是存儲(chǔ)器資源少的單片機(jī)系統(tǒng)使用。在單片機(jī)系統(tǒng)中嵌入實(shí)時(shí)操作系統(tǒng)Salvo,可大大縮短產(chǎn)品開發(fā)周期,提高可靠性,增強(qiáng)產(chǎn)品市場(chǎng)競(jìng)爭力。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉