我想开发一个contiki代码片段,我需要等待传感器输出三秒钟。尽管在开发时这听起来可能听起来很像传感器,但我想模拟人类可读速度下的行为,因此我需要将计时器设置为3秒。Contiki在几秒钟内延迟
contiki定时器library是不错的documented并有一个很好的系列的例子,提到了定时器的创建,设置和重置。但是,如果我有一个像下面的代码:
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周期时,另一个人执行不必要的大计算。
有没有更好的方法?我知道,时钟
附加到这个问题的有以下两种:
我怎样才能触发一个半自助旅游旅行社protothread从另一个?如果我可以做到这一点,我可以得到中断,导致transducerOutput调用一个可以触发etimer并处理事件的进程。
CPU延迟究竟意味着什么?这是否意味着整个CPU时钟周期在给定的持续时间内被阻止?如果是,那么系统中当前运行的其他进程如何受到影响?
更新 更新1:虽然方法不起作用。代码可能进入无限循环。 更新2:在设置我的计时器后,我尝试了clock_delay(3 * CLOCK_SECOND)方法。有效。但是,在这种情况下,为什么我需要定时器方法呢?
更新3(这改变了答案的上下文中,因此加入此评论按照建议)
我的计时器需要以不同的空隙功能的处理之外使用。在这种情况下,我需要使用定时器()库,而不是etimer(这是特定的一个过程。那么,如何让我的方法,以等待在这种情况下所需的时间?
问题更新 –