top of page

Arduino のUART送信バッファのサイズ

Arduino UNOの送信バッファのサイズはいくつでしょうか。

検索するとほとんどのサイトで64バイトと書いてあります。これは正しいのでしょうか。



送信バッファの数を確かめるために、プログラムを書いて調べてみました。


void setup() {
  Serial.begin(9600);
  int count = 0;
  count = Serial.availableForWrite();
  Serial.print(count);
}
void loop(){
}


Serial.availableForWrite() は送信バッファに書き込めるバイト数を返す関数です。

実行結果は 63 でした。残りの1バイトはどこに行ったのでしょうか。



HardwareSerial.cpp の中にある availableForWrite 関数の中身を読むと、最後の行で -1 されて戻り値を返しています。

なぜなのでしょうか。

int HardwareSerial::availableForWrite(void)
{
  tx_buffer_index_t head;
  tx_buffer_index_t tail;

  TX_BUFFER_ATOMIC {
    head = _tx_buffer_head;
    tail = _tx_buffer_tail;
  }
  if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail;
  return tail - head - 1;
}


「Serial.availableForWrite() 64 」でGoogle検索すると、Arduinoのフォーラムに該当するポストがありました。

それによると、送信バッファにはリングバッファ(別名「循環バッファ」)というアルゴリズムが使われており、

その仕組み上、1バイトは空けておかなければならず、利用できるのはその1バイトを差し引いた63バイトだ、ということでした。



























特集記事
最新記事
アーカイブ
タグから検索
ソーシャルメディア
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page