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. 基于visual Studio2013解决面试题之0901奇偶站队

     题目

  2. 重操JS旧业第七弹:面向对象与对象创建

    JS是一种完全面向对象的程序设计语言,在面向对象处理方面,具有多种多样的实现方式,加之对象成员的动态性使得这门语言更加灵活:而js对象成员动态性也是创建和扩展对象的有力方式. 1 对象成员动态性 属性 ...

  3. IIS中asp网站播放flv视频技术

    播放flv视频文件需要使用flvplayer.swf程序(32K). HTML嵌入代码: <div id="FlashFile"> <object type=&q ...

  4. Python中的继承

    继承: 面向对象程序语言的一个重要特点是继承.继承提供了在已存在类的基础上创建新类的方法.继承的子类 拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法.继承是类的强有力的特点.一些 ...

  5. Mac 终端提示You have not agreed to the Xcode license agreements

    在mac 终端运行命令的时候会被提示没有同意xcode 证书 ,这个时候需要在Terminal中同意license 打开终端输入xcodebuild -license,会看到一大堆的license说明 ...

  6. Java学习JVM搞搞Jconsole呗

    无意间翻到这条博客:http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html 这里还有个讲解的:http://www.kafka01 ...

  7. HDU1584:蜘蛛牌(DFS)

    Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...

  8. 5款帮助简化的HTML5 Audio开发的Javascript类库

    HTML5的audio标签提供了我们方便控制声音的功能,可是使用原生的HTML5来开发声音或者音乐相关的项目仍旧很的麻烦.在今天这篇文章中,我们将介绍5款帮助你简化开发的javascript audi ...

  9. kgdb接收一个数据包详解

    0    kdb>kgdb  // 可进入kgdb 模式    if (dbg_kdb_mode) {             error = kdb_stub(ks);     } else ...

  10. UML基本架构建模--类概述

     Classes 类 Classes are the most important building block of any object-oriented system. A class is ...