μC/OS-Ⅱ在應(yīng)用系統(tǒng)中任務(wù)劃分方法的研究
μC/OS-Ⅱ是由Jean J.Labrosse于1992年開始提出的一個(gè)源碼公開的嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng),至今仍在繼續(xù)發(fā)展,其已經(jīng)在工業(yè)控制、儀器儀表、汽車電子、航空航天和消費(fèi)電子等領(lǐng)域得到了廣泛應(yīng)用。它采用占先式實(shí)時(shí)調(diào)度方式,結(jié)構(gòu)簡潔精練、可讀性強(qiáng)、性能穩(wěn)定、便于移植,只需少量的工作就能將其移植到8位、16位和32位微處理器上。目前,μC/OS-Ⅱ已成為嵌入式開發(fā)人員入門嵌入式操作系統(tǒng)的合適選擇。
本文引用地址:http://2s4d.com/article/148560.htm開發(fā)基于μC/OS-Ⅱ的嵌入式應(yīng)用系統(tǒng),首先需針對目標(biāo)硬件平臺對μC/OS-Ⅱ進(jìn)行移植。在詳細(xì)分析總體需求的基礎(chǔ)上,將系統(tǒng)功能合理地劃分為多個(gè)不同任務(wù)實(shí)現(xiàn)。由此可見,在實(shí)現(xiàn)嵌入式應(yīng)用系統(tǒng)的過程中,任務(wù)劃分是十分重要的環(huán)節(jié)。劃分任務(wù)是否合理有效不僅直接決定了μC/OS-Ⅱ的性能和執(zhí)行效率,還間接影響著應(yīng)用系統(tǒng)甚至整個(gè)項(xiàng)目的成敗。
對于國內(nèi)眾多嵌入式方向的研究人員和愛好者,基于實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ進(jìn)行教學(xué)或者研發(fā),大多側(cè)重于μC/OS-Ⅱ在各種特定目標(biāo)硬件平臺上的移植和簡單使用。而μC/OS-Ⅱ上的復(fù)雜系統(tǒng)開發(fā)特別是劃分任務(wù)策略雖已引起諸多關(guān)注,但到目前為止卻鮮有詳細(xì)而系統(tǒng)的研究成果。本文在總結(jié)前人工作和實(shí)際開發(fā)經(jīng)驗(yàn)的基礎(chǔ)上,研究了μC/OS-Ⅱ任務(wù)劃分的方法和原則,并結(jié)合實(shí)踐給出基于MC9S12NE64硬件平臺的應(yīng)用實(shí)例。
1 μC/OS-Ⅱ的任務(wù)管理機(jī)制
在μC/OS-Ⅱ中,每個(gè)任務(wù)可以是一個(gè)典型的無限循環(huán),都處在μC/OS-Ⅱ規(guī)定的一種任務(wù)狀態(tài)。程序員把一個(gè)大地應(yīng)用程序分成相對獨(dú)立的多個(gè)任務(wù)來完成,大大提高了CPU的利用率,極大地方便了應(yīng)用程序的設(shè)計(jì)和維護(hù)。而多任務(wù)系統(tǒng)則通過任務(wù)切換實(shí)現(xiàn)各個(gè)任務(wù)之間的調(diào)度運(yùn)行。
從存儲(chǔ)結(jié)構(gòu)來看,任務(wù)由3個(gè)部分組成:任務(wù)的程序代碼、任務(wù)堆棧和任務(wù)控制塊(PCB)。其中,任務(wù)堆棧用來保存該任務(wù)運(yùn)行時(shí)的工作環(huán)境;任務(wù)控制塊用來保存該任務(wù)的一些屬性;任務(wù)程序代碼則描述了該任務(wù)的執(zhí)行過程。μC/OS-Ⅱ可以管理多達(dá)64個(gè)任務(wù),其中的空任務(wù)(IDLE)和統(tǒng)計(jì)任務(wù)(STATISTICS)為系統(tǒng)任務(wù),其余都屬于用戶任務(wù)。μC/OS-Ⅱ規(guī)定其每個(gè)任務(wù)必須設(shè)置為不同且惟一的優(yōu)先級(優(yōu)先級的數(shù)值越小,則代表任務(wù)的優(yōu)先級別越高),而μC/OS-Ⅱ內(nèi)核會(huì)調(diào)度處于就緒狀態(tài)優(yōu)先級最高的任務(wù)進(jìn)行處理,并分配CPU。就緒狀態(tài)屬于任務(wù)的5種狀態(tài)之一,其余4種狀態(tài)分別為:睡眠狀態(tài)、運(yùn)行狀態(tài)、等待狀態(tài)、中斷服務(wù)狀態(tài)。μC/OS-Ⅱ的任務(wù)總會(huì)處于這5種狀態(tài)之一,并根據(jù)不同的條件在5種狀態(tài)中進(jìn)行切換,如圖1所示。
2 任務(wù)劃分的方法
2.1 以硬件模塊為對象劃分任務(wù)
在使用μC/OS-Ⅱ劃分任務(wù)時(shí),應(yīng)將各硬件模塊相關(guān)的驅(qū)動(dòng)程序劃分為不同的任務(wù),根據(jù)硬件模塊在系統(tǒng)功能中的關(guān)鍵性順序設(shè)定相應(yīng)的優(yōu)先級。以MCU為中心,將各硬件驅(qū)動(dòng)程序劃分為獨(dú)立的任務(wù),不僅有效防止了爭用硬件模塊出現(xiàn)的問題,還能夠提高整個(gè)μC/OS-Ⅱ的執(zhí)行效率,滿足應(yīng)用系統(tǒng)的實(shí)時(shí)性要求,為系統(tǒng)維護(hù)和擴(kuò)展功能打下良好的基礎(chǔ)。
將不同硬件模塊的操作劃分為不同的任務(wù),使得應(yīng)用系統(tǒng)必須通過μC/OS-Ⅱ內(nèi)核調(diào)度相應(yīng)的任務(wù),才能實(shí)現(xiàn)對于某個(gè)硬件模塊的訪問。這樣,每個(gè)模塊都有且只有惟一的任務(wù)與之對應(yīng),其他任務(wù)則無權(quán)時(shí)訪問它。這種操作模式有效地避免了由于多個(gè)任務(wù)同時(shí)爭用同一硬件模塊造成的沖突甚至死鎖現(xiàn)象。
按照硬件模塊劃分任務(wù),可以有效提高μC/OS-Ⅱ的工作效率,增強(qiáng)應(yīng)用系統(tǒng)對于實(shí)時(shí)要求的處理能力。例如:如果當(dāng)前系統(tǒng)正在對并口設(shè)備進(jìn)行處理,由于并口屬于慢速設(shè)備,其執(zhí)行速度遠(yuǎn)遠(yuǎn)落后于MCU總線頻率,因此在其工作過程中MCU大部分時(shí)間處于空閑狀態(tài),即無事可做直到并口處理完畢為止。將并口驅(qū)動(dòng)獨(dú)立為單個(gè)任務(wù)之后,μC/OS-Ⅱ內(nèi)核就可以通過任務(wù)調(diào)度使并口處理任務(wù)和其他任務(wù)并發(fā)執(zhí)行,減少M(fèi)CU處于空閑狀態(tài)的時(shí)間,從而提高了整個(gè)應(yīng)用系統(tǒng)運(yùn)行效率。
硬件模塊與硬件驅(qū)動(dòng)任務(wù)一一對應(yīng),使整個(gè)軟件系統(tǒng)框架清晰、結(jié)構(gòu)合理,增強(qiáng)了系統(tǒng)的可維護(hù)性和可擴(kuò)展性。以增加串行通信功能為例,開發(fā)人員只要編寫相應(yīng)串口驅(qū)動(dòng)程序,在μC/OS-Ⅱ中增加串行通信任務(wù)即可,無需修改任何其他模塊的任務(wù)代碼。
2.2 劃分強(qiáng)實(shí)時(shí)性任務(wù)
實(shí)時(shí)即立即、及時(shí)的意思,根據(jù)應(yīng)用中的實(shí)時(shí)要求,可以將其分為強(qiáng)實(shí)時(shí)和弱實(shí)時(shí)2大類。強(qiáng)實(shí)時(shí)對于響應(yīng)時(shí)間要求很高,如果實(shí)時(shí)性得不到滿足,系統(tǒng)會(huì)出現(xiàn)錯(cuò)誤甚至難以挽回的故障。弱實(shí)時(shí)雖然同樣要求調(diào)度時(shí)間短,響應(yīng)速度快,但其確定性較差,超過限定時(shí)間也能勉強(qiáng)工作。在基于μC/OS-Ⅱ的嵌入式應(yīng)用系統(tǒng)中,強(qiáng)實(shí)時(shí)任務(wù)能夠在限定的時(shí)間范圍內(nèi)調(diào)度執(zhí)行,是整個(gè)系統(tǒng)穩(wěn)定可靠,實(shí)時(shí)有效的重要保障。因此,在劃分μC/OS-Ⅱ任務(wù)時(shí),應(yīng)將每個(gè)強(qiáng)實(shí)時(shí)應(yīng)用劃分為獨(dú)立的任務(wù),與其他應(yīng)用分開,并設(shè)定高優(yōu)先級,以保證強(qiáng)實(shí)時(shí)事件的限時(shí)發(fā)生,避免出現(xiàn)災(zāi)難性后果。
假設(shè)把某一強(qiáng)實(shí)時(shí)應(yīng)用與一弱實(shí)時(shí)性要求的應(yīng)用一起打包成為1個(gè)任務(wù)。在嵌入式應(yīng)用系統(tǒng)運(yùn)行過程中,一旦該弱實(shí)時(shí)應(yīng)用因?yàn)槟撤N原因(例如:等待內(nèi)存數(shù)據(jù)、等待外部輸入信號、等待中斷發(fā)生等)導(dǎo)致整個(gè)任務(wù)進(jìn)入等待狀態(tài),則在等待的事件發(fā)生之前,強(qiáng)實(shí)時(shí)應(yīng)用也無法通過任務(wù)調(diào)度得以執(zhí)行。在強(qiáng)實(shí)時(shí)系統(tǒng)中,出現(xiàn)了以上所述的情況,結(jié)果是不堪設(shè)想的。
如果強(qiáng)實(shí)時(shí)性應(yīng)用允許通過中斷方式“通知”μC/OS-Ⅱ內(nèi)核,則可將該強(qiáng)實(shí)時(shí)任務(wù)代碼放入相應(yīng)的中斷服務(wù)程序中去處理。在中斷服務(wù)程序在發(fā)生引起中斷處理的事件后,由硬件機(jī)制自動(dòng)加載運(yùn)行(把中斷服務(wù)程序的入口地址放入PC寄存器),無需軟件調(diào)度干涉,因此可更好保證應(yīng)用功能的強(qiáng)實(shí)時(shí)性。在中斷服務(wù)程序中執(zhí)行強(qiáng)實(shí)時(shí)性任務(wù)代碼,同樣必須遵循中斷服務(wù)程序要盡可能簡短的原則。具體的方法是通過分析每個(gè)強(qiáng)實(shí)時(shí)任務(wù)功能和代碼,將其最重要的核心部分放人中斷處理程序中,其余部分形成一個(gè)單獨(dú)的任務(wù),兩者可通過任務(wù)同步機(jī)制(信號量、消息郵箱或者消息隊(duì)列)進(jìn)行聯(lián)系,以達(dá)到簡化中斷處理過程的目的。
2.3 分割耗時(shí)較多的任務(wù)
評論