zoukankan      html  css  js  c++  java
  • 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感兴趣,请邮件xukai19871105@126.com。
  • 相关阅读:
    shell实战
    shell基础
    rpm和yum使用
    用户和用户组的管理
    js Date 时间戳 时区等问题总结
    markdown语法 锚链接实现
    js 通过if变量判断时注意事项
    上传图片过程中,关闭了弹框 如何取消上传
    javascript 导入其他文件的的变量 或函数
    在使用resetField 报错Cannot read property 'indexOf' of undefined
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3150282.html
Copyright © 2011-2022 走看看