[Armadillo:07492] Re: armadillo-420 UARTドライバの送信バッファサイズについて
Takenoshita Koyo
email@hidden
2011年 8月 29日 (月) 22:23:29 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
よろしければ、ご参照ください。
(2011年08月29日 13:13), 内山光公 wrote:
> 内山と申します。
>
> 初めてアルマジロ(420)を使ったシステム(装置)を作ろうとしています。
>
> 420のUART3経由で、相手装置とフロー制御をONにして接続し通信(921.6kbps)を
> する予定です。(linux-2.6.26-at14を使用)
>
> アプリケーションソフトからはデータ送信を続けている状態で、万一相手装置から
> の
> フロー制御により送信できない状態になった場合、UARTドライバにはどのぐらいの
> 送信バッファを持っており、送信データ貯めておくことができるのでしょうか?
>
> 過去のメーリングリストを探したところ受信バッファとして64Kbという記述を
> 見つけましたが送信バッファについては見つかりません。
> またmake menuconfig でカーネルで設定変更ができないか調べてみましたが
> それらしいところは見つからずわかりませんでした。
>
> お尋ねしたいこと。
> 1)UARTドライバにはどのぐらいの送信バッファを持っているのでしょうか?
> 2)またそのサイズを変更することはできますか?
> 3)サイズが変更できる場合、どのようにして変更するのでしょうか?
>
> よろしくお願いいたします。
>
>
>
>
>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
--
Koyo Takenoshita
armadillo メーリングリストの案内