李鵬


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