1.前言

    contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统。国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有那么响亮的中文名称。如果还没有中文名称的话,就干脆叫它“康提基”(来自wifi百科)。
    平台说明
    硬件平台:CC2530    
    软件平台:IAR EW8051

    contiki的时间管理非常有特色,有多种定时器,例如timer,stimer,ctimer,etimer,rtimer。其中etimer诚成为时间定时器,顾名思义etimer定时器溢出时会产生一个 PROCESS_EVENT_TIMER事件。
    etimer的使用方法和ucos或者freertos中相关函数类似,etimer等待溢出的过程中可以交出CPU的使用权,而使得其他任务得以运行,虽然contiki的protothread的机制和抢占式操作系统有所区别,但是达到的效果确是一样的。

2.范例代码

    废话不多,实现一个LED闪烁任务。在这里可以使用两种方法,第一种等待PROCESS_EVENT_TIMER事件。第二种,查看定时器是否溢出。

2.1 方法1——PROCESS_EVENT_TIMER事件

#include "contiki.h"
#include "dev/leds.h"
/*---------------------------------------------------------------------------*/
PROCESS(blink_process, "Blink");
AUTOSTART_PROCESSES(&blink_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(blink_process, ev, data)
{
static struct etimer et;
PROCESS_BEGIN(); while(1) {
etimer_set(&et, CLOCK_SECOND); // etimer溢出周期为1s
PROCESS_WAIT_EVENT_UNTIL( ev == PROCESS_EVENT_TIMER);
leds_toggle(1); // 翻转LED1
} PROCESS_END();
}

2.2 方法2——etimer_expired(&et)

#include "contiki.h"
#include "dev/leds.h"
/*---------------------------------------------------------------------------*/
PROCESS(blink_process, "Blink");
AUTOSTART_PROCESSES(&blink_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(blink_process, ev, data)
{
static struct etimer et;
PROCESS_BEGIN(); while(1) {
etimer_set(&et, CLOCK_SECOND); // etimer溢出周期为1s
PROCESS_WAIT_EVENT_UNTIL( etimer_expired(&et));
leds_toggle(1); // 翻转LED1
} PROCESS_END();
}

该部分还涉及contiki的基本机制和LED实现部分。这里先简单说说:
1)process部分
    PROCESS_THREAD(blink_process, ev, data)
    blink_process:任务,可以理解为一个函数,该函数就是任务本生

    ev:                事件,该事件可以是系统事件,例如PROCESS_EVENT_TIMER ,也可以是用户定义事件。
    data:              附加数据,data的数据类型为void*无类型指针,通过ev和data就可以实现ucos消息邮箱的功能。
    process部分内容后面的博客会和大家慢慢分享。

2)led实现
    请查看 contiki LED驱动部分


3.总结

    如果你对contiki感兴趣,请邮件xukai19871105@126.com。

contiki etimer部分的更多相关文章

  1. Contiki Etimer 模块

    一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...

  2. [置顶] STM32移植contiki进阶之三(中):timer 中文版

    鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...

  3. 简单的玩玩etimer <contiki学习笔记之九 补充>

    这幅图片是对前面  <<contiki学习笔记之九>>  的一个补充说明. 简单的玩玩etimer <contiki学习笔记之九> 或许,自己正在掀开contiki ...

  4. 简单的玩玩etimer <contiki学习笔记之九>

    好吧,我承认etimer有点小复杂,主要是它似乎和contiki的process搅在一起,到处都在call_process.那就先搜搜contiki下的etimer的example看看,然后再试着写一 ...

  5. contiki-定时器etimer

    Contiki内核是基于事件驱动和Protothreads机制,事件既可以是外部事件(比如按键,数据到达),也可以是内部事件(如时钟中断).定时器的重要性不言而喻,Contiki提供了5种定时器模型, ...

  6. contiki在keil下的stm32平台移植

    参考博客: http://www.aiuxian.com/article/p-705047.html http://blog.csdn.net/u013232419/article/details/4 ...

  7. Contiki 2.7 Makefile 文件(四)

    3.第三部分 这里我们假设TARGET为native (1) OBJECTDIR = obj_$(TARGET) LOWERCASE = -abcdefghijklmnopqrstuvwxyz UPP ...

  8. Contiki源码结构

    Contiki源码结构 apps目录下,用于存放Application,也就是我们的应用程序放在这个目录下.如webserver,webrowser等,如下图所示. core目录是contiki操作系 ...

  9. Contiki clock模块

    一.functions for handling system time clock_time_t clock_time(void);//return the current system time ...

随机推荐

  1. Eclipse中使用版本控制----Git

    之前在做软件开发的过程中使用的版本控制软件大多是cvs,svn等等,这些都属于cvcs,及中央版本控制系统,其特点是存在一个中央库,开发者首先从中央库中下载代码,编辑,然后提交.很明显的一个特点就是使 ...

  2. js操作styleSheets

    document.styleSheets这个接口可以获取网页上引入的link样式表和style样式表.比如 最后的输出结果如下. 换下代码看看我们具体的styleSheets具体输出什么 这些都是次要 ...

  3. windows 2003 域控制器(AD)的常规命令行操作以及修复

    查询服务器的角色 Netdom query fsmo 强制升级操作主机角色(如果两台DC都无损,可以直接用图形模式传送,这里指的是一台DC出问题,另一台强制升级占用角色的情况) Ntdsutil Ro ...

  4. Winfrom 文本框回车进入下一个个单元格(TextBox)

    1.重写方法 OnShown protected override void OnShown(EventArgs e) { base.OnShown(e); foreach (Control ct i ...

  5. oracle维护表空间和数据文件

    1:重要参考 wiki 2: oracle doc 表空间参考 3:来自dba-oracle的参考 26,27,28,29 一:oracle 表空间概念 表空间是联系数据库的物理磁盘(数据文件)和逻辑 ...

  6. Linux下使用Mysql

    一.连接MySQL数据库 一个最简单的程序示例: #include <stdio.h> #include "mysql.h" int main() { MYSQL my ...

  7. Effective C++_笔记_条款01_视C++为一个语言联邦

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) C++的各种能力和特性使它成为一个无可匹敌的工具,但也可能引发某 ...

  8. JS - 跳转页面

    <!-- 第一种: --> <script type="text/javascript"> window.location.href = "log ...

  9. RobotFramework 数据分离

    RobotFramework 数据分离分为三种 1. Run 添加参数 2. 外部的Python文件 3. 读取Excel Run 添加参数 (适用于jenkins) 使用-v 参数名:参数值 使用外 ...

  10. Yarn的ApplicationMaster管理

    首先client向ResourceManager提交程序(包括ApplicationMaster程序,ApplicationMaster启动命令,用户程序)后,ResourceManager向资源调度 ...