www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]利用實時內(nèi)核開發(fā)嵌入式多任務(wù)程序

摘要:嵌入式系統(tǒng)應(yīng)用日益復(fù)雜化,傳統(tǒng)的前臺/后臺程序開發(fā)機制已經(jīng)不能滿足需求,目前更多地采用搶占式實時內(nèi)核開發(fā)嵌入式多任務(wù)系統(tǒng)。實時內(nèi)核為多任務(wù)應(yīng)用程序提供最基本和最重要的服務(wù)。本文介紹實時內(nèi)核和多任務(wù),并提出利用實時內(nèi)核進行系統(tǒng)開發(fā)時,根據(jù)系統(tǒng)功能合理構(gòu)成任務(wù)的方法。

    關(guān)鍵詞:實時內(nèi)核 多任務(wù) 任務(wù)構(gòu)造 嵌入式系統(tǒng)

隨著嵌入式系統(tǒng)的廣泛使用,傳統(tǒng)的前臺/后臺程序開發(fā)機制已經(jīng)不能滿足日益復(fù)雜和多樣化的嵌入式應(yīng)用需求,因而常常采用嵌入式實時操作系統(tǒng)內(nèi)核(簡稱實時內(nèi)核)開發(fā)實時多任務(wù)程序。嵌入式實時內(nèi)核提供多任務(wù)、任務(wù)管理、時間管理、任務(wù)間通信和同步、內(nèi)存管理等重要服務(wù),使嵌入式應(yīng)用程序容易設(shè)計和擴展。內(nèi)核是管理微處理器或者微控制器時間的軟件,確保所有時間關(guān)鍵的事件盡可能高效地得到處理;允許將系統(tǒng)分成多個獨立的任務(wù),每個任務(wù)處理程序的一部分,從而簡化系統(tǒng)的設(shè)計過程。

一、非搶占式內(nèi)核和搶占式內(nèi)核

實時內(nèi)核分為兩種:非搶占式內(nèi)核和搶占式內(nèi)核。這兩種內(nèi)核都由中斷服務(wù)例程(ISR)處理異步事件。在非搶占式內(nèi)核中,一個ISR使優(yōu)先級更高的任務(wù)就緒,并不立即將CPU控制權(quán)交給優(yōu)先級高的任務(wù),而是返回到被中斷的當前任務(wù)。只有當前任務(wù)執(zhí)行某種操作明確放棄CPU時,優(yōu)先級高的新任務(wù)才得到CPU控制權(quán)。非搶占式內(nèi)核對實時事件的響應(yīng)時間不確定,因而極少在實時應(yīng)用中使用。圖1所示為非搶占式內(nèi)核程序流程:①低優(yōu)先級任務(wù)(LPT)執(zhí)行;②低優(yōu)先級任務(wù)被中斷;③執(zhí)行中斷服務(wù)例程,使高優(yōu)先級任務(wù)(HPT)就緒;④中斷服務(wù)例程返回到被中斷的低優(yōu)先級任務(wù);⑤低優(yōu)先級任務(wù)繼續(xù)執(zhí)行;⑥低優(yōu)先級任務(wù)放棄CPU;⑦高優(yōu)先級任務(wù)運行。

目前在大多數(shù)嵌入式實時多任務(wù)系統(tǒng)應(yīng)用中,對系統(tǒng)實時響應(yīng)要求很高,因此采用搶占式內(nèi)核確保時間關(guān)鍵的任務(wù)最先執(zhí)行,使優(yōu)先級最高的就緒任務(wù)總是最先得到CPU控制權(quán)。優(yōu)先級低的當前任務(wù)能夠被優(yōu)先級更高的任務(wù)搶占,暫時掛起執(zhí)行,將CPU控制權(quán)交給優(yōu)先級高的任務(wù)。圖2所示為搶占式內(nèi)核程序流程:①低優(yōu)先級任務(wù)執(zhí)行;②異步事件使任務(wù)中斷;③響應(yīng)異步事件,運行中斷服務(wù)例程,使高優(yōu)先級任務(wù)就緒;④中斷服務(wù)例程返回到高優(yōu)先級任務(wù);⑤高優(yōu)先級任務(wù)執(zhí)行,直到它被中斷轉(zhuǎn)向執(zhí)行優(yōu)先級更高的任務(wù);⑥高優(yōu)先級任務(wù)結(jié)束,內(nèi)核切換到低優(yōu)先級任務(wù);⑦低優(yōu)先級任務(wù)繼續(xù)執(zhí)行。

二、多任務(wù)

利用實時內(nèi)核開發(fā)嵌入式多任務(wù)系統(tǒng)程序,要根據(jù)明確的設(shè)計目的確認系統(tǒng)功能,將系統(tǒng)功能合理分解,構(gòu)造不同的任務(wù),使每個任務(wù)負責完成應(yīng)用要求的一部分功能;并根據(jù)任務(wù)相對于其他任務(wù)的重要性決定其優(yōu)先級。多個任務(wù)彼此獨立運行,具有獨立的私有堆棧空間,在被其他進程搶占時能夠保持任務(wù)執(zhí)行線程的上下文。

1.任務(wù)

任務(wù)是單線程序列指令形成的一個無限循環(huán),在系統(tǒng)程序中用函數(shù)表示(如下)。任務(wù)執(zhí)行時要調(diào)用內(nèi)核提供的服務(wù),以等待某個事件發(fā)生。事件可以是定時間,或者是另一個任務(wù)、一個中斷服務(wù)例程發(fā)出事件通知。

Void Task (void)

{

While (true) {

Run Application-specific codes;

Wait for event by calling a service provided by the kernel;

Run Application - specific codes;

}

}

2.任務(wù)管理

每個任務(wù)有5種狀態(tài);休眠、就緒、運行、等待、中斷。圖3所示為任務(wù)之間的狀態(tài)轉(zhuǎn)換。休眠狀態(tài)的任務(wù)駐留在存儲器中,還未被內(nèi)核使用;就緒狀態(tài)的任務(wù)準備執(zhí)行,優(yōu)先級低于當前執(zhí)行的任務(wù),沒有得到CPU控制權(quán);任務(wù)得到CPU控制權(quán)后就處于運行狀態(tài);等待事件發(fā)生的任務(wù)處于等待狀態(tài),事件可以是I/O操作完成、共享資源可以利用、時鐘脈沖發(fā)生等;任務(wù)執(zhí)行過程被中斷服務(wù)例程中斷,任務(wù)就處于中斷狀態(tài)。

實時內(nèi)核通過任務(wù)控制塊(TCB)管理任務(wù)。TCB數(shù)據(jù)結(jié)構(gòu)中包括任務(wù)的狀態(tài)、優(yōu)先、指向任務(wù)棧頂?shù)闹羔槨⒁约捌渌c內(nèi)核有關(guān)的信息。程序調(diào)用內(nèi)核服務(wù)(如調(diào)用內(nèi)核函數(shù)OSTaskCreate)創(chuàng)建任務(wù),為此任務(wù)在內(nèi)存中分配一個TCB、進行初始化,使任務(wù)從休眠狀態(tài)轉(zhuǎn)變到就緒狀態(tài)。任務(wù)可以在多任務(wù)執(zhí)行之前靜態(tài)創(chuàng)建,也可以在多任務(wù)執(zhí)行過程動態(tài)創(chuàng)建。

內(nèi)核為實時多任務(wù)應(yīng)用程序提供任務(wù)調(diào)度和轉(zhuǎn)換、任務(wù)間通信、定時順等服務(wù),并作為系統(tǒng)調(diào)用提供給任務(wù)使用。實時內(nèi)核以事件為基礎(chǔ)、根據(jù)任務(wù)執(zhí)行狀態(tài)對任務(wù)進行切換,任務(wù)的狀態(tài)也隨之相應(yīng)改變。在實時多任務(wù)程序中,內(nèi)存中存在多個任務(wù)控制塊以及各個任務(wù)獨立的私有堆棧。進行任務(wù)切換首先要保存CPU寄存器內(nèi)容到當前任務(wù)堆棧,將堆棧指針保存到當前任務(wù)的TCB中,然后從新任務(wù)的TCB中裝載堆棧指針,并將新任務(wù)上下文裝載到CPU寄存器中。這樣就從一個任務(wù)轉(zhuǎn)換到另一個任務(wù)運行。任務(wù)使用這時內(nèi)核提供的定時器系統(tǒng)調(diào)用,可以保持休眠狀態(tài)一段時間,或者等待一段時間后成為就緒狀態(tài)。在實時嵌入式系統(tǒng)中,外部中斷事件產(chǎn)生的任務(wù)具有高優(yōu)先級,因而以搶占方式獲得CPU控制權(quán)。

三、任務(wù)構(gòu)造

1.I/O任務(wù)構(gòu)造

根據(jù)3種不同的I/O事件;中斷驅(qū)動事件、輪詢事件、輸出事件來構(gòu)造I/O任務(wù)。輪詢事件通常由1個任務(wù)實現(xiàn),實時內(nèi)核以固定周期對此任務(wù)進行調(diào)度,輸出事件常被設(shè)計為可重入程序而不是任務(wù);中斷驅(qū)動事件是一類典型的異步事件。

下面將以1個簡單的串行設(shè)備驅(qū)動程序來說明I/O分解,突出I/O任務(wù)構(gòu)造的重要特征。此設(shè)備分配得到1個中斷向量,在3種情況下產(chǎn)生中斷:接收到字符、輸出就緒、設(shè)備出錯。因為采用搶占式內(nèi)核,在I/O中斷發(fā)生進入中斷處理例程以后,程序要保存處理器狀態(tài),并根據(jù)不同的中斷原因進行任務(wù)調(diào)度;在中斷處理完成退出中斷處理例程之前,還要恢復(fù)處理器狀態(tài)。

設(shè)備中斷處理:

IF 接收到字符THEN

將字符放入字符接收隊列;

執(zhí)行接收任務(wù);

IF 輸出就緒 THEN

IF 繼續(xù)輸出 THEN

送下一個字符;

ELSE

保存"設(shè)備輸出就緒"情況;

IF 設(shè)備出錯 THEN

將錯誤狀態(tài)放入錯誤隊列;

執(zhí)行出錯處理任務(wù);

接收任務(wù):

Void Task_receive()

{

While (true){

Wait on input char queue;

If end of input string then

Process input string;

Else

Save input;

}

}

對于中斷事件要合理劃分事件的處理級別,盡可能多地在任務(wù)級處理,從而最小化系統(tǒng)中斷延遲。對這個串行設(shè)備驅(qū)動中斷的處理就是一個劃分事件到中斷級和任務(wù)級處理的例子。中斷服務(wù)例程及時響應(yīng)實時中斷,將實時要求相對低一些的事件(如字符出錯、出錯狀態(tài)處理)交給不同的任務(wù)處理。隊列是內(nèi)核提供的一種任務(wù)間通信結(jié)構(gòu),支持消息發(fā)送者和接收者異步訪問。在這里用于驅(qū)動程序和任務(wù)之間的通信,為驅(qū)動程序進程和任務(wù)進程提供消息緩沖。設(shè)備驅(qū)動程序負責及時響應(yīng)中斷事件,并不關(guān)心接收任務(wù)的狀態(tài)。為了簡化接收任務(wù)的結(jié)構(gòu),減小系統(tǒng)延遲,這里將出錯處理劃分為獨立的任務(wù),分配不同的優(yōu)先級。

    2.內(nèi)部任務(wù)構(gòu)造

系統(tǒng)內(nèi)部任務(wù)可以分為:①周期性任務(wù)--實時內(nèi)核基于固定周期調(diào)度的任務(wù);②異步任務(wù)--非周期或事件驅(qū)動的任務(wù),內(nèi)核根據(jù)需要進行調(diào)度,用于處理系統(tǒng)內(nèi)部產(chǎn)生的事件;③控制對象--為狀態(tài)機創(chuàng)建的控制任務(wù),用于實現(xiàn)狀態(tài)轉(zhuǎn)換;④用戶接口⑤--對應(yīng)于用戶任務(wù),在用戶驅(qū)動的系統(tǒng)中,用戶任務(wù)是具有高優(yōu)先級。

在嵌入式實時多任務(wù)系統(tǒng)中,大部分任務(wù)是非周期或事件驅(qū)動的異步任務(wù),其函數(shù)形式如下:

Void Task_aperiodic ()

{

While (true){

Wait on an async data structure;

Process input;

Process output;

}

}

在異步任務(wù)中,驅(qū)動任務(wù)的異步數(shù)據(jù)是由實時內(nèi)核提供的任務(wù)間通信數(shù)據(jù)。內(nèi)核為應(yīng)用程序提供信號量、消息隊列、消息郵箱、插口或管道等結(jié)構(gòu),進行事件管理和任務(wù)間通信。設(shè)計這些異步任務(wù)時采用合適的數(shù)據(jù)結(jié)構(gòu)、正確定義數(shù)據(jù)能夠節(jié)省寶貴的調(diào)試時間,而且任務(wù)處理的函數(shù)不能太多,過于復(fù)雜,否則會增加調(diào)試的難度。

3.任務(wù)合并

利用任務(wù)的共同特征進行適當?shù)娜蝿?wù)合并,可以簡化系統(tǒng)任務(wù)模型、減小系統(tǒng)復(fù)雜度、消除某些任務(wù)的切換開銷從而減少系統(tǒng)總體開銷。任務(wù)合并可分為:①根據(jù)時間一致合并,將同一事件激活的優(yōu)先級相同的函數(shù)合并在1個任務(wù)中;②根據(jù)控制一致合并,③根據(jù)函數(shù)一致合并,將幾個使用相同數(shù)據(jù)的函數(shù)合并,使原來共享的數(shù)據(jù)成為任務(wù)內(nèi)的局部數(shù)據(jù),從而減少互斥。

結(jié)束語

目前有許多廠商提供面向嵌入式應(yīng)用領(lǐng)域的實時操作系統(tǒng)(RTOS),提供實時內(nèi)核、輸入/輸出管理器、窗口系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)、語言接口庫、調(diào)試器和交叉平臺編譯器的軟件包。其中實時內(nèi)核為嵌入式多任務(wù)程序提供最基本和最重要的功能。本文從利用實時內(nèi)核開發(fā)多任務(wù)應(yīng)用程序的角度,對實時內(nèi)核和任務(wù)進行介紹,提出合理構(gòu)造任務(wù)的方法??梢钥吹剑脤崟r內(nèi)核提供的服務(wù),采用正確的開發(fā)方法,可以增加嵌入式實時多任務(wù)系統(tǒng)的功能,降低開發(fā)方法,可以增加嵌入式實時多任務(wù)系統(tǒng)的功能,降低開發(fā)難度。

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉