Contiki计时器没有暂停进程

时间:2017-08-10 18:31:19

标签: c timer contiki

有没有办法等待计时器到期而不暂停进程?如果我们使用

 PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

我们暂停这个过程。 假设我们想要继续做其他事情,当计时器到期时检查函数的值是否已经改变。

如果不可能,我可以开始一个等待的新流程吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

不,没有 - 这是事件定时器如何工作的根本结果。 Contiki多线程/多处理是协作的 - 进程必须自愿暂停执行以让其他进程运行。由于事件计时器由另一个(系统)进程管理,如果您的进程永远不会放弃执行,则计时器进程永远不会运行。因此,您的进程永远不会返回计时器事件。

听起来像事件计时器可能不是您的最佳选择。您可以改为使用rtimer

rtimer_clock_t end = RTIMER_NOW() + RTIMER_SECOND;
while(RTIMER_CLOCK_LT(RTIMER_NOW(), end)) {
   /* do stuff */
}

请记住偶尔戳一下看门狗定时器 - 如果你的过程会被困住几秒钟(不建议不推荐),看门狗就会过期。