www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 模擬 > 模擬
[導(dǎo)讀]Protothrcads是一種無(wú)需堆棧的極輕量級(jí)線程。本文旨在討論P(yáng)rotothrcads在時(shí)間觸發(fā)模式系統(tǒng)中所能發(fā)揮的優(yōu)勢(shì)。以一個(gè)具體例子為依據(jù),詳細(xì)介紹了如何使用經(jīng)過(guò)改進(jìn)之后的Protothrcads構(gòu)建一個(gè)多任務(wù)調(diào)度器,并使之順利應(yīng)用于時(shí)間觸發(fā)模式的系統(tǒng)中。

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

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

    可以看出,在進(jìn)行了宏擴(kuò)展之后,下面的程序段和上面的程序段是完全相同的,但是宏封裝很好地構(gòu)建了一個(gè)上層的邏輯體系。這正是Protothreads的核心所在。同時(shí),這也決定了Protothreads具有一定的局限:
    ①Protothreads中使用的必須是靜態(tài)變量或者全局變量;
    ②避免與switch語(yǔ)句的合用(Protothreads的實(shí)現(xiàn)已經(jīng)用了switch語(yǔ)句);
    ③因?yàn)榫幾g器會(huì)將__LINE__解釋為當(dāng)前所在的行號(hào),所以不能將多個(gè)“返回”置于同一行。

3 調(diào)度器設(shè)計(jì)
   
時(shí)間觸發(fā)方式的嵌入式系統(tǒng)是根據(jù)定時(shí)器產(chǎn)生的恒定間隔的中斷來(lái)觸發(fā)和管理任務(wù)的。系統(tǒng)依靠一個(gè)基準(zhǔn)的時(shí)間中斷,以此中斷為任務(wù)處理的節(jié)奏和“節(jié)拍”,任務(wù)的調(diào)度發(fā)生在“節(jié)拍”規(guī)定的時(shí)刻。中斷服務(wù)子程序也同樣占用這個(gè)時(shí)間間隔,為了系統(tǒng)的穩(wěn)定性,一方面要使中斷服務(wù)子程序盡可能短,以節(jié)省任務(wù)的執(zhí)行時(shí)間;另一方面,執(zhí)行的任務(wù)也應(yīng)該盡可能短,一些比較耗時(shí)的任務(wù)可以細(xì)分為若干個(gè)子任務(wù)加以調(diào)度。同時(shí),這也要求調(diào)度器的設(shè)計(jì)盡可能簡(jiǎn)單。本文的設(shè)計(jì)思想就是對(duì)于系統(tǒng)僅僅定義一個(gè)任務(wù)控制塊(TCB)隊(duì)列,每個(gè)任務(wù)對(duì)應(yīng)于隊(duì)列中的一個(gè)節(jié)點(diǎn),由中斷服務(wù)子程序更改TCB隊(duì)列中的記錄,調(diào)度函數(shù)根據(jù)此TCB來(lái)進(jìn)行調(diào)度??梢月晕⑿薷腜roto—threads中的結(jié)構(gòu)體pt,以滿足作為TCB隊(duì)列節(jié)點(diǎn)的需要。當(dāng)然,此結(jié)構(gòu)也需要聲明為全局變量或者靜態(tài)變量。其數(shù)據(jù)結(jié)構(gòu)如下所示:


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


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


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


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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

(全球TMT2022年10月13日訊)全球營(yíng)銷衡量與體驗(yàn)管理平臺(tái) AppsFlyer 發(fā)布《廣告平臺(tái)綜合表現(xiàn)報(bào)告》第 15 版,對(duì)移動(dòng)廣告行業(yè)各家媒體渠道進(jìn)行排名。2022 年上半年,受隱...

關(guān)鍵字: APP ADS GOOGLE BSP

2022 年上半年,App 安裝廣告花費(fèi)預(yù)算下滑 14%,自有媒體使用量一路攀升 北京2022年10月12日 /美通社/ -- 今天,全球營(yíng)銷衡量與體驗(yàn)管理平臺(tái) AppsFlyer 發(fā)布《廣告平臺(tái)綜...

關(guān)鍵字: 移動(dòng) APPS ADS BSP

北京2022年9月30日 /美通社/ -- 隨著信息化的發(fā)展,全國(guó)醫(yī)療職能機(jī)構(gòu)也走向數(shù)字化的變革,通過(guò)科學(xué)管理、建設(shè)智能化的醫(yī)保平臺(tái)驅(qū)動(dòng)數(shù)據(jù)價(jià)值 , 打造高效、精細(xì)、便捷、可靠的服務(wù)平臺(tái),幫助群眾更便利、 高效地就醫(yī)問(wèn)診...

關(guān)鍵字: PD SE 數(shù)據(jù)中心 觸發(fā)

(全球TMT2022年8月31日訊)奧地利麥克風(fēng)品牌萊維特全球官宣其新版入門級(jí)鼓麥套裝BEATKIT以及專業(yè)級(jí)鼓麥套裝BEATKIT PRO。新版BEATKIT套裝專為追求性價(jià)比的入門級(jí)用戶打造。套裝共包含四支萊維特麥...

關(guān)鍵字: 麥克風(fēng) ADS 立體聲 OV

北京2022年8月31日 /美通社/ -- 見知教育科技集團(tuán)有限公司(以下簡(jiǎn)稱"公司"或"見知")(NASDAQ交易代碼:J...

關(guān)鍵字: SE ST NI ADS

北京2022年8月26日 /美通社/ -- 見知教育科技集團(tuán)有限公司(以下簡(jiǎn)稱"公司"),一家中國(guó)領(lǐng)先的數(shù)字教育內(nèi)容提供商,今天宣布了其首次公開發(fā)行5,0...

關(guān)鍵字: ADS ST SE ECU

(全球TMT2022年7月28日訊)7月27日,Innovusion圖達(dá)通亮相中國(guó)高速公路信息化大會(huì)暨技術(shù)產(chǎn)品展示會(huì),最新發(fā)布自主研發(fā)的全息車輛感知系統(tǒng)(OmniSense CD2.0)。該方案基于Innovusion...

關(guān)鍵字: OV IO 觸發(fā) 激光雷達(dá)

長(zhǎng)沙2022年7月27日 /美通社/ -- 7月27日,Innovusion圖達(dá)通亮相中國(guó)高速公路信息化大會(huì)暨技術(shù)產(chǎn)品展示會(huì),最新發(fā)布自主研發(fā)的全息車輛感知系統(tǒng)(OmniSense CD2.0)。該方案基于Innovus...

關(guān)鍵字: 黑科技 OV IO 觸發(fā)

???022年7月27日 /美通社/ -- 在第二屆中國(guó)國(guó)際消費(fèi)品博覽會(huì)期間,全球知名商業(yè)決策信息和分析服務(wù)機(jī)構(gòu)鄧白氏(Dun & Bradstreet)宣布其中國(guó)運(yùn)營(yíng)主體華夏鄧白氏和臨港集團(tuán)下屬上海質(zhì)量管理科學(xué)...

關(guān)鍵字: 數(shù)字化 網(wǎng)絡(luò) ADS BSP

(全球TMT2022年6月9日訊)全球廣告技術(shù)公司Smart AdServer以新名稱Equativ在14個(gè)國(guó)家重新啟動(dòng)了其全球業(yè)務(wù)。在此之前,該公司收購(gòu)了DynAdmic和LiquidM,兩家公司現(xiàn)已合并到Equat...

關(guān)鍵字: SMART TI ADM ADS

模擬

31144 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉