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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 時間片調(diào)度在單片機(jī)中的運(yùn)用

          時間片調(diào)度在單片機(jī)中的運(yùn)用

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          單片機(jī)在系統(tǒng)中充當(dāng) CPU 的角色,需要同時處理多個事務(wù)。如與 PC 機(jī)通信,將收到的信息轉(zhuǎn)發(fā)給從機(jī),監(jiān)視數(shù)據(jù)處理情況等一些繁雜而又重

          本文引用地址:http://www.ex-cimer.com/article/201611/321180.htm

          要的事情。如何協(xié)調(diào)好各個事務(wù)之間的關(guān)系,并有條不紊的執(zhí)行各個事務(wù),這就需要在編寫程序時采用合適的算法進(jìn)行處理。一般的方法就

          是在單片機(jī)中移植操作系統(tǒng),由操作系統(tǒng)來管理各個事務(wù)。但由于系統(tǒng)要占用一定的內(nèi)部資源,這對本身資源非常有限的單片機(jī)來說是不現(xiàn)

          實(shí)的。所以,很少在單片機(jī)中采用操作系統(tǒng),而是采用時間片輪詢調(diào)度的方法進(jìn)行各任務(wù)的管理。

          時間片輪詢調(diào)度是一種古老而又簡單的算法,廣泛運(yùn)用于無操作系統(tǒng)的微處理器中。在系統(tǒng)中,每個進(jìn)程被分配一個時間段,稱作時間片,

          即該進(jìn)程允許運(yùn)行的時間。如果在時間片結(jié)束時進(jìn)程還在運(yùn)行,則 CPU 將被剝奪并分配給另一個進(jìn)程。如果進(jìn)程在時間片結(jié)束前阻塞或結(jié)束

          ,則 CPU 當(dāng)即進(jìn)行切換。調(diào)度程序所要做的就是維護(hù)一張就緒進(jìn)程列表,當(dāng)進(jìn)程用完它的時間片后,它被移到隊列的末尾。

          時間片輪詢調(diào)度中有趣的一點(diǎn)是如何確定時間片的長度。從一個進(jìn)程切換到另一個進(jìn)程是需要一定時間的,因?yàn)橐4婧脱b入寄存器值及內(nèi)

          存映像等保護(hù)現(xiàn)場的工作,更新各種表格和隊列等。假如進(jìn)程切換,有時稱為上下文切換,需要的時間為 5 毫秒,再假設(shè)時間片長度設(shè)定為

          20 毫秒,則在做完 20 毫秒有用的工作之后, CPU 將花費(fèi) 5 毫秒來進(jìn)行進(jìn)程切換。 CPU 時間的 20% 被浪費(fèi)在了管理開銷上。進(jìn)程切換時間一定的情

          況下,如果時間片長度設(shè)定的越小時,這種浪費(fèi)更明顯。所以,時間片長度與 CPU 利用率是一對不可調(diào)和的矛盾,必須處理好它們之間的關(guān)

          系。

          為了提高 CPU 效率,我們可以將時間片長度設(shè)得大一些,這時浪費(fèi)的時間只有就會相對減小。但在一個分時系統(tǒng)中,各個任務(wù)對時間片長度

          的要求是不一致的。例如在一個系統(tǒng)中,可能要求每秒鐘更新一下顯示內(nèi)容,每幾十毫秒要掃描一下按鍵,每幾毫秒要檢測一下串口緩沖區(qū)

          等……可見,各個任務(wù)對時間的依賴程度是不一樣的。如果時間片設(shè)得太長,某些對實(shí)時性要求高的任務(wù)可能得不到執(zhí)行,使得系統(tǒng)的實(shí)時

          性變差。總之,時間片的設(shè)定應(yīng)滿足對實(shí)時性要求最高的那個任務(wù),這樣才能確保每個任務(wù)都可以及時得到執(zhí)行而不被錯過。

          要在一個單片機(jī)系統(tǒng)中實(shí)現(xiàn)時間片輪詢調(diào)度,需要依照以下的步驟 :

          2 確定任務(wù)總數(shù)及各個任務(wù)實(shí)對時間實(shí)時性的要求

          2 根據(jù)任務(wù)對時間的要求,確定時間片的長度

          2 估算執(zhí)行每個任務(wù)所花費(fèi)的時間,確保任務(wù)能夠在時間片的長度內(nèi)執(zhí)行完畢

          2 如果任務(wù)較大,時間片不足于讓任務(wù)執(zhí)行完,此時可細(xì)化該任務(wù)

          在下面的代碼片段中,共有 4 個任務(wù)需要執(zhí)行,其中串口對實(shí)時性的要求最高。串口采用的波特率為 2400Baud , 8 位數(shù)據(jù),無校驗(yàn), 1 個停止

          位。所以傳輸 1 字節(jié)數(shù)據(jù)所需時間為: 4.17ms ,故將時間片長度設(shè)定在 4ms 是合理的。單片機(jī)主機(jī)系統(tǒng)的時間片處理函數(shù)如下所示:

          #pragma interrupt_handler timer1_ovf_isr:9

          void timer1_ovf_isr(void)

          {

          //TIMER1 has overflowed

          TCNT1H = 0xF0; //reload counter high value

          TCNT1L = 0x60; //reload counter low value

          TimeCount++;

          if(TimeCount==50){TimeCount=0; CC1100_SendFlag=1;} // 無線收發(fā)任務(wù)處理標(biāo)志

          TimeOver(); // 超時檢測函數(shù)

          Alarm_Detect(); // 告警檢測函數(shù)

          DealComFlag=1; // 串口任務(wù)處理標(biāo)志

          }

          在主函數(shù)中,根據(jù)標(biāo)志位調(diào)用相應(yīng)的函數(shù)進(jìn)行數(shù)據(jù)處理,然后將標(biāo)志位清除,等到下一個時間片到來后再開始新一輪的數(shù)據(jù)處理。

          int main(void)

          {

          if(CC1100_SendFlag==1) { ... ; CC1100_SendFlag=0; } // 無線收發(fā)任務(wù)處理標(biāo)志

          if(DealComFlag==1){ ... ; DealComFlag=0; } // 串口任務(wù)處理標(biāo)志

          ......

          }



          關(guān)鍵詞: 時間片調(diào)度單片

          評論


          技術(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); })();