利用實時內(nèi)核開發(fā)嵌入式多任務程序

利用實時內(nèi)核開發(fā)嵌入式多任務程序

ID:9728169

大小:60.00 KB

頁數(shù):9頁

時間:2018-05-06

利用實時內(nèi)核開發(fā)嵌入式多任務程序_第1頁
利用實時內(nèi)核開發(fā)嵌入式多任務程序_第2頁
利用實時內(nèi)核開發(fā)嵌入式多任務程序_第3頁
利用實時內(nèi)核開發(fā)嵌入式多任務程序_第4頁
利用實時內(nèi)核開發(fā)嵌入式多任務程序_第5頁
資源描述:

《利用實時內(nèi)核開發(fā)嵌入式多任務程序》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在應用文檔-天天文庫。

1、利用實時內(nèi)核開發(fā)嵌入式多任務程序

2、第1內(nèi)容顯示中摘要:嵌入式系統(tǒng)應用日益復雜化,傳統(tǒng)的前臺/后臺程序開發(fā)機制已經(jīng)不能滿足需求,目前更多地采用搶占式實時內(nèi)核開發(fā)嵌入式多任務系統(tǒng)。實時內(nèi)核為多任務應用程序提供最基本和最重要的服務。本文介紹實時內(nèi)核和多任務,并提出利用實時內(nèi)核進行系統(tǒng)開發(fā)時,根據(jù)系統(tǒng)功能合理構成任務的方法。關鍵詞:實時內(nèi)核多任務任務構造嵌入式系統(tǒng)隨著嵌入式系統(tǒng)的廣泛使用,傳統(tǒng)的前臺/后臺程序開發(fā)機制已經(jīng)不能滿足日益復雜和多樣化的嵌入式應用需求,因而常常采用嵌入式實時操作系統(tǒng)內(nèi)核(簡稱實時內(nèi)核)開發(fā)實時多任務程序。嵌入式實時內(nèi)核提供多任務、任務管理、

3、時間管理、任務間通信和同步、內(nèi)存管理等重要服務,使嵌入式應用程序容易設計和擴展。內(nèi)核是管理微處理器或者微控制器時間的軟件,確保所有時間關鍵的事件盡可能高效地得到處理;允許將系統(tǒng)分成多個獨立的任務,每個任務處理程序的一部分,從而簡化系統(tǒng)的設計過程。一、非搶占式內(nèi)核和搶占式內(nèi)核實時內(nèi)核分為兩種:非搶占式內(nèi)核和搶占式內(nèi)核。這兩種內(nèi)核都由中斷服務例程(ISR)處理異步事件。在非搶占式內(nèi)核中,一個ISR使優(yōu)先級更高的任務就緒,并不立即將CPU控制權交給優(yōu)先級高的任務,而是返回到被中斷的當前任務。只有當前任務執(zhí)行某種操作明確放棄CPU時,優(yōu)先級高的新任務才得到CPU控制

4、權。非搶占式內(nèi)核對實時事件的響應時間不確定,因而極少在實時應用中使用。圖1所示為非搶占式內(nèi)核程序流程:①低優(yōu)先級任務(LPT)執(zhí)行;②低優(yōu)先級任務被中斷;③執(zhí)行中斷服務例程,使高優(yōu)先級任務(HPT)就緒;④中斷服務例程返回到被中斷的低優(yōu)先級任務;⑤低優(yōu)先級任務繼續(xù)執(zhí)行;⑥低優(yōu)先級任務放棄CPU;⑦高優(yōu)先級任務運行。目前在大多數(shù)嵌入式實時多任務系統(tǒng)應用中,對系統(tǒng)實時響應要求很高,因此采用搶占式內(nèi)核確保時間關鍵的任務最先執(zhí)行,使優(yōu)先級最高的就緒任務總是最先得到CPU控制權。優(yōu)先級低的當前任務能夠被優(yōu)先級更高的任務搶占,暫時掛起執(zhí)行,將CPU控制權交給優(yōu)先級高的任

5、務。圖2所示為搶占式內(nèi)核程序流程:①低優(yōu)先級任務執(zhí)行;②異步事件使任務中斷;③響應異步事件,運行中斷服務例程,使高優(yōu)先級任務就緒;④中斷服務例程返回到高優(yōu)先級任務;⑤高優(yōu)先級任務執(zhí)行,直到它被中斷轉(zhuǎn)向執(zhí)行優(yōu)先級更高的任務;⑥高優(yōu)先級任務結束,內(nèi)核切換到低優(yōu)先級任務;⑦低優(yōu)先級任務繼續(xù)執(zhí)行。二、多任務利用實時內(nèi)核開發(fā)嵌入式多任務系統(tǒng)程序,要根據(jù)明確的設計目的確認系統(tǒng)功能,將系統(tǒng)功能合理分解,構造不同的任務,使每個任務負責完成應用要求的一部分功能;并根據(jù)任務相對于其他任務的重要性決定其優(yōu)先級。多個任務彼此獨立運行,具有獨立的私有堆棧空間,在被其他進程搶占時能夠保

6、持任務執(zhí)行線程的上下文。1.任務任務是單線程序列指令形成的一個無限循環(huán),在系統(tǒng)程序中用函數(shù)表示(如下)。任務執(zhí)行時要調(diào)用內(nèi)核提供的服務,以等待某個事件發(fā)生。事件可以是定時間,或者是另一個任務、一個中斷服務例程發(fā)出事件通知。VoidTask(void){While(true){RunApplication-specificcodes;Waitforeventbycallingaserviceprovidedbythekernel;RunApplication-specificcodes;}}2.任務管理每個任務有5種狀態(tài);休眠、就緒、運行、等待、中斷。圖3所示

7、為任務之間的狀態(tài)轉(zhuǎn)換。休眠狀態(tài)的任務駐留在存儲器中,還未被內(nèi)核使用;就緒狀態(tài)的任務準備執(zhí)行,優(yōu)先級低于當前執(zhí)行的任務,沒有得到CPU控制權;任務得到CPU控制權后就處于運行狀態(tài);等待事件發(fā)生的任務處于等待狀態(tài),事件可以是I/O操作完成、共享資源可以利用、時鐘脈沖發(fā)生等;任務執(zhí)行過程被中斷服務例程中斷,任務就處于中斷狀態(tài)。實時內(nèi)核通過任務控制塊(TCB)管理任務。TCB數(shù)據(jù)結構中包括任務的狀態(tài)、優(yōu)先、指向任務棧頂?shù)闹羔?、以及其他與內(nèi)核有關的信息。程序調(diào)用內(nèi)核服務(如調(diào)用內(nèi)核函數(shù)OSTaskCreate)創(chuàng)建任務,為此任務在內(nèi)存中分配一個TCB、進行初始化,使任

8、務從休眠狀態(tài)轉(zhuǎn)變到就緒狀態(tài)。任務可以在多任務執(zhí)行之前靜態(tài)創(chuàng)建,也可以在多任務執(zhí)行過程動態(tài)創(chuàng)建。內(nèi)核為實時多任務應用程序提供任務調(diào)度和轉(zhuǎn)換、任務間通信、定時順等服務,并作為系統(tǒng)調(diào)用提供給任務使用。實時內(nèi)核以事件為基礎、根據(jù)任務執(zhí)行狀態(tài)對任務進行切換,任務的狀態(tài)也隨之相應改變。在實時多任務程序中,內(nèi)存中存在多個任務控制塊以及各個任務獨立的私有堆棧。進行任務切換首先要保存CPU寄存器內(nèi)容到當前任務堆棧,將堆棧指針保存到當前任務的TCB中,然后從新任務的TCB中裝載堆棧指針,并將新任務上下文裝載到CPU寄存器中。這樣就從一個任務轉(zhuǎn)換到另一個任務運行。任務使用這時內(nèi)核

9、提供的定時器系統(tǒng)調(diào)用,可以保持休眠狀態(tài)一段時間,或者

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。