0

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

 PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

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

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

谢谢你。

4

2 回答 2

1

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

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

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

记得偶尔戳一下看门狗定时器——如果你的进程会被卡住几秒钟(无论如何不推荐),看门狗就会过期。

于 2017-08-10T22:26:43.050 回答
0

正常的方法是编写一个中断处理程序来处理定时器中断,该中断处理程序的优先级高于主应用程序。

所以当中断事件发生时,中断处理程序运行完成,然后执行返回到主应用程序

于 2017-08-12T02:42:12.167 回答