Contiki是一個開源的、高度可移植的多任務(wù)操作系統(tǒng),適用于聯(lián)網(wǎng)嵌入式系統(tǒng)和無線傳感器網(wǎng)絡(luò),Contiki適用于存儲器資源十分受限的嵌入式單片機(jī)系統(tǒng),典型的配置下Contiki只占用約2Kbytes的RAM以及40Kbytes的Flash存儲器。Contiki中還包括一個可選的GUI子系統(tǒng),可以提供對本地串口終端、基于VNC的網(wǎng)絡(luò)化虛擬顯示或者Telnet的圖形化支持。
Contiki進(jìn)程的阻塞是建立在“函數(shù)返回”的基礎(chǔ)上的,如上圖所示,當(dāng)進(jìn)程調(diào)用PROCESS_YIELD()本質(zhì)就是return,它向ContikiOS讓出系統(tǒng)控制權(quán)。
當(dāng)進(jìn)程需要處理更復(fù)雜的邏輯時,如果把所有的阻塞語句“裹挾”在進(jìn)程主體函數(shù)時,就會帶來如下問題:主體函數(shù)會很冗長,并且很復(fù)雜。這違背軟件開發(fā)的精髓----降低程序的復(fù)雜度。
以uc/os-ii為代表的RTOS對于任務(wù)阻塞(一般使用等待:信號量、郵箱、消息隊(duì)列等)是很輕松的,這種基于“上下文切換”(Context Switch)的系統(tǒng),可以在任務(wù)調(diào)用的任意函數(shù)語句中“掛起自己”,如上圖所示。
其實(shí)Contiki進(jìn)程可以調(diào)用protothread實(shí)現(xiàn)“函數(shù)級阻塞”,如上圖所示:
①當(dāng)protothread等待事件時,它先向process調(diào)用PT_YIELD()“掛起函數(shù)”;process收到protothread的PT_YIELDED返回值時,執(zhí)行PROCESS_YIELD()“掛起進(jìn)程”,向ContikiOS讓出系統(tǒng)控制權(quán)。
②當(dāng)外部事件(一般為中斷)向ContikiOS發(fā)消息時,ContikiOS先調(diào)度對應(yīng)的process,process則繼續(xù)調(diào)用protothread,protothread再處理該事件。
③當(dāng)protothread處理完所有邏輯后,它向process返回PT_ENDED,此時process知道該protothread已經(jīng)完成工作。
通過這種“函數(shù)級阻塞”技術(shù),可以將邏輯復(fù)雜的進(jìn)程分解成多個protothread,采用分而冶之的辦法,讓程序設(shè)計和維護(hù)代價大大降低。
小結(jié):Contiki系統(tǒng)調(diào)度和阻塞實(shí)質(zhì)是“函數(shù)返回”,因此進(jìn)程設(shè)計有3條原則:
① 每個進(jìn)程響應(yīng)一個硬件的poll消息;
② 多個硬件之間的時序交給ISR用狀態(tài)機(jī)完成;
③ 進(jìn)程主體函數(shù)盡可能簡單,如果復(fù)雜將拆分成多個protothread。
-
Contiki
+關(guān)注
關(guān)注
3文章
11瀏覽量
7192 -
protothread
+關(guān)注
關(guān)注
1文章
3瀏覽量
2047
發(fā)布評論請先 登錄
相關(guān)推薦
關(guān)于contiki移植
基于AVR單片機(jī)的操作系統(tǒng)contiki(一個開源操作系統(tǒng))
如何使用Contiki開發(fā)程序
Contiki移植
PID程序設(shè)計實(shí)驗(yàn)
Contiki學(xué)習(xí)筆記
《Visual C# 2008程序設(shè)計經(jīng)典案例設(shè)計與實(shí)現(xiàn)》---
《Visual C# 2008程序設(shè)計經(jīng)典案例設(shè)計與實(shí)現(xiàn)》---
《Visual C# 2008程序設(shè)計經(jīng)典案例設(shè)計與實(shí)現(xiàn)》---
python調(diào)用matlab程序設(shè)計
C語言程序設(shè)計實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用
![C語言<b class='flag-5'>程序設(shè)計</b>實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用](https://file.elecfans.com/web1/M00/6A/27/pIYBAFvZfqiAd2NRAAAmZ8ZPZzs863.png)
Visual FoxPro程序設(shè)計教程之結(jié)構(gòu)化程序設(shè)計的詳細(xì)資料說明
![Visual FoxPro<b class='flag-5'>程序設(shè)計</b>教程之結(jié)構(gòu)化<b class='flag-5'>程序設(shè)計</b>的詳細(xì)資料說明](https://file.elecfans.com/web1/M00/86/30/o4YBAFx84j2AaVAoAAEDzAfmFOc590.png)
JAVA程序設(shè)計教程之JSP程序設(shè)計實(shí)驗(yàn)
![JAVA<b class='flag-5'>程序設(shè)計</b>教程之JSP<b class='flag-5'>程序設(shè)計</b>實(shí)驗(yàn)](https://file.elecfans.com/web1/M00/AC/6D/pIYBAF3BK6iAEOqMAACKCTUvl0k988.png)
Contiki開發(fā)1:Contiki與8位MCU
![<b class='flag-5'>Contiki</b>開發(fā)1:<b class='flag-5'>Contiki</b>與8位MCU](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Contiki在單片機(jī)上的編程框架
![<b class='flag-5'>Contiki</b>在單片機(jī)上的編程框架](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論