4

/dev/ttyUSB1 からぶら下がっている Arduino があり、115kbaud で通信しています。以下のステートメントは、Pharo がハングする 'next' メソッド呼び出しまで正常に機能します。Arduino は '99' コマンドに応答して、1 文字の $1 をコンピューターに送り返します。ケーブルを引き抜くと、プログラムは続行され、s には本来あるべき文字 $1 が含まれますが、ケーブルを引き抜くまでは含まれません。したがって、'next' は 1 バイトを読み取っただけでは返されないというのが私の印象です (確かに、1 バイトを読み取った後に返されるべきだと言うものは何もありません)。Pharo でストリームから 1 バイトを読み取るにはどうすればよいですか? または、読み取り/書き込みバイトストリームを開くにはどうすればよいですか? これを行うと思われるソースクラスには何も見つかりませんでした。ストリームをASCII、バイナリ、テキストに設定しようとしましたが、動作は変わりません。

s := FileStream oldFileNamed: '/dev/ttyUSB1'.
s readWrite.
s nextPutAll: '99'. "'99' is successfully received by Arduino"
s next.             "hangs here"
s close.

ご協力いただきありがとうございます。

4

2 に答える 2

1

これらの問題をすべて解決した Arduino パッケージがあります。このレポをご覧ください。

http://ss3.gemstone.com/ss/Arduino.html

于 2013-10-02T07:43:29.853 に答える
1

FileStream のクラス側を見てください。ここで、Filestream に oldFileNamed: を要求すると、MultiByteStream (concreteStream) を取得していることに気付くでしょう。関連する TextConverter またはバッファーが存在する可能性があります。MultiByteStream の open:forWrite: が呼び出され、それが super を呼び出します。StandardFileStream>open:forWrite: enableReadBuffering を呼び出します。

おそらく、ストリームで disableReadBuffering を呼び出したいでしょう。

于 2013-10-02T07:12:15.497 に答える