作者godspeedlee (妳,我可以)
看板LinuxDev
標題[問題] Linux serial port 回應速度最小化
時間Thu Dec 20 22:48:41 2012
問題:
我的實驗是這樣的
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
1F:推 leolarrel:標準Linux kernel 應該很難再快了,研究一下RTOS吧 12/21 00:05
2F:→ godspeedlee:我也很想,不過已經有包袱在上面了 12/21 09:38
3F:→ godspeedlee:有可能從tty層著手嗎? 12/21 18:17
4F:推 askacis:不是console的話可以繞過整個tty層,先告訴kernel你只有 12/21 20:43
5F:→ askacis:console這個uart,另外的uart控制就把他當一般的硬體來寫 12/21 20:44
6F:→ askacis:只是一些serial控制的程式都不能用了,都要自己給API出來 12/21 20:45
7F:推 pokkys:試著把hrtimer打開看看有沒有用。 12/22 00:37
8F:→ godspeedlee:謝謝各位,我連epoll都拿來試驗了一下,結果相同 12/22 10:14
9F:→ godspeedlee:hrtimer在user mode or kernel mode打開?可以多給些 12/22 10:17
10F:→ godspeedlee:提示嗎?難道是用non-blocking + nanosleep? 12/22 10:20
11F:→ godspeedlee:askacis 兄建議的方式可以從user mode進行嗎? 12/22 10:28
12F:→ godspeedlee:可否多給些提示?謝謝! 12/22 10:28
13F:→ godspeedlee:用最暴力的方式:無窮迴圈+non-blocking,有微幅進化 12/22 11:11
14F:→ godspeedlee:3.8ms->3.6ms 12/22 11:11
15F:推 pokkys:你可以是看看gettimeofday;nanosleep * n;gettimeofday 12/23 00:50
16F:→ pokkys:如果沒有開hrtimer,每一個nanosleep最少需要1ms 12/23 00:51
17F:→ pokkys:也就是說如果沒有hrtimer,每一個schedule都是被Hz觸發的 12/23 00:53
18F:→ pokkys:這部份不容易說清楚,你可以直接把hrtimer打開來看看。 12/23 00:54
19F:→ pokkys:這部份其實跟你的實作有關,沒有code 很難猜。 12/23 00:55