Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
Serial.available()/HardwareSerial::available()

Serial.available()/HardwareSerial::available()

概要

Serial.available()/HardwareSerial::available()は、シリアル通信の受信バッファ内の有効な文字数を返します。リファレンスはこちら

ソースコード

HardwareSerial::available()は、hardware/arduino/cores/arduino/HardwareSerial.cppに定義されています。以下に全ソースコードを示します。

int HardwareSerial::available(void)
{
  return (unsigned int)(SERIAL_BUFFER_SIZE + _rx_buffer->head - _rx_buffer->tail) % SERIAL_BUFFER_SIZE;
}

入力はありません。戻り値はintです。

int HardwareSerial::available(void)
{

バッファ内の有効な文字数を計算して返却します。

  return (unsigned int)(SERIAL_BUFFER_SIZE + _rx_buffer->head - _rx_buffer->tail) % SERIAL_BUFFER_SIZE;
}

tail < head の場合、head - tail がバッファ内の有効な文字数です。これにSERIAL_BUFFER_SIZEを足すと、SERIAL_BUFFER_SIZE分文字数が大きくなりますが、SEIRIAL_BUFFER_SIZEで割った余りを求めることで、本来必要なhead-tailに戻ります。

tail > head の場合、head + SERIAL_BUFFER_SIZE - tail がバッファ内の有効な文字数です。

わかりづらい場合は、SERIAL_BUFFER_SIZEを仮に100とかにして考えてみると比較的簡単だと思います。

バージョン

Arduino 1.0.5



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2012 garretlab all rights reserved.
inserted by FC2 system