2002年11月18日

[obu:02044] Re: シリアルからのデータ通信

既に解決していましたら、ご容赦ください。
「cat /dev/ttyS1」を行う、ということですが、
「/dev/ttyS1のReadについては、
一度/dev/ttyS1をオープン&クローズしてから、
再度オープンしたら上手く行く」という意味だったと理解しております。

※ よく分かりませんが、
起動時にシリアルデバイスの初期化が行われていないか、
失敗しているという噂もあります。

私の場合は、業務用途でプロトコルコンバータ的なものを
構築した事がありますが、
1) ディスクレス運用
(無論クロスコンパイルにて製作)
2) setserialは無い(入れられない)
3) シリアル通信プロセスはデーモンとして動作
4) 通信は、9600bps & カノニカル
という環境ですので、そのまま当てはまるかは分かりませんが・・・。

(終わり)

Daisuke Shimada wrote:

> 皆様、アドバイスありがとうございます。
>
> 島田です。
>
> 色々、試しては見ましたが、どの例を見ても、他のRedHat7.3のディスクトップ
> では動作するのですが、OBSSに持ってくると動きません。
>
>
>>>一つ質問なのですが、setserialで以下のように、ttyS1の情報を引き出したら、
>>>ボーレートの数字が、変な値になっていました。これも、Intel系の構造と違う
>>>ので、このようになっているのか、もしくは、ボーレート4800で通信するに
>>>は、これではいけないのか、どちらでしょうか
>>>
>>どうせCでプログラムするのですから、setserialの動作が正しいかどうか
>>すら微妙なのであれば、確かめるのは後まわしにしませんか?(^^;)
>>
> 確かにそうですよね。
>
>
>>私なら簡単なテストプログラムでまず出力されるか確認します。
>>ルーチンの戻り値など観察すればいろんな情報が取れますしね。
>>そのあと入力を試します。
>>
> 以下の簡単なプログラムで確認しております。RedHatの入ったディスクトップで
> はデータが取れましたが、OBSSでは取れません。
>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <termio.h>
> #include <string.h>
> #include <stdio.h>
> #include <stdlib.h>
>
> static int ch;
>
> int open_serial(void){
>
> struct termio t;
>
> printf("Open GPS Device\n");
> if((ch=open("/dev/ttyS0",O_RDWR))<0){
> perror("* Can't open RS-232C-0 port\n");
> return(-1);
> }
> printf("success opened.\n");
> bzero( &t, sizeof(t) );
> t.c_cflag = B4800 | CS8 | CLOCAL | CREAD ;
> t.c_iflag = IGNPAR ;
> t.c_oflag = 0 ;
> t.c_lflag = ICANON ;
>
> if(ioctl(ch,TCSETA,&t)<0){
> perror("* ioctl error\n");
> return(-2);
> }
>
> printf("init[%d] : done.\n",ch);
> return 0;
> }
>
> unsigned char _get_gps_char(int ch)
> {
> unsigned char c ;
> if(read(ch,&c,1)==-1){
> printf("Error read\n");
> }
> //printf("%c",c);
> return c;
> }
>
> int main(void){
> int i;
> unsigned char c;
>
> if(open_serial()<0)
> printf("Open Error\n");
>
> for( i = 0 ; i < 1000 ; i ++ ){
> c = _get_gps_char(ch);
> printf("%c",c);
> }
> }
>
> デバイスのオープン方法に問題があるのでしょうか?
>
>
>>(でもRedHat7.2(AT機)では成功してるんですよね?うーむ・・)
>>
> 私のほうでも、「cat /dev/ttyS0」のように、シリアル通信すると、データが飛
> び込んできました。垂れ流しで。
>
> 度々で、申し訳ありませんが、よろしくお願いします。
>
>
>
>
>


投稿者 xml-rpc : 2002年11月18日 19:11
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/8043
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。