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

    浏览量

    7177
  • protothread
    +关注

    关注

    1

    文章

    3

    浏览量

    2029
收藏 人收藏

    评论

    相关推荐

    关于contiki移植

    我想做个自组网的实验,用在无线抄表上。听说contiki上可以支持自组网协议,我想问下如果我把contiki移植到TI或STM32平台后,可以实现自组网吗?因为我看到contiki采用的是多跳mesh协议,应该是支持自组网的,但
    发表于 06-15 17:56

    基于AVR单片机的操作系统contiki(一个开源操作系统)

    项目中。Contiki操作系统是基于事件驱动(Event-driven)内核的操作系统,在此内核上,应用程序可以在运行时动态加载,非常灵活。在事件驱动内核基础上,Contiki实现了一种轻量级的名为
    发表于 03-17 13:02

    如何使用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 1147次阅读

    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次下载

    python调用matlab程序设计

    Python,是一种面向对象的解释型计算机程序设计语言Python是纯粹的自由软件,源代码和解释器CPython遵循GPL协议。MATLAB用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
    发表于 12-04 16:45 1656次阅读

    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>的详细资料说明

    JAVA程序设计教程之JSP程序设计实验

    本文档的主要内容详细介绍的是JAVA程序设计教程之JSP程序设计实验。
    发表于 11-05 15:34 6次下载
    JAVA<b class='flag-5'>程序设计</b>教程之JSP<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>在单片机上的编程框架