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事件

  1. #include "contiki.h"
  2. #include "dev/leds.h"
  3. /*---------------------------------------------------------------------------*/
  4. PROCESS(blink_process, "Blink");
  5. AUTOSTART_PROCESSES(&blink_process);
  6. /*---------------------------------------------------------------------------*/
  7. PROCESS_THREAD(blink_process, ev, data)
  8. {
  9. static struct etimer et;
  10. PROCESS_BEGIN();
  11.  
  12. while(1) {
  13. etimer_set(&et, CLOCK_SECOND); // etimer溢出周期为1s
  14. PROCESS_WAIT_EVENT_UNTIL( ev == PROCESS_EVENT_TIMER);
  15. leds_toggle(1); // 翻转LED1
  16. }
  17.  
  18. PROCESS_END();
  19. }

2.2 方法2——etimer_expired(&et)

  1. #include "contiki.h"
  2. #include "dev/leds.h"
  3. /*---------------------------------------------------------------------------*/
  4. PROCESS(blink_process, "Blink");
  5. AUTOSTART_PROCESSES(&blink_process);
  6. /*---------------------------------------------------------------------------*/
  7. PROCESS_THREAD(blink_process, ev, data)
  8. {
  9. static struct etimer et;
  10. PROCESS_BEGIN();
  11.  
  12. while(1) {
  13. etimer_set(&et, CLOCK_SECOND); // etimer溢出周期为1s
  14. PROCESS_WAIT_EVENT_UNTIL( etimer_expired(&et));
  15. leds_toggle(1); // 翻转LED1
  16. }
  17.  
  18. PROCESS_END();
  19. }

该部分还涉及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. Python基础入门教程

    Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...

  2. 【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试

    一. Fiddler内置命令. 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都成为一个sessio ...

  3. 基于visual Studio2013解决面试题之1401冒泡排序

     题目

  4. VC 无标题栏对话框移动

    操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:实现无框移动 所谓的无标题栏对话框,是基于对话框的工程,对话框属性Border设置为None,对话框如下所示: 为 ...

  5. 在Ubuntu 12.04下编译qtiplot

    不在windows下,再加上不想用盗版,所以需要一个origin的替代品——qtiplot.虽然我非常抵抗用这种不停点来点去的软件,用R的ggplot2画图多好啊,高效.优雅.漂亮,但是终抵不过老板一 ...

  6. git-daemon的快捷搭建

    使用git-daemon进行git服务器搭建 1.安装git-daemon 前提是已经安装git sudo apt-get install git git-core 然后安装git-daemon su ...

  7. iframe - 基本用法

    · 用target的值,指向iframe框架的name值. <body> <form id="form1" runat="server"> ...

  8. Yii --Command 任务处理

    1.配置,执行任务所需要的组件 任务配置文件:/protected/config/console.php  配置方法跟配置main文件差不多 <?php // This is the confi ...

  9. vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏

    vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏,支持每个网页用不同的IP登陆,支持多线程自动点击 适合自动打怪,游戏练级,配合自动识图功能,自动验证码技术,可以实现更多功能. ...

  10. javascript实现图片无缝滚动(scrollLeft的使用方法介绍)

    <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" conten ...