李鵬
摘 要:在51單片機(jī)上實(shí)現(xiàn)多任務(wù)處理主要借鑒現(xiàn)代操作系統(tǒng)的分時(shí)處理方法,有幾種不同的實(shí)現(xiàn)策略。本文將基于此背景,討論51單片機(jī)多任務(wù)編程的設(shè)計(jì)和應(yīng)用,詳細(xì)闡述其實(shí)現(xiàn)策略。
關(guān)鍵詞:51單片機(jī);多任務(wù)編程;操作系統(tǒng)
單片機(jī)技術(shù)經(jīng)歷幾十年的發(fā)展逐步走向成熟,被廣泛應(yīng)用于各行業(yè)。51單片機(jī)指兼容Intel8031系統(tǒng)的單片機(jī)系統(tǒng),在智能控制領(lǐng)域有廣泛的引用[ 1 ]。
一、多任務(wù)執(zhí)行原理
51單片機(jī)的多任務(wù)執(zhí)行機(jī)制主要借鑒現(xiàn)代操作系統(tǒng)的分時(shí)處理方法。事實(shí)上,多任務(wù)執(zhí)行并非多個(gè)任務(wù)同時(shí)運(yùn)行,而是CPU在不同的任務(wù)之間不停的切換,每次執(zhí)行一個(gè)任務(wù)的一小部分,之后迅速切換至下一個(gè)任務(wù),并執(zhí)行這個(gè)任務(wù)的一小部分,然后在切換至另一個(gè)任務(wù),以此循環(huán)往復(fù)。
從宏觀上來(lái)看,就好像多個(gè)任務(wù)在同時(shí)執(zhí)行。系統(tǒng)通過(guò)合理的調(diào)度,將CPU的運(yùn)行時(shí)間合理分配給各個(gè)任務(wù),每個(gè)任務(wù)輪流占用一小部分時(shí)間。這就是現(xiàn)代操作系統(tǒng)分時(shí)機(jī)制的原理[ 3 ], 也是51單片機(jī)多任務(wù)執(zhí)行的基本方法。
二、實(shí)現(xiàn)策略
51單片機(jī)多任務(wù)執(zhí)行機(jī)制針對(duì)不同的應(yīng)用場(chǎng)景和不同的單片機(jī)型號(hào),在具體實(shí)現(xiàn)上有所區(qū)別,但從根本上來(lái)說(shuō)都是以現(xiàn)代操作系統(tǒng)分時(shí)理論為基礎(chǔ)來(lái)實(shí)現(xiàn)的。下面將詳細(xì)講解具體如何使用時(shí)間片分配機(jī)制來(lái)實(shí)現(xiàn)51單片機(jī)的多任務(wù)執(zhí)行。
基于時(shí)間片分配機(jī)制來(lái)實(shí)現(xiàn)51單片機(jī)多任務(wù)執(zhí)行主要涉及三項(xiàng)內(nèi)容。一是待執(zhí)行程序,以列表形式組織,二是運(yùn)算資源,也就是CPU,三是調(diào)度器,用于統(tǒng)籌安排待執(zhí)行程序的執(zhí)行順序,合理給各待執(zhí)行程序分配運(yùn)算資源。具體的運(yùn)行機(jī)制如下。
首先,在初始化階段,待執(zhí)行任務(wù)被組織為列表,然后調(diào)度器根據(jù)具體情況為各個(gè)任務(wù)分配不同數(shù)量的時(shí)間片。
然后在調(diào)度器的組織下,各個(gè)任務(wù)依次占用CPU,占用時(shí)間為各自對(duì)應(yīng)數(shù)量的時(shí)間片。
通常來(lái)說(shuō),根據(jù)具體情況不同,各任務(wù)占用的時(shí)間片數(shù)目有所區(qū)別,但總數(shù)量都不會(huì)很多,CPU只執(zhí)行任務(wù)的一小部分,然后迅速切換至下一個(gè)任務(wù)。
當(dāng)CPU遍歷整個(gè)任務(wù)列表把所有任務(wù)的指定時(shí)間片都執(zhí)行完畢之后,系統(tǒng)通過(guò)調(diào)度器從新為列表內(nèi)的任務(wù)分配新的時(shí)間片數(shù)量,然后開(kāi)始新一輪的運(yùn)行。
三、涉及的問(wèn)題及解決方法
在采用分時(shí)機(jī)制來(lái)實(shí)現(xiàn)多任務(wù)運(yùn)行時(shí),涉及的問(wèn)題主要包括。
(一)常規(guī)任務(wù)
通常來(lái)說(shuō),系統(tǒng)需要執(zhí)行的任務(wù)分為兩類(lèi),一類(lèi)是立刻開(kāi)始執(zhí)行的任務(wù),這類(lèi)任務(wù)我們稱為實(shí)時(shí)任務(wù);另一類(lèi)任務(wù)需要觸發(fā)條件,只有在滿足特定的條件時(shí),這類(lèi)任務(wù)才會(huì)被執(zhí)行,這種任務(wù)我們稱為常規(guī)任務(wù)。
實(shí)時(shí)任務(wù)可以直接安排進(jìn)入上文的所談到的待執(zhí)行任務(wù)列表內(nèi),CPU依次執(zhí)行各實(shí)時(shí)任務(wù)。而常規(guī)任務(wù)需要一定設(shè)置。具體方法是為每一個(gè)常規(guī)任務(wù)設(shè)置一個(gè)空過(guò)程,在CPU運(yùn)行至常規(guī)任務(wù)時(shí),進(jìn)行一次判斷。假如不滿足常規(guī)任務(wù)的執(zhí)行條件,則執(zhí)行空過(guò)程,CPU跳轉(zhuǎn)至下一個(gè)任務(wù);若滿足常規(guī)任務(wù)的執(zhí)行條件,則屏蔽空過(guò)程,CPU執(zhí)行常規(guī)任務(wù)。
(二)延時(shí)等待
在執(zhí)行任務(wù)時(shí),會(huì)涉及數(shù)據(jù)讀取,外部通訊等各種情況,就必然會(huì)有延時(shí)和等待的情況出現(xiàn)。假如不對(duì)延時(shí)等待進(jìn)行調(diào)度,CPU有可能一直延時(shí)或等待,無(wú)法繼續(xù)運(yùn)行。針對(duì)延時(shí)等待的處理方法如下。
設(shè)計(jì)一個(gè)專門(mén)的任務(wù)來(lái)代表延時(shí)和等待,這個(gè)任務(wù)具有特定的時(shí)間片數(shù)目。每當(dāng)CPU遇到延時(shí)等待情況時(shí),調(diào)度器將CPU自動(dòng)切換至這個(gè)特定的任務(wù),CPU在這個(gè)任務(wù)內(nèi)執(zhí)行(等待)固定的時(shí)間片數(shù)目,然后跳轉(zhuǎn)至下一個(gè)任務(wù)。
比如,我們假設(shè)這個(gè)特定的代表延時(shí)等待的任務(wù)為任務(wù)7,為其分配1個(gè)時(shí)間片,整個(gè)任務(wù)列表包含20個(gè)任務(wù),任務(wù)6在執(zhí)行的過(guò)程中需要等待外部設(shè)備的響應(yīng)。
在這個(gè)假設(shè)內(nèi),當(dāng)CPU運(yùn)行至任務(wù)6后,在執(zhí)行任務(wù)的過(guò)程中遭遇等待,此時(shí)CPU直接切換至任務(wù)7,并空運(yùn)轉(zhuǎn)(等待)1個(gè)時(shí)間片,之后迅速切換至任務(wù)8,繼續(xù)運(yùn)行。當(dāng)CPU運(yùn)行至任務(wù)6時(shí),假如任務(wù)6還是需要等待,則又迅速切換至任務(wù)7,空運(yùn)轉(zhuǎn)(等待)1個(gè)時(shí)間片,然后繼續(xù)執(zhí)行其它任務(wù)。
通過(guò)將延時(shí)和等待設(shè)計(jì)為一個(gè)特定的任務(wù),可以更方便的管理延時(shí)和等待問(wèn)題。在具體的實(shí)現(xiàn)過(guò)程中,可以采用預(yù)先插入代表等待的空任務(wù),也可以在遭遇延時(shí)和等待時(shí),讓調(diào)度器動(dòng)態(tài)生成代表等待的空任務(wù)并插入列表??杖蝿?wù)占用的時(shí)間片也可以設(shè)置為0,這樣可以最大化CPU的運(yùn)行效率。
(三)中斷處理
在具體的應(yīng)用中,主要涉及的中斷通常來(lái)說(shuō)包含兩類(lèi),一類(lèi)是外部中斷,即來(lái)自于外部設(shè)備的中斷,比如外部設(shè)備向CPU提出需求[6];另一類(lèi)是內(nèi)部任務(wù)的中斷,即一些待執(zhí)行任務(wù)提出的CPU需求[7]。對(duì)于這兩種中斷,可以采用一種方法來(lái)統(tǒng)一處理。
在傳統(tǒng)的實(shí)現(xiàn)方法下,當(dāng)任務(wù)運(yùn)行過(guò)程遭遇中斷時(shí),調(diào)度器會(huì)將整個(gè)CPU的控制權(quán)交給中斷程序,直到中斷程序退出。在這種機(jī)制下,一旦普通任務(wù)遭遇中斷,CPU的控制權(quán)就喪失,待執(zhí)行任務(wù)列表內(nèi)所有任務(wù)的執(zhí)行狀況完全取決于中斷程序何時(shí)退出,這將大大影響多任務(wù)執(zhí)行的效率。
為在遭遇中斷時(shí)依然保持較高的多任務(wù)執(zhí)行效率,需要改良傳統(tǒng)中斷機(jī)制。具體的實(shí)現(xiàn)方法是在待執(zhí)行任務(wù)列表內(nèi)添加一個(gè)代表中斷的任務(wù)A,并為其分配特點(diǎn)數(shù)量的時(shí)間片。任務(wù)A是中斷程序的引用,每當(dāng)遭遇中斷時(shí),將CPU自動(dòng)切換至任務(wù)A,運(yùn)行對(duì)應(yīng)數(shù)量的時(shí)間片,然后切換至列表內(nèi)的下一個(gè)任務(wù)。 開(kāi)始下一次執(zhí)行至任務(wù)A時(shí),又繼續(xù)執(zhí)行一定數(shù)量時(shí)間片的中斷程序。
綜上所述,針對(duì)常規(guī)任務(wù)、延時(shí)等待、中斷處理等問(wèn)題,通過(guò)在待執(zhí)行任務(wù)列表內(nèi)設(shè)置對(duì)應(yīng)的任務(wù),均可以很好的解決這些問(wèn)題。通過(guò)以上的方法,可以很好的實(shí)現(xiàn)51單片機(jī)的多任務(wù)運(yùn)行,提高51單片機(jī)的運(yùn)行效率,擴(kuò)展51單片機(jī)的使用場(chǎng)景。
參考文獻(xiàn):
[1] 陳淑芳. 基于51單片機(jī)的教學(xué)實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)[D].中國(guó)海洋大學(xué),2011.
[2] 趙月靜,陳繼榮,張永弟.單片機(jī)原理及應(yīng)用課程創(chuàng)新實(shí)踐教學(xué)改革[J].實(shí)驗(yàn)技術(shù)與管理,2013(01): 176-179.