latency_timer值对usb转串口设备的卡顿、延时性能的影响
2018-03-22 09:33
1406 查看
原链接
对于usb转串口设备,它硬件上一般有一个叫做latency_timer的定时器,当这个值设为lt时,表示数据会在设备上至少暂存lt 毫秒后再发送,只有在设备缓存写满的情况下才会忽略这个值而立即发送。latency_timer的取值范围一般为1到255之间,一般由设备驱动设置默认值。
ftdi芯片的串口设备,一般默认值会是16毫秒,这在高实时性的场景是无法忍受的,具体详情请阅读这篇帖子
对于usb转串口设备,它硬件上一般有一个叫做latency_timer的定时器,当这个值设为lt时,表示数据会在设备上至少暂存lt 毫秒后再发送,只有在设备缓存写满的情况下才会忽略这个值而立即发送。latency_timer的取值范围一般为1到255之间,一般由设备驱动设置默认值。
ftdi芯片的串口设备,一般默认值会是16毫秒,这在高实时性的场景是无法忍受的,具体详情请阅读这篇帖子
解决办法是:
1.手动设置latency_timer的值 # 先查看当前值 cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer #设置为最小值 1 ms sudo chmod 0666 /sys/bus/usb-serial/devices/ttyUSB0/latency_timer echo 1 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer #重启串口程序,应该就有效果了
2.使用ioctl API代码的办法设置 #如果使用了boost asio库 #include <sys/ioctl.h> #include <linux/serial.h> boost::asio::basic_serial_port<boost::asio::serial_port_service>::native_type native = serial_port_.native(); // serial_port_ is the boost's serial port class. struct serial_struct serial; ioctl(native, TIOCGSERIAL, &serial); serial.flags |= ASYNC_LOW_LATENCY; // (0x2000) ioctl(native, TIOCSSERIAL, &serial); #不使用boost库,直接操纵设备的方式 #include <sys/ioctl.h> #include <linux/serial.h> // Open RS232 on COM1 mPhysicalComPort = open(aPort, O_RDWR | O_NOCTTY | O_NDELAY); struct serial_struct serial; ioctl(mPhysicalComPort, TIOCGSERIAL, &serial); serial.flags |= ASYNC_LOW_LATENCY; // (0x2000) ioctl(mPhysicalComPort, TIOCSSERIAL, &serial);
相关文章推荐
- Linux设备驱动之timer定时器与延时
- .NET.性能:装箱与拆箱、string stringBuilder、struct class、Add AddRangle等影响性能分析
- Apache中AllowOverride对性能的影响
- 英特尔cpu漏洞影响到以下iOS设备,看看你在不在名单上?
- 摘转:发现 SOAP 编码对 Web 服务性能的影响
- framework 级影响Android 各种性能响应时间相关
- 发现了在公司的电脑中影响Windows性能,造成硬盘唱狂响曲的罪魁祸首!
- 存储方式与介质对性能的影响
- 继续探究HTML与CSS:@import CSS影响网页性能 (转)
- 影响SQL Server数据库应用性能的几个常见因素 (2012/1/18)
- MFC延时函数OnTimer()
- 关于网站高性能中磁盘cpu以及内存对网站性能的影响
- 6.3 Query 语句对系统性能的影响
- 放出几个珍藏多年的延时函数(高低精度高低性能)
- 转:性能测试中带宽的影响
- oracle 聚簇因子对查询性能的影响
- Mysql 【影响性能的几个方面】以及【性能优化顺序】
- 影响Java EE性能的十大问题
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响