2009-09-23 52 views
0

我有一个Tcl/Expect程序读写数据到串口。 我做了所有我开发和测试的Fedora 7的机器上,但现在我想在Ubuntu 8.10运行相同的代码,我发现了以下错误:Tcl串行端口fconfigure可移植性问题

spawn: returns {0} 
bad option "-mode": should be one of -blocking, -buffering, -buffersize, -encoding, -eofchar, or -translation 
    while executing 
"fconfigure $port -mode 19200,n,8,1" 
    (file "./scan1.tcl" line 31) 

我没有问题在Fedora中,只有Ubuntu。它似乎不喜欢fconfigure的串行选项,但我不知道这样做的另一种方式。 两台机器都有Tcl 8.4。

下面是相关的代码片段:

#Open serial port 
set portname "/dev/ttyS0" 
spawn -open [set port [open $portname "r+"]];#This is a beast! 
fconfigure $port -mode 19200,n,8,1 

有谁知道什么是错?谢谢你的帮助!

+0

找到答案,但你的意见帮助 事实证明,我是对系统实际上没有一个串行端口... :) – bradreaves 2009-09-30 19:48:04

回答

1

一些研究似乎表明,当[fconfigure]命令不能将有问题的通道识别为真正的串行端口时,它不会提供-mode开关(尽管我没有看到文档)。最终,这个决定似乎依赖于一个“isatty()”系统调用,显然它没有将该频道报告为TTY。更多信息可以在这里找到:

http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/ea0e772c59fa1e52/949c04fe4cebc2a3?q=fconfigure+mode+group:comp.lang.tcl#949c04fe4cebc2a3

根据以上线索,这可能是由于到错误的Tcl。

更新...我看到串行配置选项(包括模式)记录在[打开]命令。在那里,它提到可以使用[fconfigure]查询或设置特定于串行端口的附加选项。 [fconfigure]文档应该更新以反映这一事实。

底线,TCL不认为你的端口真的是Ubuntu的下一个串行端口,虽然我不知道为什么......