新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 時間觸發模式下的ProtothreadS設計應用

        時間觸發模式下的ProtothreadS設計應用

        作者: 時間:2009-09-18 來源:網絡 收藏


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


        調度函數快速輪詢各個任務的TCB。因為定時器中斷會定期更新任務的TCB信息,所以調度函數就可以根據TCB中ready的值來判斷是否需要執行某任務。執行任務過后清零該ready值。


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


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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 太湖县| 滨州市| 雷山县| 故城县| 沽源县| 吐鲁番市| 凤凰县| 石林| 紫云| 崇明县| 临邑县| 合川市| 大理市| 庄浪县| 麦盖提县| 乐山市| 毕节市| 海南省| 饶平县| 新泰市| 肥乡县| 金秀| 巴南区| 桦川县| 黔南| 北流市| 扶余县| 化隆| 宾阳县| 交口县| 望谟县| 大庆市| 大足县| 锡林浩特市| 黎城县| 韶关市| 和政县| 塔城市| 正镶白旗| 师宗县| 佛坪县|