2009-09-23 77 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的下一個串行端口,雖然我不知道爲什麼......