[Armadillo:06063] Re: Armadillo-440でシリアル通信のボーレートを変更する方法について

Shin-ya Koga email@hidden
2010年 11月 2日 (火) 17:18:04 JST


サムシングプレシャスの古賀です。

和佐田さん([Armadillo:06062]):
>現在Armadillo-440にAndroidをのせてH8マイコンとシリアル通信を行おうと
>考えています。
> 
>そこでArmadillo-440からH8マイコンに対して送信する際のボーレートを19200bps
>などに変更出来るようにしたいのですが、9600bpsからうまく変更することがで 
>きません。
> 
>下記にシリアル通信の設定を行っているソースを記載いたします。

bzero() の呼び出し方を変えると良いのかも知れません。以下のソース
では、tcgetattr() した後に bzero() を呼び出していますが、それだと、
tcgetattr() で取得した termios 構造体のフィールドのうち、更新しな
いものは、ゼロクリアされてしまいますよね。

> ---------------------------------------------------------------------------------- 
> 
> int fd;
> char snd_buf[5];
> struct termios oldtio, newtio;
> 
> fd = open("/dev/ttymxc1", O_RDWR | O_NOCTTY);
> 
> tcgetattr(fd, &oldtio);
> newtio = oldtio;
> 
> bzero(&newtio, sizeof(newtio));
…

上では、tcgetattr() で oldtio に取得した内容を newtio にコピーした
後、newtio の内容を bzero() でゼロクリアしていますよね。つまり、
newtio = oldtio; という代入文によるコピーの効果を、捨ててしまって
います。

そうではなく、tcgetattr() を呼び出す前に、*oldtio に対して* bzero()
を呼び出すように変えてみては、いかがでしょうか。

--
古賀信哉 (株)サムシングプレシャス



armadillo メーリングリストの案内