【问题标题】:How to create a low impact timer如何创建低影响计时器
【发布时间】:2012-07-04 06:47:08
【问题描述】:

我想创建一个在嵌入式系统上运行且影响尽可能小的计时器。我可以选择在 C、C++、bash 或 python 中实现计时器。计时器中的错误可能是 +/- 几秒。

我很想在 bash 脚本中创建一个循环,使用“sleep()”命令和“&”在后台启动它。但是,如果以这种方式实施,我担心/不太明白这是否会使系统保持活动/唤醒。

如果它保持系统处于活动/唤醒状态,是否可以使用 C、C++、python 或使用 bash 脚本的其他方式创建一个不这样做的计时器?

【问题讨论】:

  • “我认为复合 C/C++ 的大部分用途是无知的表现。” ~ Bjarne Stroustrup - 另见research.att.com/~bs/bs_faq.html#C-slash
  • @Griwes,即使您确实找到了一些常见问题解答网站,您也不会对所有人大喊他们是多么无知,对吧?
  • 您的嵌入式系统似乎运行 linux(或类似的 POSIX 兼容系统)。它是否运行 cron 任务?
  • fcron 应该做你想做的事。
  • 计时器的目标是什么?

标签: c++ python c shell timer


【解决方案1】:

如果您担心嵌入式系统中的系统资源或功耗问题,您绝对应该使用 RTC 来实现定时器。

请参考http://linux.die.net/man/4/rtc

并且,查看您正在使用的操作系统的用户手册。也许有一些函数可以调用。

没有必要重新发明定时器相关的功能。

【讨论】:

  • RTC 被限制在 8192Hz,任何高于 60Hz 的东西都需要以 root 身份运行。我发现使用setitimer 定期生成警报信号更便携,提供微秒粒度的可能性(取决于实现),并且不需要任何特殊权限。然后,您可以简单地在循环中调用 pause() 系统调用以在警报信号之间休眠。 Python 甚至使用signal module 支持此方法。
【解决方案2】:

您可以通过多种不同的方式设置计时器。

最简单的就是这样

date "+%s"

打印出系统的时间戳。如果系统时钟足够,那么得到两个时间戳,一个在开始,一个在结束,你可以通过这两个时间戳的差异来找到经过的时间。

在每种语言(C、C++、Python 等)上都有等效的方法来执行此操作。

如果你正在为一个结束的过程计时,你可以做类似的事情

TIC=$(date "+%s")
./some-script
TOC=$(date "+%s")
DELTA=$((TOC - TIC))
echo $DELTA

alternatively in Python

无论如何,我不认为你的睡眠想法是最好的方法。

【讨论】:

  • 我想你误解了他的问题。他不想测量时间,他想让任务定期运行。
  • 如果是这样的话,它不是很清楚,然后我的答案将不适用。
  • 谢谢,这给了我一些想法,但 Rob 是正确的。我不想测量时间,而是定期运行任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 2022-06-17
  • 1970-01-01
  • 2018-01-03
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多