Timer Contiki延迟(秒)
我正在尝试开发一段contiki代码,其中我需要等待三秒钟才能获得传感器输出。虽然这听起来很像传感器,但在开发时,我想以人类可读的速度模拟行为,因此我需要将计时器设置为3秒 contiki计时器非常好,有一系列很好的示例,其中提到了计时器的创建、设置和重置。但是,如果我有如下代码:Timer Contiki延迟(秒),timer,contiki,protothread,Timer,Contiki,Protothread,我正在尝试开发一段contiki代码,其中我需要等待三秒钟才能获得传感器输出。虽然这听起来很像传感器,但在开发时,我想以人类可读的速度模拟行为,因此我需要将计时器设置为3秒 contiki计时器非常好,有一系列很好的示例,其中提到了计时器的创建、设置和重置。但是,如果我有如下代码: timer_set(&transducerOutputWaitTimer); bool if_blk_executed; if(timer_expired(&&transducerOutput
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循环,如下所示:
当(!timer_过期(&&transducerOutputWaitTimer)){};
//做点什么
或
cpu_delay_usecs{mytimerdur_in_secs*10^6*};
//做点什么
我不认为这两种方法都是优雅的。其中一个会浪费CPU周期,而另一个会强制执行不必要的大型计算
还有更好的办法吗?我知道那个钟
这一问题附有以下两个问题:
我的计时器需要在不同的void函数中的进程外部使用。在这种情况下,我需要使用timer()库而不是etimer(这是特定于一个进程的。在这种情况下,如何让我的方法等待所需的时间?在计时器库的顶部构建了几个Contiki抽象-通常不需要直接使用
计时器\u t
结构。相反,有事件计时器(struct etimer
),它们与Contiki进程和回调计时器(struct-ctimer
)配合得很好,它们都在内部使用struct-timer
。对于使用更有限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\u poll
-有关更多示例,请参阅流程API
CPU延迟到底意味着什么
这是一种忙等待的形式。不要使用延迟函数或其他形式的忙等待延迟超过微秒-不节能,不允许其他进程运行,在最坏的情况下,看门狗可能会过期。问题更新我的计时器需要在另一个无效函数中的进程外部使用。在这种情况下,我需要d使用timer()库而不是etimer(这是特定于流程的。在这种情况下,我如何让我的方法等待所需的时间?您应该使用此要求更新问题-这非常相关,并且限制了答案。简短的回答是,Contiki流程产量仅在流程功能本身受支持。您需要用两个函数将其分开:第一个函数将设置等待,第二个函数将在等待后继续。使用
ctimer
将是一个很好的方法。顺便问一下,如何获取事件源的句柄?例如,我已退出进程事件。我如何知道退出的进程是哪个?我可以从pr获取指针吗ocess.c或process.h库来执行此操作?搜索了这两个源文件,但无法识别。