• 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。
  • 相关阅读:
    前端实现文件下载
    es6 Promise简单介绍
    es6开发环境搭建,babel 将es6转化成es5
    如何让写得html页面自动刷新
    es6箭头函数
    js对象跟数组多层嵌套,检测没有此数据就添加有则不添加以及超过限制条件删除操作
    小程序分享进入H5动态网页
    数据结构与算法--基本概念
    Unity中的常用输入
    Unity中的物体旋转
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3150282.html
Copyright © 2020-2023  润新知