在Contiki中,
Ctimer
中使用的是etimer,
而etimer涉及到System_trick
其中,
这里的时钟,也是有
system_trick终端产生的。
到最后,
可能是对于M3的寄存器不熟悉,
没有找到,
具体设置时间的地方。
有几个问题
1、ctimer判断expire的方式,没有找到,
2、在ctimer中的几个函数指针,找不到源头,这个要留心。看看。
3、对于当前process的使用方式,没有理清楚。
关于问题1:
ctimer_expire() //core/sys/ctimer.c
--etimer_expire()
//core/sys/etimer.c
----timer_expire()
//core/sys/timer.c
update_time(void)(//core/sys/etimer.c)函数寻找下一个将要expire的时间。
ctimer.c-->etimer.c-->timer.c-->clock.c
依次组成了Contiki中的时钟及时间函数的使用。
在etimer.c中的PT调用timer_expire()判断时间是否expire。
如果expire,则通过事件告知ctimer.c中的PT此etimer已经expire,
则ctimer.c中的PT找到包含相应的etimer的ctimer然后执行设置的回调函数。
关于问题3:
是以前没有弄清楚PT在Contiki中的机制,
现在明白了很多。
这里是在ctimer在使用前需要先初始化。这里的初始化,就在Contiki里添加了ctimer的PT。
etimer的PT是在系统启动时就已经添加的。
PT的调用机制参见《Protothread机制文档(contiki-2.6\doc\pt-doc.txt)》,