新聞中心

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

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

        作者: 時間:2009-09-18 來源:網絡 收藏
        1 概 述
        嵌入式行業的飛速發展使得嵌入式芯片的容量和功能都在不斷地提升。以工業應用最為常見的8位微控制器為例,其ROM和RAM的容量都在不斷擴大,甚至一些高端的8位處理器可以使用簡單的操作系統(OS)來進行開發。同時,32位處理器的廣泛普及也使得其價格逐漸逼近8位處理器。所以對很多應用來說,開發的簡化和迅速成為最主要的目標。尤其是當使用一款新的處理器或者硬件電路時,快速的搭建其開發的框架變得尤其重要。在嵌入式系統中,通常會采用兩種不同的任務管理和調度方式:事件觸發和。事件觸發方式以事件的發生為核心,往往會采用多級中斷的方法來實現,其發生的時間具有隨機性。所以事件觸發方式具有較好的實時性,但是這樣也意味著該系統具有較高的復雜度。而且,事件觸發方式的開銷往往是很大的。Alexander Metzner的研究指出:一個包含27個任務、采用RM(Rate Mono―tonic)調度算法的事件觸發系統,CPU的實際利用率僅為18%。
        方式開發的系統,保證了在同一時刻只處理一個事件,雖然犧牲了并發處理的實時性,但是保證了系統的可靠性,并且使得程序員能很好地預測程序的流程。Kopetz就指出:使用基于的合作式調度器會使得系統有非常好的可預測性。在本項目中,嵌入式系統的功能主要集中在控制一些具有一定時隙間隔的外圍設備上面。鍵盤的掃描、顯示的刷新、數據緩沖的存儲等都是需要定期完成的任務,而這些任務的實時要求也并不高,所以選用時間觸發方式的合作式調度器成為系統設計的首選。
        Protothrcads利用隱式的return提供了阻塞的功能,經過Protothrcads封裝的任務,其程序的邏輯更加接近處理事件的上層邏輯,大大簡化了編程。而且使用簡單的宏就可以實現Protothrcads,其開銷也是很小的。本文就對使用Protothrcads應用于時間觸發的合作式調度器做一些討論。

        2 Protothreads簡介
        Protothrcads是由瑞典計算機科學研究所的科學家Adam Dunkels所創的一種新的線程編程方法。按AdamDunkels所說,Protothreads是專為資源緊張的系統設計的一種耗費資源少,且不使用堆棧的線程模型,它可以不使用復雜的狀態機機制來實現順序流的控制。Proto―thrcads也可以用于操作系統當中。
        簡單地說,Protothrcads借鑒了用c語言實現協同(co―routine)的原理,它應用switch―case語句的直接跳轉功能,實現了有條件阻塞(conditional block),最終實現了虛擬的并行處理功能(concurrent)。實際上,Protothrcads并不是真正的線程,在多任務的切換中并不會真正涉及上下文的切換,其線程的調度也僅僅是依靠隱式的return,進而退出函數體來完成的。但是Protothreads的優點卻是實實在在的。首先它不需要堆棧空間,而正如筆者用宏實現的那樣,Protothrcads也實現了很多只有線程編程方法才能實現的機制,比如阻塞。而用宏進行了封裝之后,使用者完全可以像使用線程一樣使用它們,而且其邏輯更加簡化,這大大增加了程序的清晰度,并降低了開發維護的難度。
        在對實時性要求比較高或者說要求并行處理的場合,往往需要在任務A執行到一定程度、等待事件C發生時,退出當前任務A并轉而執行任務B;當事件C發生之后,系統繼續回到任務A,繼續方才的執行。所以必須將任務A上次執行到地方的環境存儲起來,以便重回任務A后可以接著打斷的地方繼續運行。線程的上下文切換可以達到這個目的,Simon Tatham用C語言實現的co―routine也可以。Protothreads正是借鑒了這一原理,如以下任務函數所示:

        本文引用地址:http://www.104case.com/article/188618.htm

        可以看出,在進行了宏擴展之后,下面的程序段和上面的程序段是完全相同的,但是宏封裝很好地構建了一個上層的邏輯體系。這正是Protothreads的核心所在。同時,這也決定了Protothreads具有一定的局限:
        ①Protothreads中使用的必須是靜態變量或者全局變量;
        ②避免與switch語句的合用(Protothreads的實現已經用了switch語句);
        ③因為編譯器會將__LINE__解釋為當前所在的行號,所以不能將多個“返回”置于同一行。

        3 調度器設計
        時間觸發方式的嵌入式系統是根據定時器產生的恒定間隔的中斷來觸發和管理任務的。系統依靠一個基準的時間中斷,以此中斷為任務處理的節奏和“節拍”,任務的調度發生在“節拍”規定的時刻。中斷服務子程序也同樣占用這個時間間隔,為了系統的穩定性,一方面要使中斷服務子程序盡可能短,以節省任務的執行時間;另一方面,執行的任務也應該盡可能短,一些比較耗時的任務可以細分為若干個子任務加以調度。同時,這也要求調度器的設計盡可能簡單。本文的設計思想就是對于系統僅僅定義一個任務控制塊(TCB)隊列,每個任務對應于隊列中的一個節點,由中斷服務子程序更改TCB隊列中的記錄,調度函數根據此TCB來進行調度。可以略微修改Proto―threads中的結構體pt,以滿足作為TCB隊列節點的需要。當然,此結構也需要聲明為全局變量或者靜態變量。其數據結構如下所示:


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 广平县| 安丘市| 拉孜县| 阜南县| 和龙市| 朝阳区| 广汉市| 广西| 辽阳县| 怀集县| 大足县| 雅安市| 习水县| 江津市| 陇川县| 白朗县| 四川省| 澄城县| 清镇市| 渝北区| 广水市| 黎川县| 宝山区| 台南县| 昂仁县| 平舆县| 七台河市| 深水埗区| 潮州市| 土默特左旗| 博湖县| 山东省| 临洮县| 安溪县| 定安县| 马关县| 金平| 甘南县| 隆昌县| 麻江县| 酒泉市|