【发布时间】:2015-03-27 04:18:49
【问题描述】:
我正在使用serial port,在与此通信时,我必须使用tcsetattr() 和TCSDRAIN 模式更改配置。
TCSADRAIN
The change should take place after all output written to fd has been read by the master pseudoterminal. Use this value when changing terminal attributes that affect output.
当使用TCSDRAIN 调用tcsetattr() 时,如果缓冲区中仍有输出数据,Linux 似乎被阻塞,并在一段时间后再次检查缓冲区以更改配置。
我对此进行了如下测试
-
第一个正常情况
- 向串口写入数据
- 使用 tcsetattr() 更改配置
- 输出缓冲区中有剩余数据
- 进程在固定间隔内阻塞,例如 20 毫秒
- 醒来。
-
第二种情况
- 向串口写入数据
- 手动执行 sleep() 5ms,这意味着有足够的时间来清除 Linux 的输出
- 没有剩余数据
- 使用 tcsetattr() 更改配置
- 没有阻塞
对我来说,中断时间太长了,无法做我想做的事
如何更改此中断计时器间隔?
(在Ubuntu 和raspberrypi)
【问题讨论】: