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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 改進(jìn)型時(shí)間觸發(fā)嵌入式系統(tǒng)編程模式

          改進(jìn)型時(shí)間觸發(fā)嵌入式系統(tǒng)編程模式

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

          由于任務(wù)⑧執(zhí)行一次要幾秒鐘的,整個(gè)超級(jí)循環(huán)執(zhí)行一次至少大于任務(wù)⑧需要的,也就是說(shuō)這個(gè)超級(jí)循環(huán)循環(huán)一次要幾秒鐘,將滿足不了各任務(wù)響應(yīng)時(shí)間的要求。
          要解決這個(gè)問(wèn)題,只有把任務(wù)⑧拆分成很多個(gè)子任務(wù),將每個(gè)子任務(wù)的耗時(shí)壓縮到10 ms左右,并定義好各個(gè)子任務(wù)完成后的狀態(tài),在超級(jí)大循環(huán)中每次根據(jù)狀態(tài)只執(zhí)行一個(gè)子任務(wù),程序結(jié)構(gòu)如下:
          while(1){
          任務(wù)①;
          任務(wù)②;
          ……
          switch(子任務(wù)狀態(tài)){
          case 子任務(wù)狀態(tài)①:
          子任務(wù)①;
          break;
          ……
          case 子任務(wù)狀態(tài)②:
          子任務(wù)②;
          break;
          ……
          case 子任務(wù)狀態(tài)c.JPG
          子任務(wù)c.JPG
          break;
          }
          }
          這樣,就需要把一個(gè)耗時(shí)幾秒的FFT運(yùn)算任務(wù)拆分成幾百個(gè)耗時(shí)10 ms左有的子任務(wù),這顯然是不可接受的。除此之外,超級(jí)大循環(huán)結(jié)構(gòu)隱含的一個(gè)缺點(diǎn)就是隨著任務(wù)的增加,循環(huán)體的執(zhí)行時(shí)間是線性增加的,在實(shí)際設(shè)計(jì)中即使沒(méi)有像任務(wù)⑧那樣的高耗時(shí)任務(wù),當(dāng)功能增加時(shí)要保證響應(yīng)的及時(shí)性也是一個(gè)不小的挑戰(zhàn)。
          1.2 使用“時(shí)間”進(jìn)行
          “時(shí)間”的核心是建立一個(gè)基丁時(shí)間的合作式的任務(wù)調(diào)度器,在中盡量減少事件觸發(fā)(減少中斷的使用),系統(tǒng)通過(guò)任務(wù)調(diào)度器完成各任務(wù)的調(diào)度執(zhí)行,下面是“時(shí)間觸發(fā)編程”的典型程序結(jié)構(gòu):
          d.JPG
          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


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