作者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