Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Macos 串口挂起_Macos_Unix_Serial Port_Posix_Ftdi - Fatal编程技术网

Macos 串口挂起

Macos 串口挂起,macos,unix,serial-port,posix,ftdi,Macos,Unix,Serial Port,Posix,Ftdi,我有一个usb到串行FTDI适配器连接到我的mac。我可以使用以下命令: screen /dev/tty.usbserial-A601L9OC root# echo 'a' > /dev/tty.usbserial-A601L9OC 这将为端口打开一个串行终端,一切正常。但当我尝试通过命令向串行端口发送字符时: screen /dev/tty.usbserial-A601L9OC root# echo 'a' > /dev/tty.usbserial-A601L9OC 命

我有一个usb到串行FTDI适配器连接到我的mac。我可以使用以下命令:

screen /dev/tty.usbserial-A601L9OC
root# echo 'a' > /dev/tty.usbserial-A601L9OC 
这将为端口打开一个串行终端,一切正常。但当我尝试通过命令向串行端口发送字符时:

screen /dev/tty.usbserial-A601L9OC
root# echo 'a' > /dev/tty.usbserial-A601L9OC 
命令挂起,并且从未发送任何内容。当我在c程序中尝试连接到它时,也会发生类似的事情。程序在尝试打开串行端口时挂起:

int fd = open("/dev/tty.usbserial-A601L9OC", O_RDWR | O_NOCTTY | O_SYNC);
当我在端口上运行stty时,它会打印:

root# stty -f  /dev/tty.usbserial-A601L9OC
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb
这看起来是正确的。有人知道为什么这些命令在连接到串行端口时挂起并且从不发送,而屏幕工作正常吗?任何帮助都将不胜感激

更新:从stty获取信息的结果

bash-3.2# stty -a -f /dev/tty.usbserial-A601L9OC
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
-echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
-nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
-ignbrk -brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
bash-3.2#stty-a-f/dev/tty.usbserial-A601L9OC
速度9600波特;0行;0列;
lflags:-icanon-isig-iexten-echo-echo-echok-echoke-echonl
-echoctl-echoprt-altwerase-noflsh-tostop-flusho-pendin
-nokerninfo-extproc
iflags:-istrip-icrnl-inlcr-igncr-ixon-ixoff-ixany-imaxbel-iutf8
-ignbrk-brkint-inpck-ignpar-parmrk
标签:-opost-onlcr-oxtabs-onocr-onlret
cflags:cread cs8-parenb-parodd hupcl-clocal-cstopb-crtscts-dsrflow
-dtrflow-mdmbuf
cchars:丢弃=^O;dsusp=^Y;eof=^D;eol=;
eol2=;擦除=^?;intr=^C;杀死你;lnext=^V;
最小值=1;退出=^\;重印=^R;开始=^Q;状态=^T;
停止=^S;susp=^Z;时间=0;werase=^W;

改用设备
/dev/cu.usbserial-A601L9OC
,并将速度设置为9600波特。下面是一个例子:


使用O_NONBLOCK,否则打开等待载波检测。

“挂起”似乎是您过度使用的最喜欢的词。“程序挂起试图打开串行端口”-如果准确,可能表明严重的内核问题;内核永远不应该挂起。你很有可能没有正确描述问题。你怎么确定“什么也没送出去吗?”?这个USB串行链接的一端是你的Mac;另一端是什么?另一端连接到逻辑分析仪,我在那里验证了tx线路上没有状态变化。问题是一个if软件。为了澄清,我用“挂起”一词来描述正在执行但从未返回的行为或命令。请尝试
stty-f/dev/tty.usbserial-A601L9OC clocal
?如果没有帮助,请在
屏幕中打开终端之前和期间显示
stty-a-f/dev/tty.usbserial-A601L9OC
的输出。I clocal命令似乎没有修复任何问题。在屏幕上运行stty-a会产生一条resorce bussy消息,然后运行comand会大叫:
bash-3.2#stty-a-f/dev/tty.usbserial-A601L9OC速度9600波特;0行;0列之后是设备的所有可用标志的列表,很遗憾,这些标志太长,无法放入注释中。感谢您可能提供的任何帮助。我遇到了类似的问题,编写了一个跨平台应用程序,该应用程序将“挂起”读取Macosx上的端口,但在使用相同代码的Linux机器上不会。此外,如果您尝试再次访问端口,例如使用stty,它将以100%CPU、高I/O运行,直到硬重启!据我所知,没有任何东西可以杀死这个进程(包括sudo kill-9,也没有mac关机,它也会永远挂起)。我也无法通过stty配置阻止它。解决方案(如下)是使用cu而不是tty。讨论了
cu.*
tty.*
谢谢@grebneke,很高兴知道有什么区别,我引用:
技术上的区别是/dev/tty.*设备将等待(或监听)DCD(数据载波检测),例如,有人来电,然后再响应/dev/cu.*设备不会断言DCD,因此它们将始终立即连接(响应或成功)。
感谢这对我的帮助。