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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 利用Protothread實現(xiàn)實時多任務系統(tǒng)

          利用Protothread實現(xiàn)實時多任務系統(tǒng)

          作者::長沙威勝儀表集團 羅光平 湖南大學 郭衛(wèi)鋒 時間:2008-07-09 來源:單片機與嵌入式系統(tǒng)應用 收藏

            設計思路:

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

            將TaskB和TaskC分成若干步,每步運行時間不超過10 ms(這個時間可視系統(tǒng)需求而定,例如TaskA若為40 ms內響應,則每步可擴至20 ms)。任務以3個的方式運行。首先執(zhí)行TaskA,在TaskA執(zhí)行完成1次后,釋放執(zhí)行權限,讓TaskB和TaskC執(zhí)行。TaskB或TaskC在每執(zhí)行1步之前檢查運行時間,一旦發(fā)現(xiàn)30 ms內不夠執(zhí)行1步時,阻塞運行,讓出執(zhí)行權限給TaskA。同樣,TaskB和TaskC的調度關系也類似,先運行TaskB,完成時釋放執(zhí)行權限,讓TaskC執(zhí)行;TaskC在每執(zhí)行1步之前檢查運行時間,若發(fā)現(xiàn)200 ms內不夠執(zhí)行1步時,阻塞運行,讓出執(zhí)行權限重新交給TaskB。

            源程序(Task0TimeCounter、Task1TimeCounter為計數(shù)器,每毫秒加1):

            模擬運行結果如表1所列。運行結果顯示,3個任務的運行情況完全滿足系統(tǒng)的設計要求。從資源需求來看,完成此例的系統(tǒng)設計,共需要12個字節(jié)的RAM空間。筆者進一步對定義文件做了少許修改和優(yōu)化,最終僅耗費6個字節(jié)。

            表1 模擬運行結果運行

            結語

            本文旨在解決資源緊張型應用的、多任務環(huán)境下的實時性問題。 通過借助的阻塞運行機制, 成功實現(xiàn)了低開銷的實時

            參考文獻

            [1] Adam Dunkels, Oliver Schmidt, Thiemo Voigt. Using Protothreads for Sensor Node Programming[C]. REALWSN'05 Workshop on RealWorld Wireless Sensor Networks, Stockholm, Sweden, June 2005

            [2] Adam Dunkels, Oliver Schmidt, Thiemo Voigt, et al. Protothreads: Simplifying EventDriven Programming of MemoryConstrained Embedded Systems[C]. In Proceedings of the Fourth ACM Conference on Embedded Networked Sensor Systems (SenSys 2006), Boulder, Colorado, USA, November 2006.

            [3] Labrosse Jean J. MicroC/OSII The Real Time Kernel Second Edition[M]. CMP Books, CMP Media.

            [4] 冉全. 單片機中基于多線程機制的實時多任務研究[J] .微型機與應用,2003(8): 39-40.

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();