[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 メーリングリストの案内