cc2530-关于Contiki系统的时钟

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");
}


你可能感兴趣的:(contiki)