[問題] Linux serial port 回應速度最小化

看板LinuxDev作者 (妳,我可以)時間12年前 (2012/12/20 22:48), 編輯推噓4(4015)
留言19則, 4人參與, 最新討論串1/2 (看更多)
問題: 我的實驗是這樣的 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

12/21 00:05, , 1F
標準Linux kernel 應該很難再快了,研究一下RTOS吧
12/21 00:05, 1F

12/21 09:38, , 2F
我也很想,不過已經有包袱在上面了
12/21 09:38, 2F

12/21 18:17, , 3F
有可能從tty層著手嗎?
12/21 18:17, 3F

12/21 20:43, , 4F
不是console的話可以繞過整個tty層,先告訴kernel你只有
12/21 20:43, 4F

12/21 20:44, , 5F
console這個uart,另外的uart控制就把他當一般的硬體來寫
12/21 20:44, 5F

12/21 20:45, , 6F
只是一些serial控制的程式都不能用了,都要自己給API出來
12/21 20:45, 6F

12/22 00:37, , 7F
試著把hrtimer打開看看有沒有用。
12/22 00:37, 7F

12/22 10:14, , 8F
謝謝各位,我連epoll都拿來試驗了一下,結果相同
12/22 10:14, 8F

12/22 10:17, , 9F
hrtimer在user mode or kernel mode打開?可以多給些
12/22 10:17, 9F

12/22 10:20, , 10F
提示嗎?難道是用non-blocking + nanosleep?
12/22 10:20, 10F

12/22 10:28, , 11F
askacis 兄建議的方式可以從user mode進行嗎?
12/22 10:28, 11F

12/22 10:28, , 12F
可否多給些提示?謝謝!
12/22 10:28, 12F

12/22 11:11, , 13F
用最暴力的方式:無窮迴圈+non-blocking,有微幅進化
12/22 11:11, 13F

12/22 11:11, , 14F
3.8ms->3.6ms
12/22 11:11, 14F

12/23 00:50, , 15F
你可以是看看gettimeofday;nanosleep * n;gettimeofday
12/23 00:50, 15F

12/23 00:51, , 16F
如果沒有開hrtimer,每一個nanosleep最少需要1ms
12/23 00:51, 16F

12/23 00:53, , 17F
也就是說如果沒有hrtimer,每一個schedule都是被Hz觸發的
12/23 00:53, 17F

12/23 00:54, , 18F
這部份不容易說清楚,你可以直接把hrtimer打開來看看。
12/23 00:54, 18F

12/23 00:55, , 19F
這部份其實跟你的實作有關,沒有code 很難猜。
12/23 00:55, 19F
文章代碼(AID): #1GqoLCuj (LinuxDev)
文章代碼(AID): #1GqoLCuj (LinuxDev)