日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
基于RTX51的單片機(jī)軟件設(shè)計(jì)
基于RTX51的單片機(jī)軟件設(shè)計(jì)
 更新時(shí)間:2009-10-23 16:09:23  點(diǎn)擊數(shù):0
【字體: 字體顏色

1 概述

    很多單片機(jī)的應(yīng)用中都需要同時(shí)執(zhí)行很多任務(wù)。對(duì)于這樣的應(yīng)用,我們可以利用實(shí)時(shí)操作系統(tǒng)來(lái)靈活地安排系統(tǒng)資源。RTX51是德國(guó) Keil公司開發(fā)的一種應(yīng)用于MCS51系列單片機(jī)的實(shí)時(shí)多任務(wù)操作系統(tǒng),它可以工作在所有8051 單片機(jī)以及派生家族中,簡(jiǎn)化了復(fù)雜的軟件設(shè)計(jì),縮短了項(xiàng)目周期。我們?cè)趯?shí)踐中用RTX51來(lái)開發(fā)單片機(jī)軟件,設(shè)計(jì)單片機(jī)控制的GPS接收板軟件,取得了很好地效果。

    2 RTX51介紹

   

RTX51有2個(gè)模式:RTX51完全模式和最小模式。RTX51最小模式版是RTX51完全版的一個(gè)子集,可以很容易地運(yùn)行在8051系統(tǒng)上,而不需要外部RAM(XDATA)。RTX51完全模式有4個(gè)任務(wù)優(yōu)先級(jí),可以和中斷函數(shù)并行處理,各個(gè)任務(wù)之間通過(guò)使用“郵箱”系統(tǒng)來(lái)進(jìn)行信號(hào)和消息的傳遞,可以從內(nèi)存池中申請(qǐng)和釋放內(nèi)存;同時(shí),可以強(qiáng)制一個(gè)任務(wù)停止執(zhí)行,等待一個(gè)中斷,或者是其它中斷傳來(lái)的信號(hào)量或者消息。

RTX51對(duì)系統(tǒng)硬件的要求如表1所列。

  描述                        RTX51完全模式     RTX51最小模式
任務(wù)數(shù) 最大256,19個(gè)激活任務(wù),其中16個(gè)標(biāo)準(zhǔn)任務(wù),3個(gè)快速任務(wù) 16
RAM 40~46字節(jié)RAM
20~200字節(jié)IDATA
最少450字節(jié)XDATA
7字節(jié)DATA
3*任務(wù)數(shù)IDATA
不需要XDATA
ROM 6KB~8KB 900字節(jié)
定時(shí)器 定時(shí)器0或1 定時(shí)器0

表1

2.1 RTX51任務(wù)

    RTX51區(qū)分2類任務(wù):快速任務(wù)和標(biāo)準(zhǔn)任務(wù)。快速任務(wù)有很快的響應(yīng)速度,每個(gè)快速任務(wù)使用8051一個(gè)單獨(dú)的寄存器組,并且有自己的堆棧區(qū)域。RTX51支持最大同時(shí)有3個(gè)快速任務(wù)。標(biāo)準(zhǔn)任務(wù)需要多一點(diǎn)的時(shí)間來(lái)進(jìn)行任務(wù)切換,因此使用的內(nèi)部RAM相對(duì)快速任務(wù)要少,所有的標(biāo)準(zhǔn)任務(wù)共用1個(gè)寄存器組和堆棧。當(dāng)任務(wù)切換的時(shí)候,當(dāng)前任務(wù)的寄存器狀態(tài)和堆棧內(nèi)容轉(zhuǎn)移到外部存儲(chǔ)器中。RTX51支持最大16個(gè)標(biāo)準(zhǔn)任務(wù)。

    RTX51任務(wù)狀態(tài):

    (1)運(yùn)行(RUNNING)-當(dāng)前正在運(yùn)行的任務(wù)處于RUNNING狀態(tài),同一時(shí)間只有1個(gè)任務(wù)可以運(yùn)行。

    (2)就緒(READY)-等待運(yùn)行的任務(wù)處于READY狀態(tài),在當(dāng)前運(yùn)行的任務(wù)退出運(yùn)行狀態(tài)后,就緒隊(duì)列中優(yōu)先級(jí)最高的任務(wù)進(jìn)入到運(yùn)行狀態(tài)。

    (3)阻塞(BLOCKED)-等待一個(gè)事件的任務(wù)處于BLOCKED狀態(tài),如果事件發(fā)生且優(yōu)先級(jí)比正在運(yùn)行的任務(wù)高,此任務(wù)進(jìn)入運(yùn)行狀態(tài);如果優(yōu)先級(jí)比正在運(yùn)行的任務(wù)低,此任務(wù)進(jìn)入READY狀態(tài)。

    (4)刪除(DELETED)-沒(méi)有開始的任務(wù)處于刪除狀態(tài)。

    (5)任務(wù)切換-RTX51包含一個(gè)事件驅(qū)動(dòng)的任務(wù)切換機(jī)制,它能夠按照任務(wù)的優(yōu)先級(jí)進(jìn)行切換,也就是搶占式多任務(wù)系統(tǒng);另外還有一個(gè)可選的時(shí)間片輪轉(zhuǎn)切換任務(wù)模式,在時(shí)間片輪轉(zhuǎn)模式下,同級(jí)別的任務(wù)是按照時(shí)間片分別占用CPU 的。RTX51任務(wù)有4個(gè)優(yōu)先級(jí):0、1、2 可以分配給標(biāo)準(zhǔn)任務(wù),優(yōu)先級(jí)3是為快速任務(wù)保留的。每個(gè)任務(wù)都可以等待事件的發(fā)生,而并不增加系統(tǒng)的負(fù)擔(dān);任務(wù)可以等待消息、信號(hào)、 中斷、超時(shí)事件或者它們的組合。任務(wù)切換是按照一定規(guī)則進(jìn)行的,包括:進(jìn)入到“就緒”狀態(tài)的優(yōu)先級(jí)高的任務(wù)先執(zhí)行;如果“就緒” 狀態(tài)的幾個(gè)任務(wù)是同一個(gè)優(yōu)先級(jí),那么最先進(jìn)入“就緒”狀態(tài)的先執(zhí)行。

    2.2 RTX51事件

    *超時(shí)(timeout):掛起運(yùn)行的任務(wù)指定數(shù)量的時(shí)鐘周期。

    *間隔(interval):類似于超時(shí),但是軟件定時(shí)器沒(méi)有復(fù)位,典型應(yīng)用是產(chǎn)生時(shí)鐘。

    *信號(hào)(signal):用于任務(wù)內(nèi)部同步協(xié)調(diào)。

    *消息(message):適用于RTX51 Full,用于信息的交換。我們可以把一個(gè)消息發(fā)送到一個(gè)特定的郵箱。消息由2字節(jié)組成,可以是用戶按照自己的需求定義的數(shù)據(jù),也可以是指向數(shù)據(jù)的指針。如果郵箱的消息列表已滿,而且是中斷發(fā)送消息,這個(gè)消息將會(huì)丟失;如果是任務(wù)發(fā)送消息,那么任務(wù)將會(huì)進(jìn)入到等待狀態(tài),直到郵箱重新有了位置可以接收這一條信息。郵箱是按照FIFO的原則來(lái)管理消息的,如果幾個(gè)任務(wù)都在等待接收消息,那么最先進(jìn)入等待接收隊(duì)列的將接收消息。一個(gè)郵箱最多可以存儲(chǔ)8條消息。當(dāng)郵箱滿的時(shí)候,最多只能有16個(gè)等待任務(wù)。

    *中斷(interrupt):適用于RTX51 Full,一個(gè)任務(wù)可以等待8051硬件中斷。

    *信號(hào)量(semaphore):適用于RTX51 Full,信號(hào)量用于管理共享的系統(tǒng)資源。通過(guò)使用“令牌”,允許在同一時(shí)刻只有一個(gè)任務(wù)使用某些資源。如果幾個(gè)任務(wù)申請(qǐng)?jiān)L問(wèn)同一個(gè)資源,那么首先提出申請(qǐng)的將允許訪問(wèn),其它的任務(wù)進(jìn)入等待隊(duì)列,直到第1個(gè)任務(wù)操作完畢,下一個(gè)任務(wù)才能繼續(xù)。

    Os_wait()函數(shù)掛起一個(gè)任務(wù)來(lái)等待一個(gè)事件的發(fā)生。這樣可以同步2個(gè)或幾個(gè)任務(wù)。它的工作過(guò)程如下:當(dāng)任務(wù)等待的事件沒(méi)有發(fā)生的時(shí)候,系統(tǒng)掛起這個(gè)任務(wù);當(dāng)事件發(fā)生時(shí),系統(tǒng)根據(jù)任務(wù)切換規(guī)則切換任務(wù)。

2.3 RTX51中斷處理

    RTX51完全模式提供2種方法來(lái)處理中斷:一種是C51的中斷函數(shù),另一種是RTX51的任務(wù)中斷。它又可以分為快速任務(wù)中斷和標(biāo)準(zhǔn)任務(wù)中斷。對(duì)于中斷函數(shù)這種方法,它同時(shí)也可以在不使用RTX51的情況下使用,當(dāng)中斷發(fā)生的時(shí)候,程序就跳到了相應(yīng)的中斷函數(shù),它和正在運(yùn)行的任務(wù)是相互獨(dú)立的,中斷的處理是在RTX51系統(tǒng)之外,和任務(wù)切換規(guī)則沒(méi)有關(guān)聯(lián)。對(duì)于任務(wù)中斷的方法,不管使用快速還是標(biāo)準(zhǔn)任務(wù)來(lái)處理中斷,如果中斷發(fā)生,等待中斷的任務(wù)就從“等待”狀態(tài)進(jìn)入到就緒狀態(tài),并按照任務(wù)切換規(guī)則進(jìn)行切換。這種中斷處理是完全 集成在RTX51的內(nèi)部,硬件中斷事件的處理和信號(hào)、消息的處理是完全相同的。在系統(tǒng)響應(yīng)時(shí)間上中斷函數(shù)是最快的。RTX51必須完全控制中斷使能寄存器,這樣才能遵守任務(wù)的切換規(guī)則并保證中斷程序的無(wú)誤進(jìn)行。必須注意中斷使能寄存器是由RTX51完全控制的,禁止用戶手動(dòng)修改。

    3 應(yīng)用實(shí)例

    以下給出RTX51在單片機(jī)控制的GPS接收板上的應(yīng)用。

    (1)系統(tǒng)硬件組成

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

    (2)系統(tǒng)軟件構(gòu)成

    軟件運(yùn)行環(huán)境KEIL uVision2 6.20集成開發(fā)環(huán)境加上RTX51完全版。任務(wù)KEY-BOARD,監(jiān)測(cè)鍵盤的情況,如果有按鍵按下,把按鍵的編碼發(fā)送到郵箱1,外部中斷1等待接收GPS數(shù)據(jù),并把數(shù)據(jù)存儲(chǔ)起來(lái),向DISPLAY任務(wù)發(fā)出信號(hào),進(jìn)行處理。任務(wù)SEND_OUT,把接收到的數(shù)據(jù) 進(jìn)行處理,并發(fā)送出去。任務(wù)VOICE進(jìn)行語(yǔ)音輸出。
 

    下面給出簡(jiǎn)寫的源程序:

    #include<RTX51.h>                                //包含RTX51文件
    #define DISPLAY 0
    #define SEND_OUT 1
    #define KEY_BOARD 2
    #define VOICE 3
    void main(void)
   {   init_system();                               //系統(tǒng)初始化
       os_start_system(DISPLAY);                    //啟動(dòng)RTX51
       }
    viod task0(void)_task_DISPLAY
   {   os_set_slice(1000);                          //設(shè)置時(shí)間片大小
       os_enable_isr(0);                            //允許外部中斷0
       os_creat_task(SEND_OUT);                     //啟動(dòng)SEND_OUT任務(wù)
       os_creat_task(KEY_BOARD);                    //啟動(dòng)KEY_BOARD任務(wù)
       os_creat_task(VOICE);                        //啟動(dòng)VOICE任務(wù)
       for(;;){
       switch(os_wait(K_SIG+K_MBX+1255,& keyboard)) //等待接收信號(hào)和鍵盤消息,分類處理
      {case EVENT_SIGNAL;                           //當(dāng)接收到信號(hào)的時(shí)候
          display1(); break;
       case EVENT_MBOX:                             //當(dāng)從郵箱接收到數(shù)據(jù)的時(shí)候
       switch(keyboard)
      {   case '1':
          ...
          os_send_signal(SEND_OUT);                 //向任務(wù)SEND_OUT發(fā)送信號(hào)
          ...
          os_send_signal(VOICE);}                   //向任務(wù)VOICE發(fā)送信號(hào)
          ...;}
          ...;}
          }
          void task1(void)_task_SEND_OUT            //處理發(fā)送數(shù)據(jù)任務(wù)
         { while(1)
          {    os_wait(K_SIG,255,0)                 //等待信號(hào)
               operation_send();
       }
       void task3(void)_task_VOICE
      { while(1){
          os_wait_signal(K_SIG,255,0);              //等待語(yǔ)音處理信號(hào)
          voice();}
       }
       void interrupt1(void)interrupt 2 using 1
      {   read_gps_data (p_gps_data);               //接收數(shù)據(jù)
          isr_send_signal(DISPLAY);                 //向DISPLAY任務(wù)發(fā)信號(hào)
       }
          #pragma REGISTERBANK (2)                  //使用寄存器組2
       void task2(void)_task_KEYBOARD_priority_3    //設(shè)置為快速任務(wù)
      {   os_attach_interrupt(0);                   //綁定任務(wù)和外部中斷0
          while(1){
          os_wait(K_INT,255,0);                     //等待中斷的發(fā)生
          KEY=iic_read_keyboard();
          os_send_message(1,KEY,0);}                //將鍵盤編碼發(fā)送到郵箱1
       }

    4 結(jié)論

    通過(guò)實(shí)踐我們可以發(fā)現(xiàn),使用RTX51開發(fā)單片機(jī)程序更加方便了,尤其是較大的程序,避免了自己寫消息循環(huán)等煩瑣工作,效率明顯增加了。在硬件資源足夠的情況下,效果更加明顯。
  • 上一篇: 用8031單片機(jī)控制的數(shù)字鐘
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1