嵌入式操作系統μLC/OS-Ⅱ面向數控系統的改進(jìn)
摘要:為了使嵌入式操作系統μC/OS-Ⅱ更加適合數控系統的應用,對μC/OS-Ⅱ的任務(wù)分類(lèi)和任務(wù)調度做了改進(jìn)。將任務(wù)分為普通任務(wù)和搶占式任務(wù)。普通任務(wù)指通過(guò)操作系統調度器調度運行的任務(wù),它又分為周期任務(wù)和隨機任務(wù)。周期任務(wù)對應數控系統中要求定期執行的任務(wù),隨機任務(wù)對應數控系統中由信號觸發(fā)執行的任務(wù)。搶占式任務(wù)不通過(guò)調度器調度運行,而在中斷處理中直接運行。搶占式任務(wù)對應數控系統中執行頻率高,執行時(shí)間短的任務(wù)。實(shí)驗證明,改進(jìn)后的μC/OS-Ⅱ更適合數控系統任務(wù)的添加。
關(guān)鍵詞:數控系統;μC/OS-Ⅱ;任務(wù)分類(lèi);任務(wù)調度
嵌入式操作系統μC/OS-Ⅱ是一個(gè)可裁剪、源碼開(kāi)放、結構小巧、搶先式的實(shí)時(shí)多任務(wù)內核,主要面向中小型嵌入式系統,具有執行效率高,占用空間小,可移植性強,實(shí)時(shí)性能優(yōu)良和可擴展性強等特點(diǎn)。數控系統是一個(gè)典型的強實(shí)時(shí)性系統,具有可確定性??纱_定性主要是確保條件出現到由此引起的動(dòng)作開(kāi)始(或者結束)的時(shí)間在一個(gè)準確的時(shí)段內。在數控系統中,條件是由操作員的指令(如:緊急停止、移動(dòng)x軸等)或是機床的狀態(tài)(如刀具破損等)引起的。本文分析了數控系統任務(wù)的特點(diǎn),結合μC/OS-Ⅱ的內核體系,對μC/OS-Ⅱ的任務(wù)分類(lèi)、任務(wù)調度和中斷服務(wù)策略做了改進(jìn),使其更加適合于數控系統的應用。
1 μC/OS-Ⅱ對任務(wù)的分類(lèi)
μC/OS-Ⅱ中每個(gè)任務(wù)有5種狀態(tài):休眠(DORMANT)、就緒(READY)、運行(RUNNING)、等待(WAITING)、中斷(ISR)。休眠狀態(tài)的任務(wù)駐留在存儲器中,還未被內核使用;就緒狀態(tài)的任務(wù)準備執行,優(yōu)先級低于當前執行的任務(wù),沒(méi)有得到CPU控制權;任務(wù)得到CPU控制權后就處于運行狀態(tài);等待事件發(fā)生的任務(wù)處于等待狀態(tài),事件可以是I/O操作完成、共享資源可以利用、時(shí)鐘周期到等;任務(wù)執行過(guò)程被中斷服務(wù)例程中斷,任務(wù)就處于中斷狀態(tài)。
2 μC/OS-Ⅱ面向數控系統的改進(jìn)
2.1 數控系統任務(wù)的特點(diǎn)
在數控系統中,任務(wù)可分為兩種:周期運行的任務(wù)和信號觸發(fā)運行的任務(wù),這里所說(shuō)的信號即包括硬件信號,也包括軟件信號。周期運行的任務(wù)有定時(shí)信號采樣、定時(shí)I/O口掃描、定時(shí)通信等。信號觸發(fā)運行的任務(wù)有中斷信號(硬件信號)觸發(fā)的中斷服務(wù)任務(wù),命令消息信號(軟件信號)觸發(fā)的命令解釋任務(wù)等。另外,數控系統中,有些任務(wù)還具有運行時(shí)間短,運行頻率高,要求實(shí)時(shí)性高的特點(diǎn),如信號采樣、數控機床中的插補控制等。
2.2 改進(jìn)后的任務(wù)劃分
在改進(jìn)后的嵌入式操作系統中任務(wù)分為兩類(lèi):普通任務(wù)和搶占式任務(wù)。普通任務(wù)指通過(guò)操作系統調度器調度運行的任務(wù),調度方法如圖1所示;搶占式任務(wù)指那些不通過(guò)調度器調度運行,而是在中斷處理中直接運行的任務(wù)。下面詳細說(shuō)明這兩種任務(wù)。
2.2.1 普通任務(wù)
根據數控系統任務(wù)多為周期任務(wù)和信號觸發(fā)任務(wù)這一特點(diǎn),將普通任務(wù)分為兩種:定時(shí)運行的周期任務(wù)(簡(jiǎn)稱(chēng)周期任務(wù))和信號觸發(fā)運行的隨機任務(wù)(簡(jiǎn)稱(chēng)隨機任務(wù))。相應的,任務(wù)狀態(tài)被劃分為6種:運行態(tài)、就緒態(tài)、等待態(tài)、停止態(tài)、掛起態(tài)和中斷態(tài)。圖1為改進(jìn)后的任務(wù)狀態(tài)切換圖。
在這六種狀態(tài)中,運行態(tài)、就緒態(tài)和中斷態(tài)對應μC/OS-Ⅱ的READY,RUNNING和ISR;掛起態(tài)是任務(wù)在執行完成前,因等待某事件或資源而被迫停止運行,等待事件或資源到來(lái)的狀態(tài);等待態(tài)是周期任務(wù)完成一次運行,等待運行周期到再次運行時(shí)的狀態(tài);停止態(tài)是隨機任務(wù)等待其觸發(fā)信號的狀態(tài)。這里去掉了休眠態(tài),即沒(méi)有任務(wù)的刪除,所有的任務(wù)一旦建立,在系統運行期間一直存在。這樣的處理是因為在數控系統應用中,所有建立的任務(wù)一定是有用的,即在系統運行期間一定會(huì )被執行,無(wú)用的代碼和任務(wù)不會(huì )被添加。在μC/OS-Ⅱ中,設定每個(gè)任務(wù)都是一個(gè)無(wú)限的循環(huán),即任務(wù)函數永不返回,這樣做是不合適的。該操作系統允許任務(wù)函數返回,返回后調用函數OSTaskEndDeal(),該函數根據任務(wù)的類(lèi)別,把周期任務(wù)放入等待隊列,把隨機任務(wù)放入停止隊列。
2.2.2 搶占式任務(wù)
搶占式任務(wù)為執行時(shí)間短且執行頻率高于OS系統時(shí)鐘頻率(如信號采樣),或實(shí)時(shí)要求高(如數控機床中的插補控制)的任務(wù)。調度任務(wù)時(shí)間(主要是任務(wù)切換所花費的時(shí)間)往往比這類(lèi)任務(wù)運行一次的時(shí)間還多,這顯然是不合理的,搶占式任務(wù)正是為解決這種不合理而設計的。搶占式任務(wù)不通過(guò)OS調度器調度運行,也不采用TCB(任務(wù)控制塊)標識它們,而是在它們的中斷觸發(fā)信號到達時(shí),在中斷中_直接處理,這樣做節省了調度、任務(wù)切換的時(shí)間。但是,由于搶占式任務(wù)沒(méi)有TCB,也就沒(méi)有相應的任務(wù)堆棧,所以搶占式任務(wù)在使用資源上要特別注意:一定要使用獨立的資源。這樣既可以使搶占式任務(wù)正常運行,又可以避免搶占式任務(wù)對被中斷程序的環(huán)境造成破壞。具體辦法如下:
(1)專(zhuān)用寄存器組。若處理程序中使用了寄存器,則為其分配專(zhuān)用的寄存器組,這樣也省去了保存/恢復寄存器的時(shí)間消耗。
(2)全局變量。因為函數內部的局部變量是分配在堆棧中的,直接處理方式不形成任務(wù),沒(méi)有自己的堆棧,如果使用局部變量,其局部變量會(huì )分配在被中斷任務(wù)的堆棧內,所以在該方式下任務(wù)應使用全局變量。用戶(hù)在設計搶占式任務(wù)時(shí)要有一定限制,否則會(huì )影響系統的響應時(shí)間。具體限制如下:第一,數量不能太多,最好小于等于3個(gè);第二,必須是執行時(shí)間短,執行頻率高的任務(wù)才能被設為搶占式任務(wù)。
評論