文豪 高宏 程思瑤 趙旭
摘 要:物聯(lián)網(wǎng)作為目前研究的熱點(diǎn)問題之一,在長期泛在方面卻存在問題,能源將成為制約其發(fā)展的關(guān)鍵因素之一,無源傳感器網(wǎng)絡(luò)應(yīng)運(yùn)而生。該網(wǎng)絡(luò)中的無源節(jié)點(diǎn)不配備電池等電源設(shè)備,而是從周圍的環(huán)境中捕獲太陽能,射頻能量,這樣大大增加了傳感器網(wǎng)絡(luò)的生命周期。本文在現(xiàn)有的無源節(jié)點(diǎn)IEA上實(shí)現(xiàn)了一種多任務(wù)內(nèi)核,結(jié)合MSP430微控制器體系結(jié)構(gòu)特點(diǎn),將中斷和普通調(diào)度情形下任務(wù)上下文統(tǒng)一,以此提供了兩階段調(diào)度。任務(wù)上下文以棧的形式存在,解決了該微控制器嵌入式應(yīng)用程序二進(jìn)制接口關(guān)于棧平衡的問題。本文在多任務(wù)基礎(chǔ)上實(shí)現(xiàn)了簡單的異步信號處理、信號量兩種任務(wù)間通信方式。實(shí)驗(yàn)結(jié)果表明該內(nèi)核在無源節(jié)點(diǎn)上運(yùn)行良好。
關(guān)鍵詞:多任務(wù)管理; 嵌入式操作系統(tǒng)內(nèi)核; 無源傳感網(wǎng)
Abstract: As a hot research topic, IoT applications are hard to be deployed widely and work continuously. Power resource is one of the key factors that could impact. In such cases, energy harvesting wireless sensor network is on its duty. The nodes in EH-WSN aren't equipped with power supply, for example batteries, they harvest solar energy, RF energy and so on from the surrounding environment. And this prolongs the life of the sensors network. This paper designs and implements a multi-tasks kernel on the IEA EH-WSN node. According to the features of MSP430 ultra-low power micro controller unit's architecture, the paper unifies the schedule triggered by interrupts and ordinary function calls. The task context is the same and stored on stack. Based on that, the paper divides the schedule into two phases. Also the paper solves the problems with EABI of MSP430 about the stack balance. Furthermore, a simple asynchronized inter-task communication manner-signal and semaphore are implemented. The experiment results show the kernel works well on IEA nodes.
Key words: multi-tasks; embedded operating system; EH-WSN
引言
物聯(lián)網(wǎng)作為感知互聯(lián)系統(tǒng)向物理世界的延伸,極大地拓展了人類對物理世界的認(rèn)知和控制能力,其廣泛應(yīng)用必將深刻地影響人類的生活方式。同時,這也堪稱是下一個萬億級別的產(chǎn)業(yè),國內(nèi)外許多公司比如微軟、阿里巴巴、華為等均已開始布局物聯(lián)網(wǎng)。然而物聯(lián)網(wǎng)的大范圍部署卻不得不面臨著能源問題,電池等電源設(shè)備將會成為制約物聯(lián)網(wǎng)發(fā)展的一個重要因素。物聯(lián)網(wǎng)感知層,比如傳感器節(jié)點(diǎn)有時需要部署在沒有直接能量供應(yīng)的地方,此時電源設(shè)備成為標(biāo)配,電源設(shè)備會因?yàn)槭褂枚拇M。為了使感知節(jié)點(diǎn)能夠正常工作,必須要考慮更換電池或者給傳感器節(jié)點(diǎn)充電,這將給維護(hù)等帶來巨大的開銷。而周圍環(huán)境中存在著各種各樣的能量,比如太陽能、RF射頻能量(如WiFi)、機(jī)械能等,于是學(xué)者們就提出了從環(huán)境中捕獲這些能量來給傳感器節(jié)點(diǎn)供電[1]。這些不配備電源設(shè)備而直接使用環(huán)境中能量的節(jié)點(diǎn)便是無源節(jié)點(diǎn),由其按照傳統(tǒng)傳感器網(wǎng)絡(luò)可以組成無源傳感器網(wǎng)絡(luò),相比之下將具有更長的生命周期[2]。
目前無源傳感網(wǎng)的研究正處于起步階段,從硬件到軟件還有許多基礎(chǔ)問題均亟待求取攻關(guān)方案?,F(xiàn)如今,本論文署名的實(shí)驗(yàn)室設(shè)計出一款無源節(jié)點(diǎn),能夠捕獲環(huán)境中的太陽能和射頻能量[3]。相比華盛頓州立大學(xué)的Powercast[4],其運(yùn)行功耗更低。并且提供能量測量的底層功能,使用數(shù)字電路而非MPTT等硬件方式來測量捕獲和消耗的能量,測量誤差在2%。要基于該硬件平臺研究諸如網(wǎng)絡(luò)通信協(xié)議、各種分布式調(diào)度算法、覆蓋問題等傳感器網(wǎng)絡(luò)經(jīng)典問題以及無源傳感網(wǎng)面臨的能量模型、間斷計算等的特有問題[5-10],就需要在硬件和這些軟件間尋求統(tǒng)領(lǐng)調(diào)控的信息運(yùn)作模式。作為無源節(jié)點(diǎn)應(yīng)用開發(fā)平臺的一部分,本文實(shí)現(xiàn)了該節(jié)點(diǎn)上的多任務(wù)內(nèi)核,并且支持多任務(wù)管理、調(diào)度以及任務(wù)之間的通信。需要涉及到無源節(jié)點(diǎn)微控制器的體系結(jié)構(gòu)、外設(shè)、編譯工具鏈、嵌入式應(yīng)用二級制接口(EABI)等諸多細(xì)節(jié)。平臺的工作就是向無源節(jié)點(diǎn)研究者提供方便的研究環(huán)境,使其專注于問題本身而非偏重在與研究無關(guān)的細(xì)節(jié)上,解決研究過程中需要遇到的常見問題。
本文的主要貢獻(xiàn)如下:
(1)實(shí)現(xiàn)了無源節(jié)點(diǎn)上的多任務(wù)內(nèi)核,能夠支持多任務(wù)管理和自定義調(diào)度,同時包含任務(wù)間通信以及同步功能。
(2)該內(nèi)核提出了基于棧的進(jìn)程上下文保護(hù)方法,將中斷產(chǎn)生的任務(wù)調(diào)度和用戶主動放棄CPU執(zhí)行而產(chǎn)生的任務(wù)調(diào)度統(tǒng)一起來。
(3)該內(nèi)核與硬件相關(guān)的部分集中在中斷處理函數(shù)、任務(wù)棧初始化和任務(wù)切換上,這些是與體系結(jié)構(gòu)有關(guān),只需少量修改便可以移植到其它微控制器上。
1 物聯(lián)網(wǎng)操作系統(tǒng)研究
現(xiàn)有的比較知名的物聯(lián)網(wǎng)操作系統(tǒng)有TinyOS[11]、ContikiOS[12]。其中,TinyOS是加州大學(xué)伯克利分析提出的基于MicaZ、TelosB等傳統(tǒng)無線傳感網(wǎng)節(jié)點(diǎn)的操作系統(tǒng),是基于組件的,系統(tǒng)內(nèi)核是基于事件驅(qū)動的。執(zhí)行模型由中斷和任務(wù)構(gòu)成,中斷執(zhí)行的優(yōu)先級高于任務(wù),能夠搶占任務(wù)的執(zhí)行。任務(wù)間以先進(jìn)先出的方式調(diào)度,對于每一個任務(wù),TinyOS采用的策略是執(zhí)行直到結(jié)束,即不能自掛起,也不能被其它任務(wù)搶占。所以IO操作需要分階段達(dá)成,先發(fā)起IO請求,系統(tǒng)響應(yīng)后調(diào)用回調(diào)函數(shù)。由于該模型具有較高的抽象層次,其抽象方式和通用的任務(wù)調(diào)度模型存在很大不同,對于復(fù)雜系統(tǒng)就要事無巨細(xì)地詳加設(shè)計,給用戶的編程帶來了不便。TinyOS使用了nesC語言進(jìn)行開發(fā),提供了諸如組件、接口等抽象描述,將任務(wù)同步等信息隱藏在TinyOS發(fā)布的抽象層次之后。雖然nesC和C語言具有一定的相似性,但由于建立的許多高層次抽象給研究人員增加了額外學(xué)習(xí)編程語言的負(fù)擔(dān)。另外經(jīng)過本實(shí)驗(yàn)室先前做過的應(yīng)用實(shí)際測試,TinyOS在TelosB節(jié)點(diǎn)上運(yùn)行簡單的感知任務(wù)功耗相當(dāng)巨大,使用一對1.5 V電池供電的TelosB節(jié)點(diǎn)在正常工作情況下電源僅能維持2~3天。這顯然并不符合無源傳感網(wǎng)節(jié)點(diǎn)對低功耗的要求。Contiki采用基于進(jìn)程的事件驅(qū)動單線程調(diào)度體系,進(jìn)程之間不可以搶占,但可以被中斷搶占。Contiki內(nèi)核維護(hù)了一個進(jìn)程鏈表,進(jìn)程之間擁有優(yōu)先級,根據(jù)優(yōu)先級來決定進(jìn)程在鏈表中的位置。Contiki中所有的事件均由一個叫做事件派發(fā)器的模塊進(jìn)行動態(tài)處理,事件產(chǎn)生之后由事件派發(fā)器檢測事件所攜帶的標(biāo)志信息,再輪詢進(jìn)程隊(duì)列中的進(jìn)程,直至找到與事件相匹配的進(jìn)程,將事件交給進(jìn)程展開處理[13-14]。綜上可知,基于事件驅(qū)動的模型簡化了內(nèi)核的構(gòu)建邏輯,但是增加了復(fù)雜應(yīng)用的設(shè)計。并且2種操作系統(tǒng)主要面向傳統(tǒng)的無線傳感網(wǎng),設(shè)計時并未考慮到能量問題。而新的無源傳感網(wǎng)一切設(shè)計都要以能量為中心。
2 多任務(wù)模型
2.1 基本原理
內(nèi)核對任務(wù)的管理是通過TCB這種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,其中保存了關(guān)于任務(wù)運(yùn)行的基本信息以及用于任務(wù)調(diào)度的信息。內(nèi)核使用數(shù)組存儲TCB,數(shù)組大小即為支持的最大任務(wù)數(shù)。這里,給出的多任務(wù)基本模型的研發(fā)設(shè)計可如圖1所示。為了方便任務(wù)生命周期管理,將TCB分成2個雙向鏈表,其中一個表示使用中的TCB鏈,另外一個表示空閑TCB鏈。
當(dāng)創(chuàng)建任務(wù)時,內(nèi)核首先從空閑TCB鏈表中獲得一個可用的TCB塊,將其加入任務(wù)鏈表中。然后從內(nèi)存管理單元動態(tài)分配一塊固定大小的堆棧,并根據(jù)體系結(jié)構(gòu)、內(nèi)核自定義保護(hù)現(xiàn)場及編譯器函數(shù)調(diào)用約定來初始化堆棧,再將堆棧指針指向棧頂。初始化堆棧在不同的微控制器及對應(yīng)的編譯器上可能會存在不同,這一部分將在實(shí)現(xiàn)的時候具體闡釋解析。接下來就設(shè)置任務(wù)調(diào)度有關(guān)的參數(shù),包括將任務(wù)設(shè)置為就緒態(tài),該任務(wù)就可以參與調(diào)度了。系統(tǒng)有一個空閑任務(wù),就賦予其最低優(yōu)先級。該任務(wù)唯一指派操作就是切換到低功耗狀態(tài),以降低系統(tǒng)能量開銷。
2.2 任務(wù)生命周期管理
一個任務(wù)完整的生命周期包括創(chuàng)建、執(zhí)行和結(jié)束。執(zhí)行過程中任務(wù)處于何種狀態(tài)可以用狀態(tài)機(jī)進(jìn)行抽象。內(nèi)核中定義任務(wù)的狀態(tài)有4種,分別是:運(yùn)行態(tài)、就緒態(tài)、中斷等待狀態(tài)、信號等待狀態(tài)。狀態(tài)的轉(zhuǎn)移變換即如圖2所示。
在任務(wù)創(chuàng)建后,當(dāng)前系統(tǒng)的總?cè)蝿?wù)數(shù)記錄在全局變量中。由于任務(wù)創(chuàng)建函數(shù)以及生命周期管理函數(shù)需要在多任務(wù)環(huán)境中執(zhí)行,而相互之間需要共享一些變量,因此在執(zhí)行過程中需要用到原子語義,這可通過開關(guān)中斷來啟動完成。任務(wù)的唯一標(biāo)識即tid是該任務(wù)占用的TCB數(shù)組的下標(biāo),如此即通過保存一個整數(shù)就可以方便地引用到TCB。相比連續(xù)分配tid而言,減少了一次從tid到TCB映射的查找過程。
任務(wù)進(jìn)入就緒態(tài)后,就能隨時轉(zhuǎn)至可供調(diào)度的生命周期。在參與調(diào)度后,處于任何狀態(tài)的任務(wù)都可以通過內(nèi)核提供的接口來結(jié)束任一任務(wù)。實(shí)際上這一部分并未配置安全性檢查,而是假設(shè)用戶知道自己在做什么。任務(wù)結(jié)束的接口可以被主動調(diào)用,也可以在任務(wù)執(zhí)行返回語句后被默認(rèn)調(diào)用。默認(rèn)調(diào)用的發(fā)生是通過在任務(wù)創(chuàng)建時設(shè)置堆棧來做到的。任務(wù)結(jié)束時,首先需要關(guān)閉中斷阻止任務(wù)調(diào)度,慎防被結(jié)束的任務(wù)處于不一致的狀態(tài)。接著釋放棧對應(yīng)的內(nèi)存塊等資源,并且將該任務(wù)TCB從任務(wù)鏈中刪除,放入空閑任務(wù)鏈中,再根據(jù)釋放的是否為當(dāng)前任務(wù)而最終決定是否調(diào)用調(diào)度函數(shù)。
2.3 任務(wù)調(diào)度
目前任務(wù)調(diào)度采用的方法是時間片輪轉(zhuǎn)調(diào)度,這是為了保證所有的任務(wù)都能夠被執(zhí)行到。任務(wù)之間具有優(yōu)先級,并且優(yōu)先級可以利用內(nèi)核接口動態(tài)調(diào)整。系統(tǒng)每次調(diào)度時,總是選擇執(zhí)行具有最大時間片值的任務(wù),如果該任務(wù)即是當(dāng)前任務(wù),則不切換任務(wù)。任務(wù)調(diào)度分為2個階段完成。第一階段是產(chǎn)生下一個任務(wù),即任務(wù)選舉階段。第二階段是任務(wù)上下文環(huán)境切換,在本文設(shè)計的基于棧的任務(wù)上下文中,任務(wù)切換只需要切換棧指針,并平衡棧結(jié)構(gòu)即可。
任務(wù)切換階段實(shí)現(xiàn)與具體的體系結(jié)構(gòu)具有緊密關(guān)系,將在第三節(jié)中探討敘述。任務(wù)選舉階段的算法可表述如下:
該算法使用了和初期版本Linux內(nèi)核類似的任務(wù)選舉策略。算法中首先遍歷任務(wù)鏈表,找到處于就緒態(tài)任務(wù)最大的時間片以及對應(yīng)的任務(wù)TCB。如果所有就緒態(tài)任務(wù)的時間片數(shù)值都為0,則將所有任務(wù)的時間片都增加一定數(shù)值。這樣會使得處于等待狀態(tài)的任務(wù)時間片不斷累加,當(dāng)其變成就緒態(tài)后,由于具有較大的時間片數(shù)值會在下一輪任務(wù)選舉時被選中,這樣就保證了所有任務(wù)均可正常執(zhí)行,又讓等待過久的任務(wù)優(yōu)先執(zhí)行,而使低優(yōu)先級的任務(wù)不致獲得失效輪空的后果。
按照該算法設(shè)置的時間片數(shù)值不會超過任務(wù)優(yōu)先級的2倍,令an表示第n次設(shè)置的任務(wù)時間片的值,c表示任務(wù)的優(yōu)先級。時間片上取值上限的證明過程如下所示:
通項(xiàng)公式為: an+1=[SX(]an[]2[SX)]+c
即: an+1-2c=[SX(]an-2c[]2[SX)]
可得:an=2c+[SX(]1[]2n[SX)](a0-2c)
[HS1*1] 故而lim[DD(;][]n∞[DD)]an=2c
內(nèi)核任務(wù)調(diào)度采用兩階段處理使得內(nèi)核調(diào)度算法具有拓展性,可以通過變換任務(wù)選舉策略很容易地修改調(diào)度算法。
2.4 信號處理
內(nèi)核可運(yùn)行簡單的信號處理機(jī)制,并不符合POSIX標(biāo)準(zhǔn)。TCB中包含16位變量signal表示該任務(wù)的信號,其中每一位表示一個信號,共支持16種信號。16位的blocked變量表示要屏蔽的信號以及一個以16位變量為參數(shù)的函數(shù)指針,即信號處理函數(shù)。信號處理函數(shù)由任務(wù)自定義,并通過內(nèi)核的安裝信號函數(shù)的接口注冊到TCB中。當(dāng)每一次任務(wù)被調(diào)度到開始執(zhí)行之前,先處理該任務(wù)的信號,即在中斷關(guān)閉的情形下,讓signal和blocked變量的非之間邏輯與,判斷最終的結(jié)果是否為零,如果不為零則從不為零的最高位開始處理信號。實(shí)際上應(yīng)該為每一個信號都建立一個處理函數(shù),而本文在研發(fā)時采用了所有信號都由一個函數(shù)處理的原因是為了減少TCB中存儲過多的數(shù)據(jù),也簡化了信號處理的設(shè)計與實(shí)現(xiàn)。
2.5 信號量
多任務(wù)環(huán)境下全局變量需要鎖來避免臨界區(qū)競態(tài)的發(fā)生。鎖的基本功能的實(shí)現(xiàn)可以通過信號量,信號量是鎖的基礎(chǔ)。每一個信號量結(jié)構(gòu)即如圖3所示。其中包含信號量的名字、一個信號量的唯一標(biāo)識、信號量的等待隊(duì)列、包含等待該信號量的任務(wù)、信號量當(dāng)前值以及一個標(biāo)識該信號量是否被占用的標(biāo)志。
信號量的open操作就是從信號量數(shù)組中找到一個occupied標(biāo)志為0的信號量,將名字寫入,并設(shè)置信號量值,初始化任務(wù)隊(duì)列。信號量的unlink操作就是將occupied標(biāo)志位置0。信號量的PV操作中,P操作就是將信號量的值減1,如果值小于0,則任務(wù)等待。V操作就是將信號量的值加1,如果值小于等于0,說明之前等待隊(duì)列上有任務(wù),則將其喚醒。PV操作的設(shè)計代碼內(nèi)容可見如下。
3 硬件與實(shí)現(xiàn)
3.1 微控制器體系結(jié)構(gòu)
無源節(jié)點(diǎn)IEA使用的是MSP430FR6979微控制器,這是RISC結(jié)構(gòu),內(nèi)存和IO統(tǒng)一編址,并且具有16位數(shù)據(jù)總線和20位地址總線,可尋址1 MB內(nèi)存地址空間。內(nèi)存數(shù)據(jù)采用小端順序,棧向下生長。具有15個20位寄存器和1個16位寄存器。R0~R2是專用寄存器,分別為PC、SP、SR。其中,SR是16位。R3~R15是通用寄存器。同時,還具有7種尋址方式,可詳見表1。不同尋址方式在不同指令集中數(shù)據(jù)位數(shù)不同,可以支持字節(jié)尋址、字尋址以及地址字尋址,分別為8位、16位、20位。
操作數(shù)的大小根據(jù)指令類別及后綴確定,比如MOVX.B表示8位操作數(shù)大小,MOVX.W表示16位操作數(shù)大小,MOVX.A表示20位操作數(shù)大小。默認(rèn)操作數(shù)大小是16位。同時為了減少生成的指令字大小,將一些指令的尋址方式做出限制,可得一類地址字指令,比如MOVA同樣是20位操作數(shù)大小,但是生成的指令只有2字節(jié),而MOVX.A一般需要4~5字節(jié)。更多的指令集詳情可參見芯片手冊。
該微控制器具有8種操作模式,不同操作模式具有不同的功耗,經(jīng)測試LPM3實(shí)際功耗相當(dāng)?shù)停娏髦挥袔孜?。操作模式通過SR寄存器的4個位進(jìn)行控制,內(nèi)核使用的操作模式說明可見
該微控制器具有豐富的片內(nèi)外設(shè),支持多種中斷,中斷之間設(shè)有優(yōu)先級,同樣支持中斷嵌套,但是內(nèi)核中并未對中斷嵌套給出定義。中斷的開關(guān)可以通過外設(shè)獨(dú)立的控制位來設(shè)計決定,同時SR寄存器配備全局中斷開關(guān)控制位GIE。中斷處理的過程可分析如下:
(1)等待當(dāng)前指令執(zhí)行完畢。
(2)PC入棧,SR入棧,棧的布局如圖4所示。
(3)如果最后一條指令執(zhí)行期間有多個中斷源等待服務(wù),選擇優(yōu)先級最高的中斷。
(4)單源中斷的中斷標(biāo)志位自動清除,多源中斷的標(biāo)志位保持不變,以便中斷服務(wù)程序判斷中斷源。
(5)SR寄存器除了SCG0位之外全部清除,因此也結(jié)束低功耗模式進(jìn)入正常操作模式。GIE位也被清除,中斷嵌套被禁止。
(6)中斷向量的內(nèi)容將加載到PC中,PC執(zhí)行中斷服務(wù)程序。
[JP3]中斷直接使用RETI指令即可,返回的過程如下:
(1)SR寄存器的值從棧上彈出,所有之前的設(shè)置包括操作模式、中斷控制都恢復(fù)原樣。
(2)PC的值從棧上彈出,從被中斷處恢復(fù)執(zhí)行。
3.2 基于棧的任務(wù)上下文及任務(wù)切換
為了滿足應(yīng)用主動發(fā)起的調(diào)度和被中斷產(chǎn)生的調(diào)度任務(wù)上下文是一致的,需要將2種情況統(tǒng)一起來。因?yàn)檫M(jìn)入中斷PC和SR寄存器壓棧是硬件決定的,所以依據(jù)硬件機(jī)理安排,同時也將通用寄存器的內(nèi)容壓棧。這樣形成的布局則如圖5所示。由此可知,16個寄存器只有SR寄存器的值不在棧上而是保持于TCB中。
整個系統(tǒng)的節(jié)拍是由定時器按照10 ms來產(chǎn)生的,一個節(jié)拍觸發(fā)一次定時器中斷,將當(dāng)前任務(wù)的時間片值減1,如果當(dāng)前任務(wù)的時間片值為0,則調(diào)度到下一個任務(wù)。在時鐘中斷服務(wù)程序中,研究使用匯編實(shí)現(xiàn)了如圖5所示的當(dāng)前任務(wù)的上下文保存,主要是入棧操作和保存SR寄存器的值到TCB結(jié)構(gòu)體中,接著將待執(zhí)行任務(wù)的棧平衡,即恢復(fù)通用寄存器內(nèi)容,利用RETI模擬中斷返回來切換任務(wù),這樣在5個微控制器時鐘周期便可完成任務(wù)切換。而任務(wù)切換的過程就是SR寄存器的賦值過程。
MSP430應(yīng)用程序二進(jìn)制接口并未定義幀指針,而是規(guī)定R11~R15是調(diào)用函數(shù)需要保存的寄存器,R4~R10是被調(diào)用函數(shù)需要保存的寄存器,而編譯器通常將變量用寄存器保存,當(dāng)局部變量過多時,需要在棧上為局部變量分配空間,而研究時難以預(yù)先知道被調(diào)用函數(shù)實(shí)際使用了多少局部變量,這樣給棧平衡帶來了極大的挑戰(zhàn),甚至無法完成。所以研究中使用匯編語言而不是C語言來實(shí)現(xiàn)核心的系統(tǒng)節(jié)拍中斷函數(shù)。編譯器所提供的功能并不能滿足預(yù)設(shè)的要求。受限于硬件,中斷的入棧與普通函數(shù)調(diào)用的入棧方式存在差別(見圖6),為了讓任務(wù)調(diào)度和中斷的棧形成的任務(wù)上下文統(tǒng)一,就需要將任務(wù)調(diào)度時函數(shù)調(diào)用的棧轉(zhuǎn)換為中斷的棧,并利用中斷返回指令完成任務(wù)切換。
4 實(shí)驗(yàn)結(jié)果與分析
通過在無源節(jié)點(diǎn)上建立3個任務(wù),一個任務(wù)控制紅色LED閃爍,一個任務(wù)控制綠色LED閃爍,另外一個為空閑任務(wù),且只是將MCU置入低功耗LPM3模式。在單純的多任務(wù)調(diào)度時,發(fā)現(xiàn)2個燈幾乎同時閃爍。隨著時間片的增大,2個LED的閃爍區(qū)分越來越明顯,這是因?yàn)楫a(chǎn)生任務(wù)調(diào)度的時間變長。為了測試信號,在任務(wù)1中給任務(wù)2發(fā)送任務(wù)暫停信號,并隔一段時間后發(fā)送恢復(fù)信號,任務(wù)2的信號處理程序調(diào)用內(nèi)核提供的任務(wù)暫停和恢復(fù)接口,實(shí)驗(yàn)結(jié)果顯示任務(wù)2對應(yīng)的綠色LED先閃爍很短時間,然后只有任務(wù)1的綠色LED閃爍,過了一段時間任務(wù)2恢復(fù)執(zhí)行,2個LED同時閃爍,結(jié)果符合預(yù)期。此后,又測試了利用信號量控制2個LED的閃爍順序,結(jié)果也符合預(yù)期。
5 結(jié)束語
本文通過在無源節(jié)點(diǎn)上實(shí)現(xiàn)了多任務(wù)內(nèi)核,提供了無源節(jié)點(diǎn)多任務(wù)應(yīng)用程序開發(fā)的接口,結(jié)果符合預(yù)期,同時本文提出的基于棧的任務(wù)上下文使得任務(wù)切換更加簡單。實(shí)驗(yàn)結(jié)果顯示該內(nèi)核運(yùn)行良好。
該多任務(wù)內(nèi)核屬于無源應(yīng)用開發(fā)平臺的操作系統(tǒng)抽象層課題,該課題來源于哈爾濱工業(yè)大學(xué)和中國科學(xué)技術(shù)大學(xué)聯(lián)合的國家自然科學(xué)基金重點(diǎn)項(xiàng)目《無源傳輸網(wǎng)絡(luò)理論與關(guān)鍵技術(shù)》。
參考文獻(xiàn)
[1] KANSAL A, HSU J, ZAHEDI S, et al. Power management in energy harvesting sensor Networks[J]. ACM Transactions on Embedded Computing Systems (TECS), 2007,6(4):32.
[2] SUDEVALAYAM S, KULKARNI P. Energy harvesting sensor nodes: Survey and implications[J]. IEEE Communications Surveys & Tutorials, 2011, 13(3): 443-461.
[3]ZHANG Yang, GAO Hong, CHENG Siyao,et al. IEA: An intermittent energy aware platform for ultra-low powered energy harvesting WSN[C]// Wireless Algorithms, Systems, and Applications(WASA). Guilin, China:dblp, 2017:185-197.
[4] SAMPLE A P, YEAGER D J, POWLEDGE P S, et al. Design of an RFID-based battery-free programmable sensing platform[J]. IEEE Trans. on Instrumentation and Measurement, 2008,57(11):2608-2615.
[5]SUN Yanjun, GUREWITZ O,JOHNSON D B. RI-MAC: A receiver-initiated asynchronous duty cycle MAC protocol for dynamic traffic loads in wireless sensor networks[C]//Proc. 6th ACM Conference on Embedded Network Sensor Systems. Raleigh, NC, USA: ACM, 2008:1-14.