我正在尝试开发一段contiki代码,在该代码中,我需要等待3秒才能输出换能器。虽然这听起来可能很非换能器,但在开发时,我想模拟人类可读的速度的行为,因此我需要将计时器设置为3秒。
contiki timer 图书馆是非常好的记录在案,并且有一系列很好的例子,其中提到了定时器的创建、设置和重置。但是,如果我有如下代码:
timer_set(&transducerOutputWaitTimer);
bool if_blk_executed;
if(timer_expired(&&transducerOutputWaitTimer)){
if_blk_executed = true;
//do something
}
if(if_blk_executed)
printf("Sunrise");
else
printf("It is not dawned yet");现在,在计时器设置之后,不会立即触发过期。因此,if块永远不会执行。实际上,它永远不会破晓。
现在有两种方法可以让系统等待。第一种方法是在计时器上添加一个while循环,如下所示: while(!timer_expired(&&transducerOutputWaitTimer)){};//做一些事情
或cpu_delay_usecs{mytimerdur_in_secs*10^6*};//做某事
我看不出这两种方法都是优雅的。一方面浪费CPU周期,另一方面强制执行不必要的大计算。
还有更好的办法吗?我知道那个钟
这一问题的附件如下:
更新更新1: while方法不起作用。代码可能会进入无限循环。更新2:在设置定时器后,我尝试使用clock_delay(3*CLOCK_SECOND)方法。啊,真灵。但是,在这种情况下,为什么我需要计时器方法呢?
更新3(这会改变答案的上下文,从而按照建议添加此注释)
我的计时器需要用在进程外部的不同的空函数中。在这种情况下,我需要使用timer()库,而不是etimer (它是特定于进程的)。那么,在这种情况下,如何使我的方法等待所需的时间呢?
发布于 2017-04-03 09:36:30
有几个Contiki抽象构建在计时器库之上--通常不需要直接使用timer_t结构。相反,还有事件定时器(struct etimer),它们与Contiki进程一起运行,以及回调定时器(struct ctimer),这两种定时器都在内部使用struct timer。对于较少占用RAM的选项,使用更有限的API,可以使用第二次定时器(struct stimer)。最后,系统中只有一个实时定时器(struct rtimer).
示例事件计时器用法:设置并等待3秒:
static struct etimer timer;
etimer_set(&timer, 3 * CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));我如何从另一个Contiki原始线程触发一个Contiki?
有process_poll -有关更多示例,请参见process 文档。
CPU延迟到底是什么意思?
这是一种忙碌的等待。不要使用延迟函数或其他形式的忙着等待超过微秒的延迟--这是不节能的,不允许其他进程运行,在最坏的情况下,看门狗可能会过期。
https://stackoverflow.com/questions/43179373
复制相似问题