clock_nanosleep() 還是不準的問題... - Linux

Barb Cronin avatar
By Barb Cronin
at 2014-07-17T21:54

Table of Contents

我不確定這問題要發在linux板或C_and_CPP板比較好,

目前我打算用嵌入式開發板 beaglebone black 上安裝Debian, kernel 3.15,

因為某些需要,所以時間精度要求要在 1us 以下,所以我打算用clock_nanosleep()實現

但我給 1s 的delay,他實際睡眠時間卻是 1s 又 120us,我是在clock_nanosleep()前後

加上clock_gettime(),然後把兩個時間相減得到的數字.. 總是會睡過頭。

另外我有用linuxPTP(某種利用PTP校正系統時間(CLOCK_REALTIME)的軟體),並且將示波器

接上GPIO看1PPS的準確度,delay也是多了100us左右...


請問有辦法讓系統達到至少 1us 以下的時間精度嗎? 譬如我設delay 1s,實際delay是

1s 又 200ns 之類的,用realtime OS有幫助嗎? 或者這是kernel counter的問題(但我對

linux的時間設計並不是很了解,只知道作業系統的計時跟counter有關)?


希望能獲前輩指教,謝謝。


下面是我其中的三組數據:

da 69033 dan 946956445
db 69034 dbn 947070913

da 69035 dan 947355036
db 69036 dbn 947490079

da 69037 dan 947738536
db 69038 dbn 947863215

左邊是秒(絕對時間),右邊是奈秒(絕對時間),故上下兩組相減可看到多了快100us...

--
Tags: Linux

All Comments

Margaret avatar
By Margaret
at 2014-07-18T00:24
之前做的時候,linux好像沒辦法做到這麼高的準度
Lily avatar
By Lily
at 2014-07-21T02:07
還是不行的話買個震晶自己弄上gpio? 不知道可不可以X
Lydia avatar
By Lydia
at 2014-07-23T10:35
D
Damian avatar
By Damian
at 2014-07-23T20:39
不曉得若改成realtime OS有效嗎?
Christine avatar
By Christine
at 2014-07-28T16:53
1. 是否已將 function/system call overhead 列入考慮 ?
Cara avatar
By Cara
at 2014-07-28T20:40
2. context switch 需要時間, 且可能有相當範圍的誤差.
Leila avatar
By Leila
at 2014-07-30T04:38
3. 是否使用 chrt 之類調高執行的 priority ?
Damian avatar
By Damian
at 2014-08-02T00:37
需要us級精準度的,就不該使用OS了,應該是main loop程式自
Victoria avatar
By Victoria
at 2014-08-05T17:58
行控制會比較好.如果要用OS,可能要自己把sleep時間扣掉OS
Annie avatar
By Annie
at 2014-08-06T12:35
overhead,但這不保險,除非完全熟悉OS流程怎麼跑
Eartha avatar
By Eartha
at 2014-08-10T00:30
謝謝,我查了一些資料,preempt的jitter似乎只能到10us..
Andy avatar
By Andy
at 2014-08-12T10:51
比起 Linux 板, 也許 LinuxDev 板更合適?
Mary avatar
By Mary
at 2014-08-15T20:06
要求時間精度有幾種類型,包含讀取時間刻度,短延時,長延時幾種;
Kumar avatar
By Kumar
at 2014-08-19T11:14
短延時比方10us delay不可誤差超過1us,長延時則如 1s 的誤差,
Odelette avatar
By Odelette
at 2014-08-23T09:29
這幾種類型的處理方式都有相當的差異.
Oscar avatar
By Oscar
at 2014-08-28T05:50
另外, b大的意思是完全不用OS? 或只是不要使用 syscall ?
Elma avatar
By Elma
at 2014-08-29T20:18
schedule一定不準,但user mode好像沒busy waiting可用
Olivia avatar
By Olivia
at 2014-09-03T18:37
考慮自己弄一個?

Ubnutu 12.04 移除預設資料夾捷徑

Gilbert avatar
By Gilbert
at 2014-07-17T13:53
※ 引述《erttyy8821 (俠)》之銘言: : 各位先進 : 我想問一下有辦法刪除一些預設資料夾的捷徑嗎? : (像是下載.圖片.影片...這些) : 雖然是沒影響使用 : 但是因為我把預設資料夾都刪掉,不小心點到這些捷徑會出現錯誤 : http://ppt.cc/EZOa 修改 ~/.config/u ...

Ubnutu 12.04 移除預設資料夾捷徑

Dinah avatar
By Dinah
at 2014-07-17T12:36
各位先進 我想問一下有辦法刪除一些預設資料夾的捷徑嗎? (像是下載.圖片.影片...這些) 雖然是沒影響使用 但是因為我把預設資料夾都刪掉,不小心點到這些捷徑會出現錯誤 http://ppt.cc/EZOa - ...

查看開機時啟動的服務 (Ubuntu)

Damian avatar
By Damian
at 2014-07-17T09:44
我所使用的 Linux 是 Ubuntu 12.04 LTS。 我有一台機器每次開機的時候都會自己啟動 NTP Service, 但是因為我們本身已有共用的 NTP Server, 如果這樣開的話伺服器會連不到共用的 NTP Server 進行校時。 所以不會自己在機器上啟動 NTP Service。 但是我 ...

Re: cdlinux在安裝無線網卡驅動程式的問題

Quintina avatar
By Quintina
at 2014-07-16T23:31
※ 引述《filiaslayers (司馬雲)》之銘言: : 看畫面應該是ubuntu...應該atat : 你應該會找到一個類似程式集的地方,就是裡面有很多程式 : 裡面就會有終端機了,或是叫terminal : 點開之後,輸入 : cd 網卡目錄位置 : 切換目錄 : 然後再打./install.sh : ...

判斷指令檔是否存在

Barb Cronin avatar
By Barb Cronin
at 2014-07-16T12:20
午安 我寫shell script碰到一個問題 想要判斷外部指令是否存在(/bin,/usr/bin,/sbin,... 等任一目錄中) 爬文有爬到說用套件管理程式檢查該套件是否有安裝... 但我想要很精簡的做法的話... 有什麼辦法可以判斷一個指令是否有存在那幾個可執行目錄中嗎? 試過 test . ...