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

          新聞中心

          單片機(jī)編程心得

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

          7.多任務(wù)程序,這個(gè)概念在前面也有提到,就是充分地利用CPU來(lái)實(shí)現(xiàn)多任務(wù)的前后臺(tái)操作,相當(dāng)于自己用程序構(gòu)造一個(gè)基于前后臺(tái)的多任務(wù)操作系統(tǒng),換句話說(shuō)就是通過(guò)定時(shí)器中斷合理地分配CPU資源來(lái)響應(yīng)不同的任務(wù)。多個(gè)任務(wù)需要CPU關(guān)照的頻度不一樣,我們選擇最快的那個(gè)頻度來(lái)作為定時(shí)器的節(jié)拍(通常為最小公倍數(shù),這樣方便定時(shí)器分配),然后通過(guò)定時(shí)器分頻,即滿足各個(gè)任務(wù)的響應(yīng)節(jié)拍。比如任務(wù)A頻度為50HZ,任務(wù)B為40HZ,這樣我們就可以去定時(shí)器中斷節(jié)拍為200HZ,每個(gè)任務(wù)設(shè)定一個(gè)節(jié)拍控制計(jì)數(shù)器C,當(dāng)C計(jì)數(shù)4次時(shí),任務(wù)切換到A,計(jì)數(shù)到5次切換B……

          void Timer0(void) interrupt 1

          {

          //賦初值,定義變量

          for(i=0; i

          {

          if(task_delay[i]) task_delay[i]--;

          }

          void (*run_task[MAX_TASK])(); //定義一個(gè)函數(shù)指針數(shù)組

          void main()

          {

          //***其余部分省略

          while(1)

          {

          if(task_delay[0] == 0) {(*run_task[0])();task_delay[0] = C;/*任務(wù)0計(jì)數(shù)初值*/}

          //類似任務(wù)調(diào)度部分省略

          }

          }

          同時(shí)我們也很清楚的知道,有些任務(wù)需要很長(zhǎng)的時(shí)間,如DS18B20溫度傳感器完成一次溫度轉(zhuǎn)換需要很長(zhǎng)的時(shí)間(相對(duì)于的us級(jí)來(lái)說(shuō)),這樣我們就可以將器件驅(qū)動(dòng)任務(wù)在劃分為:初始段,啟動(dòng)段,獲取結(jié)果段,等子任務(wù)段,可分別設(shè)定標(biāo)志位(switch+case語(yǔ)句),在需要等待較長(zhǎng)時(shí)間的地方,允許CPU去執(zhí)行其余任務(wù),另外可在主程序任務(wù)輪訓(xùn)中添加break來(lái)實(shí)現(xiàn)任務(wù)的優(yōu)先級(jí)劃分。


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

          評(píng)論


          相關(guān)推薦

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