关于contiki中的Ctimer和Etimer
文件目录:
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相关推荐
- Contiki中MAC层与RDC层
原英文文章:https://github.com/contiki-os/contiki/wiki/Change-mac-or-radio-duty-cycling-protocols 在Contiki ...
- contiki学习笔记(五)ctimer和etimer
四.callback timer 回调计时器(ctimer) Callback timer(回调计时器) Contiki system ctimer模块提供了一个计时器机制(机制)调用指定的C函数ct ...
- 从contiki中下载程序到TelosB节点
编译下载步骤 step 1: 编写好程序文件,到程序文件所在目录,以hello-world文件为例 cd + 文件目录 step 2: 编译程序文件 make TARGET=sky hello-wo ...
- contiki学习笔记 etimer部分
1.前言 contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统.国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有 ...
- Contiki Etimer 模块
一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...
- contiki学习笔记(四)、contiki系统UDP通信原理(单播、多播、RPL介绍)
(1).simple_udp_register()函数 contiki\core\net\ip /*该函数简化contiki系统中基于UDP协议的Socknet接口操作,函数体中包含了udp_new( ...
- Contiki的内核分析-定时器模型
导读 本文通过分析Contiki的源码,梳理Contiki的定时器模型中一共5个定时器的工作机制和原理. 引入 从本文开始,我们开始探究Contiki的5个定时器模型,遵循从易到难的原则,我们先开始两 ...
- Contiki教程——进程
概述 Contiki中的代码可以运行在下列两种执行上下文之一:合作式或者抢占式.合作式代码按顺序运行,抢占式代码可以暂停正在运行的合作式代码.Contiki中的进程运行在合作式上下文中,而中断和实时定 ...
- contiki STM32移植
1.contiki简介 [2016年6月更新 强烈建议各位使用arm-none-eabi-gcc工具链,推荐在Instant Contiki中开发Contiki应用,不推荐使用IAR] "C ...
最新文章
- 23张图,带你入门推荐系统
- 七大排序的个人总结(一)
- origin安装包_作图技巧|研究生需要会的20个Origin操作,作图又快又好看(二)...
- APUE Chapter 1 - UNIX System Overview
- java避免空指针异常
- RapidMiner tuts
- 汽车后市场的大数据引擎谁人可造
- Visual Studio自动生成XML类和JSON类
- regester正则用法_Regester-Regester(正则表达式测试器)下载 v2.0.1官方版-下载啦
- 网站cdn加速哪个好,10个免费网站cdn加速推荐
- 米家扫地机器人充满电需要多长时间_【米家扫地机器人使用总结】充电|APP|清扫_摘要频道_什么值得买...
- 单片机C语言59秒计时器,0到59秒单片机秒表课程设计报告.doc
- unity调用安卓手机物理返回键和home键
- 教你怎样用Python画了一棵圣诞树,快来学习
- 常见的五种神经网络(4)-深度信念网络(下)篇之深度信念网络的原理解读、参数学习
- 烘焙门店 | 解锁公众号精准引流5W+的流量密码
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,倒数第二列, 匹配任意一个字符 :...
- 有哪些高情商的聊天技巧
- 【Leaflet-SuperMap-Vue】空气质量图
- Android8.0 Media系统(一)
热门文章
- CSSCI来源期刊(2010-2011年)
- Office Tool Plus 下载使用 365 2021/2019等版本
- D-OJ刷题日记:顺序查找 题目编号:517
- 【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )
- 获取微信好友头像,对其进行相应操作
- MySQL之——优化篇
- java抽象类例子月薪年薪程序_利用抽象类给一个有工资收入和稿费收入的小伙伴算税...
- 三星Galaxy Note2隐藏的秘密功能
- tp5 JWT生成token验证接口安全、防止高频请求
- 安全狗下一代网站防篡改产品全面支持容器防篡改