2013-10-07 42 views
4

我有一個小程序,需要在小型Linux嵌入式系統(ARM)中運行。它用C語言編寫。它需要從系統製造商提供的API中輪詢一些數據(2x64位),然後進行一些計算並通過網絡發送數據。數據應該每秒調整30次(30Hz)。在給定的時間頻率(定時器)執行功能的最佳方法?

在C中做什麼最好的方法是?我已經看到使用sleep()的解決方案,但它似乎不是該工作的最佳選擇。

+2

[Timers](http://linux.die.net/man/2/timer_create)? ['nanosleep'](http://linux.die.net/man/2/nanosleep)? –

+0

你能詳細解答一下嗎?使用其中之一會有什麼好處?我期待這個過程在機器上「永久」運行(正常運行時間> 30天),並且我想盡可能釋放CPU。 – fazineroso

+1

如果您在計時器事件之間沒有做任何事情,那麼您可以使用例如'nanosleep',那麼在睡眠結束之前,你的進程將不會執行任何操作(包括不採取任何CPU)。如果你想在定時器運行時做些事情,那麼POSIX定時器事件就是你想要的。 –

回答

3

我建議考慮使用poll(2)複用系統調用來進行輪詢。

通知,當poll等待並輪詢輸入,它不如果每個事件的處理需要一些顯著時間(例如一毫秒以上),你可能要重新計算消耗任何CPU

延遲。

你可以使用timerfd_create(2)(並給出你的設備文件描述符和定時器fd來輪詢)。另請參見timer_create(2) ...

也許clock_gettime(2)可能會有用。

和讀time(7)絕對有用。也許這本書也是Advanced Linux Programming

2

sleep()暫停在幾秒鐘內執行,如果你正在尋找一個更準確的睡眠() - 之類的函數,在納秒使用usleep()它擺在微秒執行,或nanosleep()

相關問題