您的位置:首页 > 其它

cc2530-关于Contiki系统的时钟

2016-03-06 12:01 246 查看
Contiki系统有两个系统时钟,分别是粗粒度时钟(coarse-grained)和细粒度时钟(fine-grained)。

其中

粗粒度时间使用的是128HZ的频率,例如CLOCK_SECOND。

细粒度时间使用的是32768HZ的频率,例如RTIMER_SECOND。

Contiki系统有四种类型的定时器,分别是:timer,etimer,ctimer和rtimer

前面三个都使用了粗粒度时钟来计时,rtimer使用了细粒度时钟计时,他们的含义如下:

timer:被动定时器,只能用来跟踪过去的时间;

etimer:主动定时器,当时间到时发送一个事件;

ctimer:主动定时器,当时间到时调用一个函数;

rtimer:实时定时器,当时间到时调用一个函数。

etimer使用例程:

static struct etimer etim;
PROCESS_THREAD(my_process,ev,data)
{
PROCESS_BEGIN();
while(1)
{
printf("Uptime (seconds): %lu\n",clock_seconds());
etimer_set(&etim,CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&etim));
}
PROCESS_END();
}


ctimer使用例程:

static struct ctimer callback_timer;
static void callback(void *data)
{
printf("%s\n",(char *)data);
}

void application(void)
{
ctimer_set(%callback_timer,CLOCK_SECOND,callback,
"Hello, callback!");
}


rtimer使用例程:

1、在设置时间的时候设置硬件中断

2、产生一个回调

//设置rtimer
static struct rtimer rt;
rtimer_set(&rt,		//指向rtimer的结构体
RTIMER_NOW() + RTIMER_SECOND,//1s
1,			//持续的时间
rt_callback,		//设置指向回调函数的指针
NULL);		//设置回调函数的形参

//回调函数
statci void
rt_callbcak(struct rtimer *rt, void *data)
{
printf("callback!\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: