<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Contiki調用protothread程序設計

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

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

Contiki調用protothread程序設計

Contiki進程的阻塞是建立在“函數返回”的基礎上的,如上圖所示,當進程調用PROCESS_YIELD()本質就是return,它向ContikiOS讓出系統控制權。

當進程需要處理更復雜的邏輯時,如果把所有的阻塞語句“裹挾”在進程主體函數時,就會帶來如下問題:主體函數會很冗長,并且很復雜。這違背軟件開發的精髓----降低程序的復雜度。

Contiki調用protothread程序設計


以uc/os-ii為代表的RTOS對于任務阻塞(一般使用等待:信號量、郵箱、消息隊列等)是很輕松的,這種基于“上下文切換”(Context Switch)的系統,可以在任務調用的任意函數語句中“掛起自己”,如上圖所示。

Contiki調用protothread程序設計

其實Contiki進程可以調用protothread實現“函數級阻塞”,如上圖所示:

①當protothread等待事件時,它先向process調用PT_YIELD()“掛起函數”;process收到protothread的PT_YIELDED返回值時,執行PROCESS_YIELD()“掛起進程”,向ContikiOS讓出系統控制權。

②當外部事件(一般為中斷)向ContikiOS發消息時,ContikiOS先調度對應的process,process則繼續調用protothread,protothread再處理該事件。

③當protothread處理完所有邏輯后,它向process返回PT_ENDED,此時process知道該protothread已經完成工作。

通過這種“函數級阻塞”技術,可以將邏輯復雜的進程分解成多個protothread,采用分而冶之的辦法,讓程序設計和維護代價大大降低。

小結:Contiki系統調度和阻塞實質是“函數返回”,因此進程設計有3條原則:

① 每個進程響應一個硬件的poll消息;

② 多個硬件之間的時序交給ISR用狀態機完成;

③ 進程主體函數盡可能簡單,如果復雜將拆分成多個protothread。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Contiki
    +關注

    關注

    3

    文章

    11

    瀏覽量

    7156
  • protothread
    +關注

    關注

    1

    文章

    3

    瀏覽量

    2006
收藏 人收藏

    評論

    相關推薦

    關于contiki移植

    我想做個自組網的實驗,用在無線抄表上。聽說contiki上可以支持自組網協議,我想問下如果我把contiki移植到TI或STM32平臺后,可以實現自組網嗎?因為我看到contiki采用的是多跳mesh協議,應該是支持自組網的,但
    發表于 06-15 17:56

    基于AVR單片機的操作系統contiki(一個開源操作系統)

    項目中。Contiki操作系統是基于事件驅動(Event-driven)內核的操作系統,在此內核上,應用程序可以在運行時動態加載,非常靈活。在事件驅動內核基礎上,Contiki實現了一種輕量級的名為
    發表于 03-17 13:02

    請教關于CC2538DK+contiki下載程序問題

    : *** [cc2538-demo.upload] Error 1rm cc2538-demo.co obj_cc2538dk/startup-gcc.o燒寫程序按照https://github.com/contiki
    發表于 08-10 06:01

    如何使用Contiki開發程序

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

    Contiki移植

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

    PID程序設計實驗

    實驗  PID程序設計實驗 一 、 實驗目的1、 熟悉PLC的功能指令。2、 熟悉對PID功能的調用方法。3、 熟悉對模擬
    發表于 05-17 10:53 ?1088次閱讀

    C程序設計(王麗娟)

    C程序設計PPT教程 詳細介紹C程序設計,有需要的朋友下來看看
    發表于 12-23 11:01 ?0次下載

    Contiki學習筆記

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

    《Visual C# 2008程序設計經典案例設計與實現》---

    《Visual C# 2008程序設計經典案例設計與實現》---調用Excel軟件打印數據庫中的數據
    發表于 02-07 12:27 ?1次下載

    《Visual C# 2008程序設計經典案例設計與實現》---

    《Visual C# 2008程序設計經典案例設計與實現》---調用Word軟件打印數據庫中的數據
    發表于 02-07 12:28 ?0次下載

    《Visual C# 2008程序設計經典案例設計與實現》---

    《Visual C# 2008程序設計經典案例設計與實現》---動態調用可執行EXE文件
    發表于 02-07 12:32 ?0次下載

    C語言程序設計實用教程之函數詳細介紹和應用

    本文檔的主要內容詳細介紹的是C語言程序設計實用教程之函數詳細介紹和應用內容包括了:1 模塊化程序設計與函數2 函數的定義與調用3 函數的嵌套調用和遞歸
    發表于 10-31 18:04 ?2次下載
    C語言<b class='flag-5'>程序設計</b>實用教程之函數詳細介紹和應用

    Visual FoxPro程序設計教程之結構化程序設計的詳細資料說明

    本文檔詳細介紹的是Visual FoxPro程序設計教程之結構化程序設計的詳細資料說明主要內容包括了:1 程序文件,2 程序控制結構,3 過程與過程
    發表于 03-04 16:20 ?8次下載
    Visual FoxPro<b class='flag-5'>程序設計</b>教程之結構化<b class='flag-5'>程序設計</b>的詳細資料說明

    Contiki開發1:Contiki與8位MCU

    介紹Contiki系統的功與過,引入8位MCU在物聯網時代的重生。
    發表于 12-06 10:21 ?7次下載
    <b class='flag-5'>Contiki</b>開發1:<b class='flag-5'>Contiki</b>與8位MCU

    Contiki在單片機上的編程框架

    導讀:本文講解了Contiki在單片機上的編程框架和一般的開發流程,并給出范例程序。并較為淺顯解釋了Contiki的工作機制。如何使用Contiki開發
    發表于 12-07 19:36 ?12次下載
    <b class='flag-5'>Contiki</b>在單片機上的編程框架
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>