在给定时间频率(定时器)执行功能的最佳方法?

时间:2013-10-07 14:36:26

标签: c linux timer embedded-linux

我有一个小程序,需要在小型Linux嵌入式系统(ARM)中运行。它用C语言编写。它需要从系统制造商提供的API中轮询一些数据(2x64位),然后进行一些计算并通过网络发送数据。数据应每秒轮询30次(30Hz)。

在C中最好的方法是什么?我已经看过使用sleep()的解决方案,但它似乎不是这项工作的最佳选择。

2 个答案:

答案 0 :(得分:3)

我建议考虑使用poll(2)多路复用系统调用进行轮询。

注意到当poll正在等待并轮询输入时,它不消耗任何CPU

如果每个事件的处理需要一些重要时间(例如毫秒或更长时间),您可能需要重新计算延迟。

您可以使用timerfd_create(2)(并同时提供设备文件描述符和计时器fd以进行轮询)。另见timer_create(2) ...

也许clock_gettime(2)可能有用。

阅读time(7)绝对有用。也许还有Advanced Linux Programming书。

答案 1 :(得分:2)

sleep()在几秒钟内暂停执行,如果您正在寻找更准确的sleep() - 类似函数,请使用usleep()暂停执行,以微秒为单位,或nanosleep()以纳秒为单位。< / p>