首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contiki延迟(秒)

Contiki延迟(秒)
EN

Stack Overflow用户
提问于 2017-04-03 07:57:49
回答 1查看 3.4K关注 0票数 0

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

contiki timer 图书馆是非常好的记录在案,并且有一系列很好的例子,其中提到了定时器的创建、设置和重置。但是,如果我有如下代码:

代码语言:javascript
复制
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循环,如下所示: while(!timer_expired(&&transducerOutputWaitTimer)){};//做一些事情

或cpu_delay_usecs{mytimerdur_in_secs*10^6*};//做某事

我看不出这两种方法都是优雅的。一方面浪费CPU周期,另一方面强制执行不必要的大计算。

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

这一问题的附件如下:

  1. 我如何从另一个Contiki原始线程触发一个Contiki?如果我能做到这一点,我就可以得到导致transducerOutput调用进程的中断,我可以从该进程中触发电子定时器和进程事件。
  2. CPU延迟到底是什么意思?这是否意味着整个CPU时钟周期在给定的持续时间内会被抑制?如果是,其他进程目前在系统中运行的情况如何?

更新更新1: while方法不起作用。代码可能会进入无限循环。更新2:在设置定时器后,我尝试使用clock_delay(3*CLOCK_SECOND)方法。啊,真灵。但是,在这种情况下,为什么我需要计时器方法呢?

更新3(这会改变答案的上下文,从而按照建议添加此注释)

我的计时器需要用在进程外部的不同的空函数中。在这种情况下,我需要使用timer()库,而不是etimer (它是特定于进程的)。那么,在这种情况下,如何使我的方法等待所需的时间呢?

EN

回答 1

Stack Overflow用户

发布于 2017-04-03 09:36:30

有几个Contiki抽象构建在计时器库之上--通常不需要直接使用timer_t结构。相反,还有事件定时器(struct etimer),它们与Contiki进程一起运行,以及回调定时器(struct ctimer),这两种定时器都在内部使用struct timer。对于较少占用RAM的选项,使用更有限的API,可以使用第二次定时器(struct stimer)。最后,系统中只有一个实时定时器(struct rtimer).

示例事件计时器用法:设置并等待3秒:

代码语言:javascript
复制
static struct etimer timer;
etimer_set(&timer, 3 * CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));

我如何从另一个Contiki原始线程触发一个Contiki?

process_poll -有关更多示例,请参见process 文档

CPU延迟到底是什么意思?

这是一种忙碌的等待。不要使用延迟函数或其他形式的忙着等待超过微秒的延迟--这是不节能的,不允许其他进程运行,在最坏的情况下,看门狗可能会过期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43179373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档