有没有办法等待计时器到期而不暂停进程?如果我们使用
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
我们暂停这个过程。假设我们想继续做其他事情,当计时器到期时,检查函数的值是否发生了变化。
如果不可能,我可以开始一个等待的新进程吗?
谢谢你。
有没有办法等待计时器到期而不暂停进程?如果我们使用
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
我们暂停这个过程。假设我们想继续做其他事情,当计时器到期时,检查函数的值是否发生了变化。
如果不可能,我可以开始一个等待的新进程吗?
谢谢你。
不,没有 - 这是事件计时器如何工作的基本结果。Contiki 多线程/多处理是协作的——进程必须自愿暂停执行以让其他进程运行。由于事件计时器由另一个(系统)进程管理,如果您的进程从不放弃执行,则计时器进程永远不会运行。因此,您的进程将永远无法取回计时器事件。
听起来事件计时器可能不是您的最佳选择。您可以rtimer
改用:
rtimer_clock_t end = RTIMER_NOW() + RTIMER_SECOND;
while(RTIMER_CLOCK_LT(RTIMER_NOW(), end)) {
/* do stuff */
}
记得偶尔戳一下看门狗定时器——如果你的进程会被卡住几秒钟(无论如何不推荐),看门狗就会过期。
正常的方法是编写一个中断处理程序来处理定时器中断,该中断处理程序的优先级高于主应用程序。
所以当中断事件发生时,中断处理程序运行完成,然后执行返回到主应用程序