[Armadillo:07494] Re:armadillo-420 UARTドライバの送信バッファサイズについて

内山光公 email@hidden
2011年 8月 30日 (火) 11:23:56 JST


竹之下様

 内山です。
 回答ありがとうございました。

 やはり基本はデータを送信する側でコントロールすべきなのですね。
 検討してみます。


>竹之下です。
>
>> お尋ねしたいこと。
>> 1)UARTドライバにはどのぐらいの送信バッファを持っているのでしょうか?
>Linuxでは、シリアルインターフェースを介したデータの送受信は、
>シリアルドライバの上にttyというレイヤが介在して行うので、
>少し複雑なのですが、4kBと考えておけば良いのではないかと思います。
>
>シリアルインターフェースに紐づいたttyに対して、write()システムコールが
>実行されると、書き込みデータは、
>
>シリアルコア
>linux-2.6.26-at/drivers/serial/serial_core.c
>
>にある、circ(circular buffer, 循環バッファ)に追加されていきます。
>このcircのサイズがUART_XMIT_SIZE == PAGE_SIZE == 4kB となっています。
>※circに空きがなければ、write()の戻り値が書き込みデータのサイズ以下
> となります。
>
>i.MX25用のシリアルドライバ
>linux-2.6.26-at/drivers/serial/mxc_uart.c
>
>では、送信バッファ[*1]エンプティ割り込みが入ったタイミングで
>circをチェックし、circにデータがあればそれを読み出して、
>送信します。
>
>*1: ここでの送信バッファは、UARTコントローラ内のハードウェア的な
>    バッファのことです。i.MX25の場合、ハードウェア的な送信バッファ
>    は32Byteです。
>
>> 2)またそのサイズを変更することはできますか?
>> 3)サイズが変更できる場合、どのようにして変更するのでしょうか?
>UART_XMIT_SIZE は define されている値ですので、変更することは
>おすすめできません。
>
>
>根本的には、
>>  アプリケーションソフトからはデータ送信を続けている状態
>を無くすのが良いと思います。
>
>Linuxでは、select系のシステムコールを使用することで、
>ファイルディスクリプタに対して書き込みできるかどうかを調べる
>ことができます。書き込みできない場合には、アプリケーション側で
>書き込みデータをバッファリングするなどして、書き込み可能に
>なるまで書き込みを止めます。
>
>selectを使ったシリアルインターフェースの扱いについては、
>「Armadillo 実践開発ガイド 第2部」で紹介しています。
>http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja->2.1.0
/ch06.html#sec_more_effective_input_output_way
>
>よろしければ、ご参照ください。
>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
>
>
>--
>Koyo Takenoshita






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