[BitVisor-devel:27] BitVisorのシリアル入出力について
Shougo Matsushita
shougo @ softlab.cs.tsukuba.ac.jp
2011年 10月 21日 (金) 17:57:26 JST
BitVisorメーリングリストの皆さん
筑波大学 ソフトウェア研究室の松下正吾です。
現在、BitVisorでシリアル通信を使って別のPCと入出力を行おうとしています。
シリアル出力はうまくいくのですが、シリアル入力が妙な挙動を示すので報告致します。
BitVisor側はdbgsh経由で実行したBitVisor付属のcore/builtin/bin_serialtest,
PC側はgtktermで通信をさせて実験をしました。
BitVisorのシリアル入出力オプション(TTY_SERIAL)はコンパイル時に有効化しています。
BitVisorからのシリアル出力はちゃんと送れているのですが、BitVisorのシリアル入力がおかしいです。
どういう挙動をするかというと、bin_serialtest内のc = msgsendint (in, 0))で10秒〜20秒ほど固まることがあります。
inはシリアル入力ポートです。
固まるまではリアルタイムにシリアル入力から受けとった文字がdbgshに出力されます。
固まる頻度は、連続して5, 6文字くらい入力すると固まります。
固まった後しばらく待ってから、またgtktermで出力すると
「固まっている間に表示できていなかった文字+gtktermで入力した文字」が画面に表示されます。
データが取り零されていることはないようです。
以上の現象があるため、現在双方向通信にシリアルポートが使えません。
BitVisorのシリアル通信について、何か情報があれば、教えてもらいたいと思っています。
bin_serialtestのソースコードは以下のようになります。
---------------------------------------------------------------------------------
#include <lib_lineinput.h>
#include <lib_printf.h>
#include <lib_syscalls.h>
int
_start (int a1, int a2)
{
int in, out, i, c;
in = msgopen ("serialin");
out = msgopen ("serialout");
if (in < 0 || out < 0) {
printf ("serial open failed\n");
return -1;
}
printf ("serial out test\n");
for (i = 0; i < 20; i++)
msgsendint (out, "@ABCDEFG1234567890\r\n"[i]);
printf ("serial in test\n");
while ((c = msgsendint (in, 0)) != '.')
printf ("%c", c);
return 0;
}
--
Shougo Matsushita <shougo @ softlab.cs.tsukuba.ac.jp>
BitVisor-devel メーリングリストの案内