国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發布時間:2010-4-24 21:38    發布者:李寬
關鍵詞: Protothreads , 觸發 , 模式 , 設計 , 應用
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正是借鑒了這一原理,如以下任務函數所示:



可以看出,在進行了宏擴展之后,下面的程序段和上面的程序段是完全相同的,但是宏封裝很好地構建了一個上層的邏輯體系。這正是Protothreads的核心所在。同時,這也決定了Protothreads具有一定的局限:

    ①Protothreads中使用的必須是靜態變量或者全局變量;
    ②避免與switch語句的合用(Protothreads的實現已經用了switch語句);
    ③因為編譯器會將__LINE__解釋為當前所在的行號,所以不能將多個“返回”置于同一行。

3 調度器設計

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



按照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. Dunkels Adam Protothreads--Lightweight,Stackless Threads in C 2008
   2. Tatham Simon Coroutines in C 2008
   3. Dorin Michael Building "Instant-up" Real-time Operating Systems 2008
   4. Labrosse Jean J.邵貝貝 嵌入式實時操作系統μC/OS-II 2003
   5. 李奇.樊曉平 一種時間觸發的多任務調度器設計 [期刊論文] -單片機與嵌入式系統應用2008(5)

作者:華東師范大學 閆石 馬潮
來源:單片機與嵌入式系統應用 2009 (1)
本文地址:http://m.qingdxww.cn/thread-10778-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩毛片基地 | 日本在线免费播放 | 久久黄色视屏 | 国产一区二区三区播放 | 绿巨人香蕉草莓向日葵 | 欧美一进一出抽搐大尺度视频 | 亚洲精品欧美日本中文字幕 | 天堂在线天堂最新版 | 国产91av在线播放 | 天天操天天摸天天舔 | 四虎免费永久网站入口 | 日产精品卡2卡三卡乱码网址 | 国产精品俺来也在线观看了 | 2021国产麻豆剧传媒新片 | jizz日本zzz日本人 | 香蕉69精品视频在线观看 | 污污网站免费观看 | 久久精品一本到99热免费 | 香蕉网站在线观看 | 国产亚洲精品不卡在线 | 青青热久免费精品视频在首页 | 久久一本热| 永久影院 | 视频一区二区三区在线 | 国产在线拍| 亚洲欧美另类一区 | 麻豆国产精品视频 | 亚洲视频综合 | 成人精品一区二区www | 黑人操白逼 | 日韩欧美精品综合一区二区三区 | 岛国视频在线观看免费播放 | 天天做天天爱天天影视综合 | 国产永久免费视频 | 在线免费观看色视频 | jizz日本在线观看 | 麻豆啪啪 | 日韩高清在线二区 | 亚洲综合色视频在线观看 | 欧美经典成人在观看线视频 | 日日噜夜夜噜 |