<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于RTX51 的單片機(jī)軟件設(shè)計(jì)

          基于RTX51 的單片機(jī)軟件設(shè)計(jì)

          作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏


          2.3 RTX51中斷處理

          RTX51完全模式提供2種方法來(lái)處理中斷:一種是C51的中斷函數(shù),另一種是RTX51的斷。它又可以分為快速任務(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)中斷使能寄存器,這樣才能遵守任務(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集成開(kāi)發(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)。任務(wù)DISPLAY根據(jù)接收到的不同的信號(hào)和消息,進(jìn)行處理。任務(wù)SEND-OUT,把接收到的數(shù)據(jù)進(jìn)行處理,并發(fā)送出去。任務(wù)VOICE進(jìn)行語(yǔ)音輸出。
          系統(tǒng)硬件、軟件結(jié)構(gòu)如圖2所示。



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

          #include //包含RTX51頭文件
          #define DISPLAY 0
          #define SEND_OUT1
          #define KEY_BOARD2
          #define VOICE3
          void main(void)
          { init system(); //系統(tǒng)初始化
          os start system(DISPLAY); //啟動(dòng)RTX51
          }
          void 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(VOICE); //啟動(dòng)VOICE任務(wù)
          for(;;){
          switch(os_wait(K_SIG+K_MBX+1,255,&keyboard))//等待接收信號(hào)和鍵盤消息,分類處理
          {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 interrupt(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_KEYBOARSD_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開(kāi)發(fā)單片機(jī)程序更加方便了。尤其是較大的程序,避免了自己寫消息循環(huán)等繁瑣工作,效率明顯增加了。在硬件資源足夠的情況下,效果更加明顯。

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();