看板 LinuxDev 關於我們 聯絡資訊
問題: 我的實驗是這樣的 1. PC serial port --> 'A' --> Linux device serial port 2. PC serial port <-- 'A' <-- Linux device serial port 1. PC 先送 'A' 給 Linux device,2. Linux device 收到 'A' 後馬上回傳給 PC 就是不斷重複 1-2 的步驟而已,小弟希望 Linux device 從收到 'A' 到回傳 'A' 給 PC 這之間的時間間隔越小越好, 也就是下面的 delay 越小越好 ___[PC TX FRAME]___ delay ___[LINUX DEVICE TX FRAME]___ 目前用了以下方法也只能減少到 3.8ms 左右(用示波器觀察), 希望能壓到 1ms <=,不知道各位先進有沒有什麼密技?現在 小弟只剩進 kernel mode 這一招了(P.S process 已經以 root 權限執行) (1) nice -20,效果不大 (2) sched_setscheduler() 代入最高 priority,並且設定為 SCHED_FIFO,這大概是效果最好的了,因為訊號已經不會抖動 感謝各位!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.139.111
leolarrel:標準Linux kernel 應該很難再快了,研究一下RTOS吧 12/21 00:05
godspeedlee:我也很想,不過已經有包袱在上面了 12/21 09:38
godspeedlee:有可能從tty層著手嗎? 12/21 18:17
askacis:不是console的話可以繞過整個tty層,先告訴kernel你只有 12/21 20:43
askacis:console這個uart,另外的uart控制就把他當一般的硬體來寫 12/21 20:44
askacis:只是一些serial控制的程式都不能用了,都要自己給API出來 12/21 20:45
pokkys:試著把hrtimer打開看看有沒有用。 12/22 00:37
godspeedlee:謝謝各位,我連epoll都拿來試驗了一下,結果相同 12/22 10:14
godspeedlee:hrtimer在user mode or kernel mode打開?可以多給些 12/22 10:17
godspeedlee:提示嗎?難道是用non-blocking + nanosleep? 12/22 10:20
godspeedlee:askacis 兄建議的方式可以從user mode進行嗎? 12/22 10:28
godspeedlee:可否多給些提示?謝謝! 12/22 10:28
godspeedlee:用最暴力的方式:無窮迴圈+non-blocking,有微幅進化 12/22 11:11
godspeedlee:3.8ms->3.6ms 12/22 11:11
pokkys:你可以是看看gettimeofday;nanosleep * n;gettimeofday 12/23 00:50
pokkys:如果沒有開hrtimer,每一個nanosleep最少需要1ms 12/23 00:51
pokkys:也就是說如果沒有hrtimer,每一個schedule都是被Hz觸發的 12/23 00:53
pokkys:這部份不容易說清楚,你可以直接把hrtimer打開來看看。 12/23 00:54
pokkys:這部份其實跟你的實作有關,沒有code 很難猜。 12/23 00:55