Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 通过TIOCGICOUNT检索错误计数器时始终返回错误(-1)_Linux_Ioctl_Ftdi - Fatal编程技术网

Linux 通过TIOCGICOUNT检索错误计数器时始终返回错误(-1)

Linux 通过TIOCGICOUNT检索错误计数器时始终返回错误(-1),linux,ioctl,ftdi,Linux,Ioctl,Ftdi,在为USB到RS422转换器模块开发接口应用程序时,我遇到了一个停止播放的问题 我需要检索用于帧、溢出、奇偶校验和中断错误的UART错误计数器。但是对ioctl的调用总是返回-1,并且检索到的结构的计数器值跳到非常大的数字 我用于检索计数器的代码如下所示: struct串行计数器结构计数器; int ret=ioctl(端口描述符、TIOCGICOUNT和计数器); 要设置portDescriptor,我将使用类似的代码: intportdescriptor=open(“/dev/ttyUSB

在为USB到RS422转换器模块开发接口应用程序时,我遇到了一个停止播放的问题

我需要检索用于帧、溢出、奇偶校验和中断错误的UART错误计数器。但是对ioctl的调用总是返回-1,并且检索到的结构的计数器值跳到非常大的数字

我用于检索计数器的代码如下所示:

struct串行计数器结构计数器;
int ret=ioctl(端口描述符、TIOCGICOUNT和计数器);
要设置portDescriptor,我将使用类似的代码:

intportdescriptor=open(“/dev/ttyUSB0”,O_RDWR | O|NOCTTY | O|NDELAY);
struct termios新端口设置;
//清除新结构
memset(&new_port_settings,0,sizeof(new_port_settings));
//设置端口设置
新的_port_settings.c_cflag=B57600 | CS8 | CLOCAL | CREAD;
新的\u端口\u设置.c\u oflag=0;
新的\u端口\u设置.c\u lflag=0;
新的_端口_设置。c_cc[VMIN]=0;
新的端口设置。c_cc[VTIME]=0;
int error=tcsetattr(端口描述符、TCSANOW和新端口设置)
有时我们还需要启用流控制或奇偶校验,例如

new_port_settings.c_cflag=new_port_settings.c_cflag | CRTSCTS;
我已经在Ubuntu11.10 32位和SLES11 SP1 64位上尝试了这段代码,这两种版本都使用了FTDI_SIO内核模块


有人知道关于TIOCGICOUNT的使用有什么问题吗?或者我做错了什么吗?

事实上,
ioctl()
返回-1表明它可能从未将
计数器设置为任何值,因此您看到的大数字可能只是在调用之前碰巧出现在内存中的垃圾。在调用
ioctl()
之前,可以尝试将结构归零。在
ioctl()
返回后,您是否检查了
errno
?您好,亚当,您是对的,在ioctl调用之前,结构没有归零,我们看到的是垃圾。errno返回22“无效参数”。您认为这些参数中的哪一个是指的?在本例中,第三个参数是指向应该接受的userland缓冲区的指针。根据文件描述符是否错误,
errno
将是EBADF或ENOTTY。它可能是它抱怨的请求(第二个arg)。也许驱动程序不支持它?你能检查一下dmesg并在其他设备上试用一下吗(比如RS232端口而不是USB)?我刚刚遇到了这个问题。我们使用的是cp210x usb->串行芯片组,驱动程序无法处理TIOCGICOUNT ioctl。这是一个令人沮丧的问题,因为我每天花1/2的时间向我们的项目添加代码来查询统计数据(查找BRK),但由于设备不支持此ioctl而停止了。