新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于RTX51 的單片機軟件設計

        基于RTX51 的單片機軟件設計

        作者: 時間:2016-12-02 來源:網絡 收藏


        2.3 RTX51中斷處理

        RTX51完全模式提供2種方法來處理中斷:一種是C51的中斷函數,另一種是RTX51的斷。它又可以分為快速任務中斷和標準任務中斷。對于中斷函數這種方法,它同時也可以在不使用RTX51的情況下使用,當中斷發生的時候,程序就跳到了相應的中斷函數,它和正在運行的任務是互相獨立的,中斷的處理是在RTX51系統之外,和任務切換規則沒有關聯。對于任務中斷的方法,不管使用快速是標準任務來處理中斷,如果中斷發生,等待中斷的任務就從“等待”狀態進入到就緒狀態,并按照任務切換規則進行切換。這種中斷處理是完全集成在RTX51的內部,硬件中斷事件的處理和信號、信息的處理是完全相同的。在系統響應中斷使能寄存器,這樣才能遵守任務的切換規則并保證中斷程序的無誤進行。必須注意中斷使能寄存器是由RTX51完全控制的,禁止用戶手動的修改。

        3 應用實例

        以下給出RTX51在單片機控制的GPS接收板上的應用。

        (1)系統硬件組成

        單片機W77E58,快速8051內核、32KB ROM、1KB的XDATA RAM,符合使用RTX51的硬件要求;鍵盤、GPS定位模塊、液晶顯示模塊。

        (2)系統軟件構成

        軟件運行環境KEIL uVision2 6.20集成開發環境加上RTX51完成版。任務KEY-BOARD,監測鍵盤的情況,如果有按鍵按下,把按鍵的編碼發更新到郵箱1,外部中斷1等待接收 GPS數據,并把數據存儲起來,向DISPLAY任務發出信號。任務DISPLAY根據接收到的不同的信號和消息,進行處理。任務SEND-OUT,把接收到的數據進行處理,并發送出去。任務VOICE進行語音輸出。
        系統硬件、軟件結構如圖2所示。



        下面給出簡寫的源程序:

        #include //包含RTX51頭文件
        #define DISPLAY 0
        #define SEND_OUT1
        #define KEY_BOARD2
        #define VOICE3
        void main(void)
        { init system(); //系統初始化
        os start system(DISPLAY); //啟動RTX51
        }
        void task0(void)_task_DISPLAY
        { os_set_slice(1000); //設置時間片大小
        os_enable_isr(0); //允許外部中斷0
        os_creat_task(SEND_OUT); //啟動SEND_OUT任務
        os_creat_task(VOICE); //啟動VOICE任務
        for(;;){
        switch(os_wait(K_SIG+K_MBX+1,255,&keyboard))//等待接收信號和鍵盤消息,分類處理
        {display1();break;
        case EVENT_MBOX;//當從郵箱接收到數據的時候switch(keyboard)
        { case ‘1‘;

        os_send_signal(SEND_OUT); //向任務SEND_OUT發送信號

        os_send_signal(VOICE);} //向任務VOICE發送信號
        …;}
        …;}
        }
        void task1(void)_task_SEND_OUT //處理發送數據任務
        {while(1)
        { os_wait(K_SIG,255,0) //等待信號
        operation_send();
        }
        void task3(void)_task_VOICE
        {while(1){
        os_wait_signal(K_SIG,255,0); //等待語音處理信號
        voice();}
        }
        void interrupt(void)interrupt 2 using 1
        { read_gps_data(p_gps_data); //接收數據
        isr_send_signal(DISPLAY); //向DISPLAY任務發信號
        }
        #pragma REGISTERBANK(2) //使用寄存器組2
        void task2(void)_task_KEYBOARSD_priority_3//設置為快速任務
        { os_attach_interrupt(0); //綁定任務和外部中斷0
        while(1){
        os_wait(K_INT,255,0); //等待中斷的發生
        KEY=iic_read_keyboard();
        os_send_message(1,KEY,0);}//將鍵盤編碼發送到郵箱1
        }

        4 結論

        通過實踐我們可以發現,使用RTX51開發單片機程序更加方便了。尤其是較大的程序,避免了自己寫消息循環等繁瑣工作,效率明顯增加了。在硬件資源足夠的情況下,效果更加明顯。

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 罗甸县| 辽阳县| 寿宁县| 五莲县| 呼图壁县| 凌海市| 庆云县| 乐至县| 根河市| 盖州市| 泰宁县| 会昌县| 舞钢市| 永城市| 舟山市| 克山县| 怀仁县| 长海县| 吐鲁番市| 邻水| 绵阳市| 淮北市| 股票| 巩义市| 双辽市| 湾仔区| 纳雍县| 密山市| 广东省| 宁陕县| 和顺县| 成武县| 纳雍县| 吉木萨尔县| 黔江区| 县级市| 上栗县| 慈溪市| 漳平市| 商河县| 乐清市|