新开发者,Linux,C ++,USB - 串行适配器。
我已经完成了一个可以写入USB端口的程序。但是,如果我更改了我的代码,make,以root身份重新登录,并尝试再次写入该端口,则不会通过。它只有在我再次尝试发送数据之前从计算机上拔下USB电缆并重新安装时才能工作。如果您需要更多信息,请告诉我们。
我在两台不同的计算机上,无法复制和粘贴,但这是我正在做的事情的要点。
int fd = 0;
int iOut = 0;
char *ComPort = "/dev/ttyUSB0";
fd=open(ComPort, O_CREAT | O_RDWR | O_NOCTTY | O_NDELAY);
if(fd == -1)
cout << "unable to open" << endl;
// blah blah getting data ready to be sent
// create a block of 50 hex characters to be sent : DB
iOut = write(fd, $DB, sizeof(DB));
// blah blah error checking
close(fd);
return(0);
答案 0 :(得分:2)
@Surt @alexfarber我和同事就此进行了一次谈话,我们得出结论,这很可能是我的显示器或usb到串口适配器的硬件问题。我相信这种适用于这种特殊适配器的唯一方法是关闭它的电源并将其重新打开,以反映手动移除和重新安装时的效果。我不相信这是可能的,但我会开始另一个线程与我可能遇到的任何事情。我感谢你们花时间来帮助解决这个问题,我确实学到了许多其他事情,我事先并不知道,所以这仍然非常有帮助。再次感谢你。
答案 1 :(得分:1)
看看这里的第3.2章http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html 首先添加一些错误检查,以便您可以看到失败的位置。 perror线将有助于那里。
if (fd <0) {perror(ComPort ); exit(-1); } // note the exit which your code doesn't have.
现在应该告诉你更多信息并添加
if (errno) {perror(ComPort ); exit(-1); }
在所有操作之后,读取,写入和设置fd上的东西。
现在将3.2的newtio部分添加到您的程序中,以防一些握手失败。您必须更改它以使其符合显示。
您的计划的最终版本可能更像3.3。