0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Contiki調(diào)用protothread程序設(shè)計(jì)

西西 ? 2018-02-23 09:29 ? 次閱讀

Contiki是一個(gè)開源的、高度可移植的多任務(wù)操作系統(tǒng),適用于聯(lián)網(wǎng)嵌入式系統(tǒng)和無(wú)線傳感器網(wǎng)絡(luò),Contiki適用于存儲(chǔ)器資源十分受限的嵌入式單片機(jī)系統(tǒng),典型的配置下Contiki只占用約2Kbytes的RAM以及40Kbytes的Flash存儲(chǔ)器。Contiki中還包括一個(gè)可選的GUI子系統(tǒng),可以提供對(duì)本地串口終端、基于VNC的網(wǎng)絡(luò)化虛擬顯示或者Telnet的圖形化支持。

Contiki調(diào)用protothread程序設(shè)計(jì)

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ù)雜的邏輯時(shí),如果把所有的阻塞語(yǔ)句“裹挾”在進(jìn)程主體函數(shù)時(shí),就會(huì)帶來(lái)如下問題:主體函數(shù)會(huì)很冗長(zhǎng),并且很復(fù)雜。這違背軟件開發(fā)的精髓----降低程序的復(fù)雜度。

Contiki調(diào)用protothread程序設(shè)計(jì)


以u(píng)c/os-ii為代表的RTOS對(duì)于任務(wù)阻塞(一般使用等待:信號(hào)量、郵箱、消息隊(duì)列等)是很輕松的,這種基于“上下文切換”(Context Switch)的系統(tǒng),可以在任務(wù)調(diào)用的任意函數(shù)語(yǔ)句中“掛起自己”,如上圖所示。

Contiki調(diào)用protothread程序設(shè)計(jì)

其實(shí)Contiki進(jìn)程可以調(diào)用protothread實(shí)現(xiàn)“函數(shù)級(jí)阻塞”,如上圖所示:

①當(dāng)protothread等待事件時(shí),它先向process調(diào)用PT_YIELD()“掛起函數(shù)”;process收到protothread的PT_YIELDED返回值時(shí),執(zhí)行PROCESS_YIELD()“掛起進(jìn)程”,向ContikiOS讓出系統(tǒng)控制權(quán)。

②當(dāng)外部事件(一般為中斷)向ContikiOS發(fā)消息時(shí),ContikiOS先調(diào)度對(duì)應(yīng)的process,process則繼續(xù)調(diào)用protothread,protothread再處理該事件。

③當(dāng)protothread處理完所有邏輯后,它向process返回PT_ENDED,此時(shí)process知道該protothread已經(jīng)完成工作。

通過這種“函數(shù)級(jí)阻塞”技術(shù),可以將邏輯復(fù)雜的進(jìn)程分解成多個(gè)protothread,采用分而冶之的辦法,讓程序設(shè)計(jì)和維護(hù)代價(jià)大大降低。

小結(jié):Contiki系統(tǒng)調(diào)度和阻塞實(shí)質(zhì)是“函數(shù)返回”,因此進(jìn)程設(shè)計(jì)有3條原則:

① 每個(gè)進(jìn)程響應(yīng)一個(gè)硬件的poll消息;

② 多個(gè)硬件之間的時(shí)序交給ISR用狀態(tài)機(jī)完成;

③ 進(jìn)程主體函數(shù)盡可能簡(jiǎn)單,如果復(fù)雜將拆分成多個(gè)protothread。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Contiki
    +關(guān)注

    關(guān)注

    3

    文章

    11

    瀏覽量

    7185
  • protothread
    +關(guān)注

    關(guān)注

    1

    文章

    3

    瀏覽量

    2032
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于contiki移植

    我想做個(gè)自組網(wǎng)的實(shí)驗(yàn),用在無(wú)線抄表上。聽說contiki上可以支持自組網(wǎng)協(xié)議,我想問下如果我把contiki移植到TI或STM32平臺(tái)后,可以實(shí)現(xiàn)自組網(wǎng)嗎?因?yàn)槲铱吹?b class='flag-5'>contiki采用的是多跳mesh協(xié)議,應(yīng)該是支持自組網(wǎng)的,但
    發(fā)表于 06-15 17:56

    基于AVR單片機(jī)的操作系統(tǒng)contiki(一個(gè)開源操作系統(tǒng))

    項(xiàng)目中。Contiki操作系統(tǒng)是基于事件驅(qū)動(dòng)(Event-driven)內(nèi)核的操作系統(tǒng),在此內(nèi)核上,應(yīng)用程序可以在運(yùn)行時(shí)動(dòng)態(tài)加載,非常靈活。在事件驅(qū)動(dòng)內(nèi)核基礎(chǔ)上,Contiki實(shí)現(xiàn)了一種輕量級(jí)的名為
    發(fā)表于 03-17 13:02

    如何使用Contiki開發(fā)程序

    導(dǎo)讀:本文講解了Contiki在單片機(jī)上的編程框架和一般的開發(fā)流程,并給出范例程序。并較為淺顯解釋了Contiki的工作機(jī)制。如何使用Contiki開發(fā)
    發(fā)表于 02-11 06:00

    Contiki移植

    LaunchPad? Development Kit (MSP?EXP430G2ET)contiki-os Github本文參考自二、Contiki移植 —— 一根線新建工程移植過程新建contiki文件夾添加core、cpu
    發(fā)表于 02-15 06:32

    PID程序設(shè)計(jì)實(shí)驗(yàn)

    實(shí)驗(yàn)  PID程序設(shè)計(jì)實(shí)驗(yàn) 一 、 實(shí)驗(yàn)?zāi)康?、 熟悉PLC的功能指令。2、 熟悉對(duì)PID功能的調(diào)用方法。3、 熟悉對(duì)模擬
    發(fā)表于 05-17 10:53 ?1150次閱讀

    Contiki學(xué)習(xí)筆記

    Contiki 是一個(gè)適用于有內(nèi)存的嵌入式系統(tǒng)的開源的、高可移植的、支持網(wǎng)絡(luò)的多任務(wù)操作系統(tǒng)。包括一個(gè)多任務(wù)核心、TCP/IP 堆棧、程序集以及低能耗的無(wú)線通訊堆棧。Contiki 采用 C 語(yǔ)言開發(fā)的非常小型的嵌入式操作系統(tǒng),
    發(fā)表于 01-06 11:30 ?32次下載

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---調(diào)用Excel軟件打印數(shù)據(jù)庫(kù)中的數(shù)據(jù)
    發(fā)表于 02-07 12:27 ?1次下載

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---調(diào)用Word軟件打印數(shù)據(jù)庫(kù)中的數(shù)據(jù)
    發(fā)表于 02-07 12:28 ?0次下載

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---動(dòng)態(tài)調(diào)用可執(zhí)行EXE文件
    發(fā)表于 02-07 12:32 ?0次下載

    python調(diào)用matlab程序設(shè)計(jì)

    Python,是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL協(xié)議。MATLAB用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù)計(jì)算語(yǔ)言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。
    發(fā)表于 12-04 16:45 ?1657次閱讀

    C語(yǔ)言程序設(shè)計(jì)實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言程序設(shè)計(jì)實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用內(nèi)容包括了:1 模塊化程序設(shè)計(jì)與函數(shù)2 函數(shù)的定義與調(diào)用3 函數(shù)的嵌套調(diào)用和遞歸
    發(fā)表于 10-31 18:04 ?2次下載
    C語(yǔ)言<b class='flag-5'>程序設(shè)計(jì)</b>實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用

    Visual FoxPro程序設(shè)計(jì)教程之結(jié)構(gòu)化程序設(shè)計(jì)的詳細(xì)資料說明

    本文檔詳細(xì)介紹的是Visual FoxPro程序設(shè)計(jì)教程之結(jié)構(gòu)化程序設(shè)計(jì)的詳細(xì)資料說明主要內(nèi)容包括了:1 程序文件,2 程序控制結(jié)構(gòu),3 過程與過程
    發(fā)表于 03-04 16:20 ?8次下載
    Visual FoxPro<b class='flag-5'>程序設(shè)計(jì)</b>教程之結(jié)構(gòu)化<b class='flag-5'>程序設(shè)計(jì)</b>的詳細(xì)資料說明

    JAVA程序設(shè)計(jì)教程之JSP程序設(shè)計(jì)實(shí)驗(yàn)

    本文檔的主要內(nèi)容詳細(xì)介紹的是JAVA程序設(shè)計(jì)教程之JSP程序設(shè)計(jì)實(shí)驗(yàn)。
    發(fā)表于 11-05 15:34 ?6次下載
    JAVA<b class='flag-5'>程序設(shè)計(jì)</b>教程之JSP<b class='flag-5'>程序設(shè)計(jì)</b>實(shí)驗(yàn)

    Contiki開發(fā)1:Contiki與8位MCU

    介紹Contiki系統(tǒng)的功與過,引入8位MCU在物聯(lián)網(wǎng)時(shí)代的重生。
    發(fā)表于 12-06 10:21 ?7次下載
    <b class='flag-5'>Contiki</b>開發(fā)1:<b class='flag-5'>Contiki</b>與8位MCU

    Contiki在單片機(jī)上的編程框架

    導(dǎo)讀:本文講解了Contiki在單片機(jī)上的編程框架和一般的開發(fā)流程,并給出范例程序。并較為淺顯解釋了Contiki的工作機(jī)制。如何使用Contiki開發(fā)
    發(fā)表于 12-07 19:36 ?12次下載
    <b class='flag-5'>Contiki</b>在單片機(jī)上的編程框架