Timer Contiki延迟(秒)

Timer Contiki延迟(秒),timer,contiki,protothread,Timer,Contiki,Protothread,我正在尝试开发一段contiki代码,其中我需要等待三秒钟才能获得传感器输出。虽然这听起来很像传感器,但在开发时,我想以人类可读的速度模拟行为,因此我需要将计时器设置为3秒 contiki计时器非常好,有一系列很好的示例,其中提到了计时器的创建、设置和重置。但是,如果我有如下代码: timer_set(&transducerOutputWaitTimer); bool if_blk_executed; if(timer_expired(&&transducerOutput

我正在尝试开发一段contiki代码,其中我需要等待三秒钟才能获得传感器输出。虽然这听起来很像传感器,但在开发时,我想以人类可读的速度模拟行为,因此我需要将计时器设置为3秒

contiki计时器非常好,有一系列很好的示例,其中提到了计时器的创建、设置和重置。但是,如果我有如下代码:

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周期,而另一个会强制执行不必要的大型计算

还有更好的办法吗?我知道那个钟

这一问题附有以下两个问题:

  • 如何从另一个Contiki原线程触发一个Contiki原线程?如果我能做到这一点,我就可以得到一个中断,该中断导致transducerOutput调用一个进程,我可以从中触发etimer和进程事件

  • CPU延迟到底意味着什么?这是否意味着整个CPU时钟周期会在给定的持续时间内延迟?如果是,系统中当前运行的其他进程如何受到影响

  • 更新 更新1:while方法不起作用。代码可能进入无限循环。 更新2:在设置计时器后,我尝试了时钟延迟(3*时钟秒)方法。成功了。但是,在这种情况下,为什么我需要timer方法呢

    更新3(这改变了答案的上下文,因此根据建议添加了此注释)


    我的计时器需要在不同的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库来执行此操作?搜索了这两个源文件,但无法识别。