本来在搞哪个contiki-3.0\core\dev\button-sensor,这个按键传感器接口函数的,
但是里面出现了rtimer的应用。所以只能先跟rtimer干一架了,才能继续下去!!
CONTIKI OS操作系统,rtimer位置,core-->sys-->的抽象层接口函rtimer.h和rtimer.c。
低层的实现函数是rtimer-arch.c rtimer-arch.h,要用户实现后才能使用rtimer相关功能的。
至于什么是CONTIKI的rtimer?大哥 你自己去百度,这里就不介绍了。
RTIMER-arch.c大多 都明明白白了,只有俩个函数有点迷糊。
它们就是void rtimer_arch_schedule(rtimer_clock_t t)和rtimer中断服务
这个rtimer问题, 也困惑我几天了。可能我学识有限,换做其他人早就搞定了。。。
不管了, 先干起来再说吧!!
先看网上查到的一些代码例程,主要是看看网友对rtimer的理解和用法:
http://bbs.eeworld.com.cn/thread-453318-1-1.html里面有些相关信息,如下
void rtimer_arch_schedule(rtimer_clock_t t)
{
PRINTF("rtimer_arch_schedule time %u\n", t);
CONF_TC_MODULE->COUNT32.CC[0].reg = t;
}
void rtimer_isr_hook(void)
{
ENERGEST_ON(ENERGEST_TYPE_IRQ);
rtimer_run_next();
if (process_nevents() > 0) {
/*
* 退出低功耗
* 如果之前进入了的话
*/
}
ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
https://www.cnblogs.com/liu13526825661/p/6135780.html里面有些相关信息,如下
void rtimer_arch_schedule(rtimer_clock_t t)
{
/* Sets the TIM2 Capture Compare1 Register value */
TIM_SetCompare1(RTIMER_TIM,t);
PRINTF("进入rtimer_arch_schedule\r\n");
PRINTF("%d\r\n",rtimer_arch_now());
/* MUST clear the remained flag of TIM2 compare */
TIM_ClearFlag(RTIMER_TIM,TIM_FLAG_CC1);
/* Enable interrupt of Capture compare 1 */
TIM_ITConfig(RTIMER_TIM,TIM_IT_CC1, ENABLE);
return;
}
void rtimer_irq_handler(void)
{
/* Clear interrupt pending bit */
TIM_ClearITPendingBit(RTIMER_TIM,TIM_IT_CC1);
/* Do interrupt only once! */
/*中断到来后需要将中断禁止,避免多次产生中断*/
rtimer_arch_disable_irq();
//ENERGEST_ON(ENERGEST_TYPE_IRQ);//开启了节能中断
rtimer_run_next();
//ENERGEST_OFF(ENERGEST_TYPE_IRQ);
return;
}
http://blog.sina.com.cn/s/blog_686ee2910102vxce.html里面有些相关信息
这个网址,对于rtimer_arch_schedule只是文字描述,也是无语了:
实现rtimer_arch_schedule函数
在此函数中,需要确定定时器的计数时间,同时使能定时器,并配置CCR1的值,开启定时器中断,等待中断调度
rtimer_arch_schedule函数实际在rtimer_set中被调用,当设置rtimer相关回调时配置,但是一次仅仅能够配置一个rtimer
对于rtimer也是文字描述,也是无语了:
中断调度处理
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
rtimer_arch_disable_irq();
rtimer_run_next();
}
中断到来后,需要将中断禁止,避免多次调用中断。
好了,网上的查阅到资料太概就上面这些了。
其实他们之间都有异取同工之处,接下来让我们看看,CONTIKI 3.0官方自带的例程吧。这个比较有权威、说服力
位置contiki-3.0\cpu\stm32w108里有例程,关于void rtimer_arch_schedule(rtimer_clock_t t)和rtime用到的r定时器中断函数