<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 時(shí)間觸發(fā)模式下的ProtothreadS設計應用

時(shí)間觸發(fā)模式下的ProtothreadS設計應用

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


按照Protothreads的定義,lc_t類(lèi)型就是unsignedshort類(lèi)型。每個(gè)任務(wù)分配一個(gè)pt結構。將pt結構修改以后,還必須對Protothreads提供的一些功能函數做一些修改。比如,可以將PT_INIT(pt)更改為PT_INIT(pt,10,0),表示該任務(wù)10 ms執行一次,且ready的初始值為O。隊列的實(shí)現使用指針數組。
的系統中,定時(shí)器中斷作為系統一個(gè)固定的時(shí)間片,在具體實(shí)現中可以設置成CTC。這個(gè)時(shí)間片的選擇必須依據具體的應用,設置得過(guò)大會(huì )對系統調度的時(shí)效性造成比較大的影響,過(guò)小又會(huì )給調度器造成明顯的負擔,而且壓縮任務(wù)的執行時(shí)間會(huì )使程序流程的可預測性受到影響。因為本文所涉及任務(wù)的周期大多是若干ms,所以可以將定時(shí)器中斷設置為1 ms。ISR的執行流程大致如下:每一次定時(shí)中斷,將任務(wù)的count值減1,直到count為O時(shí)表明該任務(wù)的間隔時(shí)間已到可以執行了,并且將初值重新賦給count,以重新開(kāi)始下輪計數。具體程序如下:


調度函數快速輪詢(xún)各個(gè)任務(wù)的TCB。因為定時(shí)器中斷會(huì )定期更新任務(wù)的TCB信息,所以調度函數就可以根據TCB中ready的值來(lái)判斷是否需要執行某任務(wù)。執行任務(wù)過(guò)后清零該ready值。


如果任務(wù)task_XXX在執行過(guò)程中發(fā)生中斷,ready值沒(méi)有被清零,待中斷返回后會(huì )繼續執行之前的任務(wù),但是這樣會(huì )使得下一時(shí)隙任務(wù)的執行延遲,造成系統的安全隱患,所以應當盡量避免長(cháng)任務(wù)的出現。而如果在任務(wù)執行中出現條件阻塞(如PT_WAIT_UNTIL),則正好可以發(fā)揮Protothreads提供的并行處理能力,并且在處理類(lèi)似鍵盤(pán)掃描的狀態(tài)機任務(wù)時(shí)具有很好的邏輯性和清晰度。當然,這樣做的前提是:這里的任務(wù)的實(shí)時(shí)性要求不高,允許出現一定的時(shí)延。
整個(gè)main()函數定義3個(gè)任務(wù)task_A、task_B和task_C,并且分別給每個(gè)任務(wù)分配一個(gè)結構體pt_A、pt_B和pt_C。3個(gè)任務(wù)的執行周期分別是10 ms、15 ms和2ms。調度函數處于一個(gè)大循環(huán)中。具體實(shí)現如下所示:


4 總結和展望
Protothreads為嵌入式系統提供了很好的并行處理能力,而且非常易于操作;在的系統中,Pro―tothreads依然能夠發(fā)揮其巨大的作用。在本文中筆者的設計很好地達到了實(shí)際的要求,最大程度上簡(jiǎn)化了設計和維護。當然,應用Protothreads更加巧妙的設計方法和理念還需要不斷地實(shí)踐和總結。


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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>