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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用Protothread實(shí)現(xiàn)實(shí)時多任務(wù)系統(tǒng)

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

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

            程序框架一般類似于程序1所示結(jié)構(gòu):系統(tǒng)中有3個任務(wù)——TaskA、TaskB、TaskC,均放置于主循環(huán)內(nèi),在每一個循環(huán)周期內(nèi)都被執(zhí)行一次。在這種結(jié)構(gòu)中,能滿足系統(tǒng)實(shí)時性要求的條件是: (當(dāng)且僅當(dāng))TaskA 、TaskB、TaskC三個任務(wù)的運(yùn)行時間之和要小于系統(tǒng)實(shí)時響應(yīng)的時間要求。在系統(tǒng)較為簡單、任務(wù)運(yùn)行時間能滿足實(shí)時要求的情況下,可以采用這種最簡單、最直接的順序執(zhí)行方式。但是更多的情形是,系統(tǒng)不僅要對一些事件做出實(shí)時響應(yīng),并且還要承擔(dān)很多其他的非實(shí)時任務(wù),并且這些非實(shí)時任務(wù)的運(yùn)行時間要遠(yuǎn)遠(yuǎn)超出了實(shí)時響應(yīng)時間的要求。傳統(tǒng)的這種程序結(jié)構(gòu)顯然不能滿足系統(tǒng)的實(shí)時性要求。通常的解決方案是,引入實(shí)時,由進(jìn)行任務(wù)的調(diào)度,優(yōu)先執(zhí)行實(shí)時任務(wù),達(dá)到滿足系統(tǒng)實(shí)時性的要求。

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

            程序1程序框架

            一般來說,在系統(tǒng)開發(fā)中引入實(shí)時有諸多優(yōu)點(diǎn):

            更好地支持多任務(wù),實(shí)時性要求能夠得以保障;
            程序開發(fā)更加容易,也更便于維護(hù);
            有利于提高系統(tǒng)的穩(wěn)定性和可靠性。但是,操作系統(tǒng)的引入也將帶來較多的系統(tǒng)開銷:
            實(shí)時操作系統(tǒng)往往使用定時器中斷來切換任務(wù),需要消耗不少的CPU處理時間;
            實(shí)時操作系統(tǒng)在切換任務(wù)時需要保護(hù)當(dāng)前任務(wù)的執(zhí)行現(xiàn)場,這就需要為每個任務(wù)準(zhǔn)備足夠多的RAM空間來實(shí)現(xiàn)任務(wù)切換;
            實(shí)時操作系統(tǒng)的本身也需要占用相當(dāng)數(shù)量的Flash空間和RAM空間。

            如果這些系統(tǒng)開銷都在可承受的范圍內(nèi),那么采用實(shí)時操作系統(tǒng)將是最佳的選擇。但是在很多應(yīng)用的場合,特別是系統(tǒng)的資源非常緊張的單片機(jī)應(yīng)用,實(shí)時操作系統(tǒng)帶來的系統(tǒng)開銷往往是不可接受的。而更換速度更快、RAM更大、Flash更多的CPU意味著成本的增加,且會降低產(chǎn)品的競爭力。當(dāng)系統(tǒng)中的任務(wù)不須進(jìn)行非常復(fù)雜的優(yōu)先級調(diào)度,而且其任務(wù)也相對簡單時,引入實(shí)時操作系統(tǒng)似有殺雞用牛刀之嫌。

            1 的特點(diǎn)

            是專為資源有限的系統(tǒng)設(shè)計(jì)的一種耗費(fèi)資源特別少并且不使用堆棧的線程模型,其特點(diǎn)是:

            以純C語言實(shí)現(xiàn),無硬件依賴性;
            極少的資源需求,每個僅需要2個額外的字節(jié);
            可以用于有操作系統(tǒng)或無操作系統(tǒng)的場合;
            支持阻塞操作且沒有棧的切換。

            使用Protothread實(shí)現(xiàn)多任務(wù)的最主要的好處在于它的輕量級。每個Protothread不需要擁有自已的堆棧,所有的Protothread共享同一個堆??臻g,這一點(diǎn)對于RAM資源有限的系統(tǒng)尤為有利。相對于操作系統(tǒng)下的多任務(wù)而言,每個任務(wù)都有自已的堆棧空間,這將消耗大量的RAM資源,而每個Protothread僅使用一個整型值保存當(dāng)前狀態(tài)。

            2 Protothread的阻塞運(yùn)行機(jī)制

            以下是一個典型的Protothread程序示例:

            程序2Protothread程序示例

            這是一個非常簡單的無線通信的狀態(tài)切換程序①,展開Protothread的宏定義,便可以得到程序3所示的展開代碼:

            程序3Protothread宏展開代碼

            當(dāng)Protothread程序運(yùn)行到PT_WAIT_UNTIL時,判斷其運(yùn)行條件是否滿足,若不滿足,則阻塞。通過比對程序2和程序3的程序代碼可以得知,Protothread的阻塞其實(shí)質(zhì)就是函數(shù)返回,只不過在返回前保存了當(dāng)前的阻塞位置,待下一次Protothread被調(diào)用時,直接跳到阻塞位置執(zhí)行,再次判斷運(yùn)行條件是否滿足,并執(zhí)行后續(xù)程序或繼續(xù)阻塞。

            3 利用Protothread構(gòu)造實(shí)時

            與操作系統(tǒng)下的多任務(wù)不同,操作系統(tǒng)下的每個任務(wù)可在任意時刻被打斷并阻塞,Protothread僅能在程序員指定位置阻塞。用Protothread實(shí)現(xiàn)實(shí)時多任務(wù),正是利用了Protothread在指定位置阻塞的特點(diǎn),讓出執(zhí)行權(quán)限給更高優(yōu)先級的任務(wù)先運(yùn)行。

            下面舉例說明如何利用Protothread構(gòu)造實(shí)時

            系統(tǒng)要求:

            TaskA實(shí)時任務(wù),30 ms內(nèi)響應(yīng),運(yùn)行時間<20 ms;

            TaskB實(shí)時任務(wù),200 ms內(nèi)響應(yīng),運(yùn)行時間<40 ms;

            TaskC非實(shí)時任務(wù),響應(yīng)時間無要求,運(yùn)行時間>30 ms。

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

          上一頁 1 2 下一頁

          評論


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