嵌入式操作系統μLC/OS-Ⅱ面向數控系統的改進(jìn)
3 需要修改的內核數據和函數
3.1 任務(wù)控制塊的修改
(1)修改OSTCBDly的含義。在μC/OS-Ⅱ中,OSTCBDly表示任務(wù)延時(shí)的時(shí)鐘節拍數,或者任務(wù)掛起時(shí)的超時(shí)時(shí)鐘節拍數。如果這個(gè)變量為0,則表示任務(wù)不延時(shí),或者表示等待事件發(fā)生的時(shí)間沒(méi)有限制,修改后,OSTCBDly描述任務(wù)自運行的周期數,其計算公式如式(1)所示。若該項為零,任務(wù)為信號觸發(fā)的隨機任務(wù)。

(2)在TCB增加一項OSTCBDlyD作為任務(wù)自運行周期動(dòng)態(tài)值。
INT16UOSTCBDlyD; /*任務(wù)自運行周期動(dòng)態(tài)值*/其中,OSTCBDlyD是任務(wù)等待運行時(shí)間的動(dòng)態(tài)值。若任務(wù)在等待態(tài),其初值為OSTCBD-ly;若任務(wù)為掛起態(tài),其初值為超時(shí)限制值。系統時(shí)鐘處理函數OSTimeTick()對OSTCBDlyD減1,當OSTCBDlyD小于0時(shí),則將該任務(wù)放入就緒隊列。
(3)增加OSTCBStat的取值。OSTCBStat是任務(wù)的狀態(tài)字。由于增加了停止態(tài)和等待態(tài)兩種任務(wù)狀態(tài),因此需要增加OSTCBStat的取值,具體修改是在文件μCOS_II.H中增加下面信息。
#define OS_STAT_wAIT 0x40 //任務(wù)狀態(tài)字為等待態(tài)
#define OS_STAT_STOP 0x80 //任務(wù)狀態(tài)字為停止態(tài)
3.2 時(shí)鐘節拍函數的OSTimeTick()修改
通過(guò)TCB數組掃描全部TCB,根據OSTCBStat的值做不同處理,具體處理如下:
就緒態(tài)的任務(wù),OSTCBDlyD--,若有超時(shí),則進(jìn)行超時(shí)處理。
掛起態(tài)的任務(wù),OSTCBDlyD--,若有超時(shí),則將其插入就緒表。
等待態(tài)的任務(wù),OSTCBDlyD--,若到時(shí),則將其加入就緒表。
運行態(tài)的任務(wù)和停止態(tài)的任務(wù),不做處理。
3.3 增加函數OSTaskEndDeal()
當前任務(wù)的函數運行完返回時(shí),調用函數OSTaskEndDeal(),該函數完成工作:首先調用OSTaskStkInit()將該任務(wù)的堆棧初始化;然后判斷任務(wù)是否為最低優(yōu)先級任務(wù),若是,則保持該任務(wù)在就緒態(tài),這樣做的目的是使最低優(yōu)先級任務(wù)始終處于就緒態(tài),就緒表不會(huì )為空。若否,則根據OSTCBCUR→OSTCBDly決定任務(wù)該插入哪個(gè)隊列,該值等于零,任務(wù)進(jìn)入停止狀態(tài);
不等于零,任務(wù)進(jìn)入等待狀態(tài)。最后,調用OSStart()選擇新任務(wù)運行。
3.4 搶占式任務(wù)的實(shí)現
搶占式任務(wù)的設計需要根據實(shí)際情況做處理,這里以數控系統中的插補控制為例介紹搶占式任務(wù)的實(shí)現。
3.4.1 插補控制任務(wù)的功能
插補控制任務(wù)是根據加工命令和當前點(diǎn)的位置,實(shí)時(shí)計算各坐標軸運動(dòng)的位移和方向。插補時(shí)需要用一個(gè)定時(shí)器作為插補速度的控制,每次定時(shí)中斷觸發(fā)一步插補運算和輸出,當插補到終點(diǎn),定時(shí)器停止,插補完成。
3.4.2 插補控制任務(wù)的實(shí)現
(1)選擇一個(gè)硬件定時(shí)器作為插補專(zhuān)用定時(shí)器,將插補任務(wù)的代碼放入該硬件定時(shí)器的中斷服務(wù)程序中。
(2)為該中斷設置一組專(zhuān)用的寄存器組,以減少中斷環(huán)境保存和恢復的時(shí)間。
(3)將需要執行插補任務(wù)的當前位置值和加工命令(如:加工曲線(xiàn)線(xiàn)形、終點(diǎn)值)等信息定義成全局變量,以便與其他任務(wù)實(shí)現快速的信息交互。
(4)插補控制任務(wù)的啟動(dòng)。根據插補速度設定定時(shí)器初值,初始化插補所用的全局變量,啟動(dòng)定時(shí)器。
4 基于改進(jìn)后的μC/OS-Ⅱ的數控機床執行控制器的軟件設計
數控機床系統采用兩級結構。上位機由專(zhuān)用軟件IPC構成,用于實(shí)現人機交互;下位機由C8051020及其外圍電路的嵌入式執行控制器構成,負責實(shí)時(shí)、可靠的控制。嵌入式執行控制器軟件基于改進(jìn)后的μC/OS-Ⅱ設計,主要包括下面一些功能:與IPC的通信(發(fā)送任務(wù)和接受任務(wù))、命令解釋(命令解釋任務(wù))和命令執行(加工監控任務(wù)、插補計算任務(wù)、間隙電壓檢測和限位開(kāi)關(guān)狀態(tài)檢測任務(wù))。其中,通信有發(fā)送和接收兩方面內容;命令解釋時(shí),對開(kāi)關(guān)量控制命令直接執行;命令執行中需要進(jìn)行插補計算、檢測間隙電壓和限位開(kāi)關(guān)狀態(tài)及加工監測。各任務(wù)具體設計如表1所示。本文引用地址:http://dyxdggzs.com/article/150447.htm
5 結語(yǔ)
本文根據數控系統任務(wù)特點(diǎn),對μC/OS-Ⅱ的任務(wù)劃分和任務(wù)調度做了改進(jìn),更加方便數控系統任務(wù)的在μC/OS-Ⅱ上的添加,同時(shí)也便于μC/OS-Ⅱ對不同任務(wù)的管理。搶占式任務(wù)減少了任務(wù)切換花費的時(shí)間,并提高了硬件資源的利用率,但應注意搶占式任務(wù)的數量不能過(guò)多,最好小于等于3個(gè),否則會(huì )影響OS正常運行。改進(jìn)后的內核已應用到了實(shí)際項目中,系統穩定可靠。
評論