Armadilloフォーラム

UART送受信でのエラー処理について

ishikawa

2014年4月24日 10時06分

ishikawaです。

お世話になっています。

現在「Armadillo440」でUART処理(同期)を作成しています。

通信はできているのですが、エラー処理がよくわからないため、相手先に異常があった場合に「write」や「get」で処理が固まってしまいます。

「オープンできない場合はエラー」「送受信できない場合はエラー」「?msの間、送受信できない場合はエラー」などのエラー処理ができて、処理が固まらないようにするにはどうすればよいでしょうか?

初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

コメント

at_yashi

2014年4月24日 15時34分

Linux は、UART だけ使いたいのに、tty のレイヤーが被さっているので若干面
倒ですね。

1. オープンできない場合はエラー

open() が失敗することって、ありました? もしopen()
失敗するのであれば、戻り値を確認するだけで ok です。

ret = open(...);
if (ret < 0) {
  :
  :
}

とか

2. 送受信できない場合はエラー

Unix系の OS では、read()write() する前に、
実際に読めるか、書けるか調べるのが定石のようです。select() を使ってみてください。

http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…

3. ?msの間、送受信できない場合はエラー

select() の timeout を使うと可能です。

こちら↓も参考になるかも。
http://armadillo.atmark-techno.com/faq/serial-programming

ishikawa

2014年4月25日 14時26分

ishikawaです。

select()でタイムアウト監視できるようになりました。
ありがとうございました。

> Linux は、UART だけ使いたいのに、tty のレイヤーが被さっているので若干面
> 倒ですね。
>
> 1. オープンできない場合はエラー
>
> open() が失敗することって、ありました? もしopen()
> 失敗するのであれば、戻り値を確認するだけで ok です。
>
>

> ret = open(...);
> if (ret < 0) {
>   :
>   :
> }
> 

> とか
>
> 2. 送受信できない場合はエラー
>
> Unix系の OS では、read()write() する前に、
> 実際に読めるか、書けるか調べるのが定石のようです。select() を使ってみてください。
>
> http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…
>
> 3. ?msの間、送受信できない場合はエラー
>
> select() の timeout を使うと可能です。
>
> こちら↓も参考になるかも。
> http://armadillo.atmark-techno.com/faq/serial-programming
>