新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式操作系統μC/OS-Ⅱ面向數控系統的改進

        嵌入式操作系統μC/OS-Ⅱ面向數控系統的改進

        作者: 時間:2013-10-26 來源:網絡 收藏


        (2)全局變量。因為函數內部的局部變量是分配在堆棧中的,直接處理方式不形成任務,沒有自己的堆棧,如果使用局部變量,其局部變量會分配在被中斷任務的堆棧內,所以在該方式下任務應使用全局變量。用戶在設計時要有一定限制,否則會影響系統的響應時間。具體限制如下:第一,數量不能太多,最好小于等于3個;第二,必須是執行時間短,執行頻率高的任務才能被設為

        3 需要修改的內核數據和函數

        3.1 任務控制塊的修改

        (1)修改OSTCBDly的含義。在μC/OS-Ⅱ中,OSTCBDly表示任務延時的時鐘節拍數,或者任務掛起時的超時時鐘節拍數。如果這個變量為0,則表示任務不延時,或者表示等待事件發生的時間沒有限制,修改后,OSTCBDly描述任務自運行的周期數,其計算公式如式(1)所示。若該項為零,任務為信號觸發的

        (2)在TCB增加一項OSTCBDlyD作為任務自運行周期動態值。
        INT16UOSTCBDlyD; /*任務自運行周期動態值*/其中,OSTCBDlyD是任務等待運行時間的動態值。若任務在等待態,其初值為OSTCBD-ly;若任務為掛起態,其初值為超時限制值。系統時鐘處理函數OSTimeTick()對OSTCBDlyD減1,當OSTCBDlyD小于0時,則將該任務放入就緒隊列。

        (3)增加OSTCBStat的取值。OSTCBStat是任務的狀態字。由于增加了停止態和等待態兩種任務狀態,因此需要增加OSTCBStat的取值,具體修改是在文件μCOS_II.H中增加下面信息。

        #define OS_STAT_wAIT 0x40 //任務狀態字為等待態
        #define OS_STAT_STOP 0x80 //任務狀態字為停止態

        3.2 時鐘節拍函數的OSTimeTick()修改

        通過TCB數組掃描全部TCB,根據OSTCBStat的值做不同處理,具體處理如下:
        就緒態的任務,OSTCBDlyD--,若有超時,則進行超時處理。
        掛起態的任務,OSTCBDlyD--,若有超時,則將其插入就緒表。
        等待態的任務,OSTCBDlyD--,若到時,則將其加入就緒表。
        運行態的任務和停止態的任務,不做處理。

        3.3 增加函數OSTaskEndDeal()

        當前任務的函數運行完返回時,調用函數OSTaskEndDeal(),該函數完成工作:首先調用OSTaskStkInit()將該任務的堆棧初始化;然后判斷任務是否為最低優先級任務,若是,則保持該任務在就緒態,這樣做的目的是使最低優先級任務始終處于就緒態,就緒表不會為空。若否,則根據OSTCBCUR→OSTCBDly決定任務該插入哪個隊列,該值等于零,任務進入停止狀態;

        不等于零,任務進入等待狀態。最后,調用OSStart()選擇新任務運行。

        3.4 的實現

        搶占式任務的設計需要根據實際情況做處理,這里以數控系統中的插補控制為例介紹搶占式任務的實現。

        3.4.1 插補控制任務的功能

        插補控制任務是根據加工命令和當前點的位置,實時計算各坐標軸運動的位移和方向。插補時需要用一個定時器作為插補速度的控制,每次定時中斷觸發一步插補運算和輸出,當插補到終點,定時器停止,插補完成。

        3.4.2 插補控制任務的實現

        (1)選擇一個硬件定時器作為插補專用定時器,將插補任務的代碼放入該硬件定時器的中斷服務程序中。
        (2)為該中斷設置一組專用的寄存器組,以減少中斷環境保存和恢復的時間。
        (3)將需要執行插補任務的當前位置值和加工命令(如:加工曲線線形、終點值)等信息定義成全局變量,以便與其他任務實現快速的信息交互。
        (4)插補控制任務的啟動。根據插補速度設定定時器初值,初始化插補所用的全局變量,啟動定時器。

        4 基于改進后的μC/OS-Ⅱ的數控機床執行控制器的軟件設計

        數控機床系統采用兩級結構。上位機由專用軟件IPC構成,用于實現人機交互;下位機由C8051020及其外圍電路的嵌入式執行控制器構成,負責實時、可靠的控制。嵌入式執行控制器軟件基于改進后的μC/OS-Ⅱ設計,主要包括下面一些功能:與IPC的通信(發送任務和接受任務)、命令解釋(命令解釋任務)和命令執行(加工監控任務、插補計算任務、間隙電壓檢測和限位開關狀態檢測任務)。其中,通信有發送和接收兩方面內容;命令解釋時,對開關量控制命令直接執行;命令執行中需要進行插補計算、檢測間隙電壓和限位開關狀態及加工監測。各任務具體設計如表1所示。


        5 結語

        本文根據數控系統任務特點,對μC/OS-Ⅱ的任務劃分和任務調度做了改進,更加方便數控系統任務的在μC/OS-Ⅱ上的添加,同時也便于μC/OS-Ⅱ對不同任務的管理。搶占式任務減少了任務切換花費的時間,并提高了硬件資源的利用率,但應注意搶占式任務的數量不能過多,最好小于等于3個,否則會影響OS正常運行。改進后的內核已應用到了實際項目中,系統穩定可靠。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 额济纳旗| 东乡族自治县| 凤山县| 白水县| 榆社县| 平邑县| 邻水| 华蓥市| 扶绥县| 凭祥市| 巩义市| 盘锦市| 湘西| 江北区| 诏安县| 道真| 博兴县| 乌恰县| 深圳市| 武邑县| 连平县| 米脂县| 上虞市| 咸丰县| 渭源县| 台中县| 扬州市| 南雄市| 报价| 鄂伦春自治旗| 哈密市| 木里| 呼伦贝尔市| 崇左市| 道孚县| 郴州市| 武城县| 舟山市| 永济市| 且末县| 上林县|