文件目录:

contiki\core\sys\

1 etimer

1.1 说明

事件定时器,发生超时的时候会得到一个事件,etimer include了timer,timer使用的是clock的系统滴答时钟。
定时器结构体:

struct etimer {struct timer timer;struct etimer *next;struct process *p;
};

定时器会被保存到一个链表中,然后被etimer_process 系统进程所管理,当该进程被执行的时候,它会遍历一次链表,发现有超时的定时器,会向对应的进程发送PROCESS_EVENT_TIMER事件,并且移除链表,之后又重新遍历链表,知道未发现超时定时器为止。

1.2 接口函数

void etimer_set(struct etimer *et, clock_time_t interval);
void etimer_reset(struct etimer *et);
etimer_reset_with_new_interval(struct etimer *et, clock_time_t interval);
void etimer_restart(struct etimer *et);
void etimer_adjust(struct etimer *et, int td);
clock_time_t etimer_expiration_time(struct etimer *et);
clock_time_t etimer_start_time(struct etimer *et);
int etimer_expired(struct etimer *et);
void etimer_stop(struct etimer *et);

1.3 应用

首先定义一个结构体

 static struct etimer timer;

之后初始化话这个结构体,执行完该函数则定时器已经启动。宏CLOCK_SECOND乘上滴答定时器计时单位时间(7.8ms)应该等于1s,于是这个宏被设定为了 128。下列函数将定时4s

etimer_set(&timer,CLOCK_SECOND*4);

当发生超时的时候,进程会受到一个定时器超时事件

            if(ev == PROCESS_EVENT_TIMER){       etimer_reset(&timer);}

但仅仅这样是无法判断是哪一个定时器超时的,于是可以使一个函数来补助判断

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&eimer));

或者写为

if(ev == PROCESS_EVENT_TIMER && etimer_expired(&timer))

复位定时器既可以调用复位的函数,也可以重新配置一遍。

2 ctimer

2.1 说明

回调定时器,发生超时的时候会回调一个函数。ctimer include了etimer,也使用的是系统滴答时钟。使用方式大致和etimer是一样的,区别就在于配置的时候可以填入一个函数名称,在时钟超时的时候会自动执行被设定的函数。

2.2 接口函数

void ctimer_reset(struct ctimer *c);
void ctimer_restart(struct ctimer *c);
void ctimer_set(struct ctimer *c, clock_time_t t,void (*f)(void *), void *ptr);
void ctimer_set_with_process(struct ctimer *c, clock_time_t t,void (*f)(void *), void *ptr, struct process *p);
void ctimer_stop(struct ctimer *c);
int ctimer_expired(struct ctimer *c);
void ctimer_init(void);

2.3 应用

首先定义一个结构体

static struct ctimer timer;

然后进行配置,第二个参数是时间,第三个参数是函数名,第四个是传递的值。也就当执行完配置函数后时间超过1s变会自动执行callback函数,该函数的参数就是配置时的第4个参数。相较于etimer,不需要在进程中专门进行判断,简化了流程。

static void callback(void *ptr)
{ctimer_reset(&timer);
}ctimer_set(&timer, CLOCK_SECOND, callback, NULL);

关于contiki中的Ctimer和Etimer相关推荐

  1. Contiki中MAC层与RDC层

    原英文文章:https://github.com/contiki-os/contiki/wiki/Change-mac-or-radio-duty-cycling-protocols 在Contiki ...

  2. contiki学习笔记(五)ctimer和etimer

    四.callback timer 回调计时器(ctimer) Callback timer(回调计时器) Contiki system ctimer模块提供了一个计时器机制(机制)调用指定的C函数ct ...

  3. 从contiki中下载程序到TelosB节点

    编译下载步骤 step 1:  编写好程序文件,到程序文件所在目录,以hello-world文件为例 cd + 文件目录 step 2: 编译程序文件 make TARGET=sky hello-wo ...

  4. contiki学习笔记 etimer部分

    1.前言     contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统.国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有 ...

  5. Contiki Etimer 模块

    一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...

  6. contiki学习笔记(四)、contiki系统UDP通信原理(单播、多播、RPL介绍)

    (1).simple_udp_register()函数 contiki\core\net\ip /*该函数简化contiki系统中基于UDP协议的Socknet接口操作,函数体中包含了udp_new( ...

  7. Contiki的内核分析-定时器模型

    导读 本文通过分析Contiki的源码,梳理Contiki的定时器模型中一共5个定时器的工作机制和原理. 引入 从本文开始,我们开始探究Contiki的5个定时器模型,遵循从易到难的原则,我们先开始两 ...

  8. Contiki教程——进程

    概述 Contiki中的代码可以运行在下列两种执行上下文之一:合作式或者抢占式.合作式代码按顺序运行,抢占式代码可以暂停正在运行的合作式代码.Contiki中的进程运行在合作式上下文中,而中断和实时定 ...

  9. contiki STM32移植

    1.contiki简介 [2016年6月更新 强烈建议各位使用arm-none-eabi-gcc工具链,推荐在Instant Contiki中开发Contiki应用,不推荐使用IAR] "C ...

最新文章

  1. 23张图,带你入门推荐系统
  2. 七大排序的个人总结(一)
  3. origin安装包_作图技巧|研究生需要会的20个Origin操作,作图又快又好看(二)...
  4. APUE Chapter 1 - UNIX System Overview
  5. java避免空指针异常
  6. RapidMiner tuts
  7. 汽车后市场的大数据引擎谁人可造
  8. Visual Studio自动生成XML类和JSON类
  9. regester正则用法_Regester-Regester(正则表达式测试器)下载 v2.0.1官方版-下载啦
  10. 网站cdn加速哪个好,10个免费网站cdn加速推荐
  11. 米家扫地机器人充满电需要多长时间_【米家扫地机器人使用总结】充电|APP|清扫_摘要频道_什么值得买...
  12. 单片机C语言59秒计时器,0到59秒单片机秒表课程设计报告.doc
  13. unity调用安卓手机物理返回键和home键
  14. 教你怎样用Python画了一棵圣诞树,快来学习
  15. 常见的五种神经网络(4)-深度信念网络(下)篇之深度信念网络的原理解读、参数学习
  16. 烘焙门店 | 解锁公众号精准引流5W+的流量密码
  17. VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,倒数第二列, 匹配任意一个字符 :...
  18. 有哪些高情商的聊天技巧
  19. 【Leaflet-SuperMap-Vue】空气质量图
  20. Android8.0 Media系统(一)

热门文章

  1. CSSCI来源期刊(2010-2011年)
  2. Office Tool Plus 下载使用 365 2021/2019等版本
  3. D-OJ刷题日记:顺序查找 题目编号:517
  4. 【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )
  5. 获取微信好友头像,对其进行相应操作
  6. MySQL之——优化篇
  7. java抽象类例子月薪年薪程序_利用抽象类给一个有工资收入和稿费收入的小伙伴算税...
  8. 三星Galaxy Note2隐藏的秘密功能
  9. tp5 JWT生成token验证接口安全、防止高频请求
  10. 安全狗下一代网站防篡改产品全面支持容器防篡改