2016-08-04 37 views
1

私はUEIPAC 600 1-Gボックスにインストールされているvxworksを使用しています。シリアルポートからデータを読み込もうとしています。これは私のコードです。vxworksシリアルポート読み取りタイムアウト

void read_serial(int n){ 
/* store number of bytes read = int n*/ 
int num=0; 
/* hold the file descriptor */ 
int fd = 0; 
/* dev name from iosDevShow output */ 
char dev_name[] = "/tyCo/0"; 
/* buffer to receive read */ 
char re[n]; 
/* length of string to read */ 
int re_len = n; 
/* open the device for reading. */ 
fd = open("/tyCo/0", O_RDWR, 0); 
num = read(fd, re, re_len); /* read */ 
close(fd); /* close */ 
printf("number of bytes read %d\n",num); /* display bytes read*/ 
printf("displaying the bytes read: %s\n",re); 
} 

私は、キーボード入力を打つまで、私はそれだけの時間をそれを実行するので、

number of bytes read 1 
displaying the bytes read: 
Pp 

私が正しくシリアルポートから読み取るために、この問題を解決するにはどうすればよいのように出力します。

+1

'fd = open(...) 'によってどのような値が返されましたか?あなたは*これをチェックして、盲目的に実行してはいけません。私は 'char dev_name [] ="/tyCo/0 "のポイントが何であるか不思議です。あなたがそれを開くのに使っていないときにも。そして、 'print'に送る前に' re'の終わりに 'nul'ターミネーターを置いていますか?ヒントのための –

答えて

1

シリアルポートを正常に開いたかどうかはチェックしないでください。

fd = open("/tyCo/0", O_RDWR, 0); 
if (fd < 0) { 
    /* handle the error */ 
} 

シリアルポートからの読み取りが成功したかどうかを確認しません。

num = read(fd, re, re_len); /* read */ 
if (num < 0) { 
    /* handle the error */ 
} 

あなたはおそらく正しくない印刷可能な文字列になり、シリアルポートからの読み込みを想定しています。シリアルポートから読み取ったデータをプリントアウトするときは、抽出されたバイト値を確認できるように、おそらくデータを16進数でダンプする必要があります。

for (int i = 0; i < num; ++i) { 
    printf(" %02x", re[i]); 
} 
putchar('\n'); 
+0

thx –

関連する問題