Contiki定时器无需暂停进程

Contiki timer without pausing the process

有没有办法在不暂停进程的情况下等待计时器到期?如果我们使用

 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 */
}

记得偶尔打开看门狗计时器 - 如果您的进程将在做某事时卡住几秒钟(无论如何不推荐),看门狗就会过期。

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

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