利用實(shí)時(shí)內(nèi)核開發(fā)嵌入式多任務(wù)程序
摘要:嵌入式系統(tǒng)應(yīng)用日益復(fù)雜化,傳統(tǒng)的前臺(tái)/后臺(tái)程序開發(fā)機(jī)制已經(jīng)不能滿足需求,目前更多地采用搶占式實(shí)時(shí)內(nèi)核開發(fā)嵌入式多任務(wù)系統(tǒng)。實(shí)時(shí)內(nèi)核為多任務(wù)應(yīng)用程序提供最基本和最重要的服務(wù)。本文介紹實(shí)時(shí)內(nèi)核和多任務(wù),并提出利用實(shí)時(shí)內(nèi)核進(jìn)行系統(tǒng)開發(fā)時(shí),根據(jù)系統(tǒng)功能合理構(gòu)成任務(wù)的方法。關(guān)鍵詞:實(shí)時(shí)內(nèi)核 多任務(wù) 任務(wù)構(gòu)造 嵌入式系統(tǒng)
隨著嵌入式系統(tǒng)的廣泛使用,傳統(tǒng)的前臺(tái)/后臺(tái)程序開發(fā)機(jī)制已經(jīng)不能滿足日益復(fù)雜和多樣化的嵌入式應(yīng)用需求,因而常常采用嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核(簡(jiǎn)稱實(shí)時(shí)內(nèi)核)開發(fā)實(shí)時(shí)多任務(wù)程序。嵌入式實(shí)時(shí)內(nèi)核提供多任務(wù)、任務(wù)管理、時(shí)間管理、任務(wù)間通信和同步、內(nèi)存管理等重要服務(wù),使嵌入式應(yīng)用程序容易設(shè)計(jì)和擴(kuò)展。內(nèi)核是管理微處理器或者微控制器時(shí)間的軟件,確保所有時(shí)間關(guān)鍵的事件盡可能高效地得到處理;允許將系統(tǒng)分成多個(gè)獨(dú)立的任務(wù),每個(gè)任務(wù)處理程序的一部分,從而簡(jiǎn)化系統(tǒng)的設(shè)計(jì)過程。
一、非搶占式內(nèi)核和搶占式內(nèi)核
實(shí)時(shí)內(nèi)核分為兩種:非搶占式內(nèi)核和搶占式內(nèi)核。這兩種內(nèi)核都由中斷服務(wù)例程(ISR)處理異步事件。在非搶占式內(nèi)核中,一個(gè)ISR使優(yōu)先級(jí)更高的任務(wù)就緒,并不立即將CPU控制權(quán)交給優(yōu)先級(jí)高的任務(wù),而是返回到被中斷的當(dāng)前任務(wù)。只有當(dāng)前任務(wù)執(zhí)行某種操作明確放棄CPU時(shí),優(yōu)先級(jí)高的新任務(wù)才得到CPU控制權(quán)。非搶占式內(nèi)核對(duì)實(shí)時(shí)事件的響應(yīng)時(shí)間不確定,因而極少在實(shí)時(shí)應(yīng)用中使用。圖1所示為非搶占式內(nèi)核程序流程:①低優(yōu)先級(jí)任務(wù)(LPT)執(zhí)行;②低優(yōu)先級(jí)任務(wù)被中斷;③執(zhí)行中斷服務(wù)例程,使高優(yōu)先級(jí)任務(wù)(HPT)就緒;④中斷服務(wù)例程返回到被中斷的低優(yōu)先級(jí)任務(wù);⑤低優(yōu)先級(jí)任務(wù)繼續(xù)執(zhí)行;⑥低優(yōu)先級(jí)任務(wù)放棄CPU;⑦高優(yōu)先級(jí)任務(wù)運(yùn)行。
目前在大多數(shù)嵌入式實(shí)時(shí)多任務(wù)系統(tǒng)應(yīng)用中,對(duì)系統(tǒng)實(shí)時(shí)響應(yīng)要求很高,因此采用搶占式內(nèi)核確保時(shí)間關(guān)鍵的任務(wù)最先執(zhí)行,使優(yōu)先級(jí)最高的就緒任務(wù)總是最先得到CPU控制權(quán)。優(yōu)先級(jí)低的當(dāng)前任務(wù)能夠被優(yōu)先級(jí)更高的任務(wù)搶占,暫時(shí)掛起執(zhí)行,將CPU控制權(quán)交給優(yōu)先級(jí)高的任務(wù)。圖2所示為搶占式內(nèi)核程序流程:①低優(yōu)先級(jí)任務(wù)執(zhí)行;②異步事件使任務(wù)中斷;③響應(yīng)異步事件,運(yùn)行中斷服務(wù)例程,使高優(yōu)先級(jí)任務(wù)就緒;④中斷服務(wù)例程返回到高優(yōu)先級(jí)任務(wù);⑤高優(yōu)先級(jí)任務(wù)執(zhí)行,直到它被中斷轉(zhuǎn)向執(zhí)行優(yōu)先級(jí)更高的任務(wù);⑥高優(yōu)先級(jí)任務(wù)結(jié)束,內(nèi)核切換到低優(yōu)先級(jí)任務(wù);⑦低優(yōu)先級(jí)任務(wù)繼續(xù)執(zhí)行。
二、多任務(wù)
利用實(shí)時(shí)內(nèi)核開發(fā)嵌入式多任務(wù)系統(tǒng)程序,要根據(jù)明確的設(shè)計(jì)目的確認(rèn)系統(tǒng)功能,將系統(tǒng)功能合理分解,構(gòu)造不同的任務(wù),使每個(gè)任務(wù)負(fù)責(zé)完成應(yīng)用要求的一部分功能;并根據(jù)任務(wù)相對(duì)于其他任務(wù)的重要性決定其優(yōu)先級(jí)。多個(gè)任務(wù)彼此獨(dú)立運(yùn)行,具有獨(dú)立的私有堆棧空間,在被其他進(jìn)程搶占時(shí)能夠保持任務(wù)執(zhí)行線程的上下文。
1.任務(wù)
任務(wù)是單線程序列指令形成的一個(gè)無限循環(huán),在系統(tǒng)程序中用函數(shù)表示(如下)。任務(wù)執(zhí)行時(shí)要調(diào)用內(nèi)核提供的服務(wù),以等待某個(gè)事件發(fā)生。事件可以是定時(shí)間,或者是另一個(gè)任務(wù)、一個(gè)中斷服務(wù)例程發(fā)出事件通知。
Void Task (void)
[1] [2] [3] [4]