contiki etimer部分

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感兴趣,请邮件[email protected]

 

你可能感兴趣的:(timer)