ユーザ用ツール

サイト用ツール


ja-jp_commands:reference:fifo

FIFO()

FIFO()は先に保存した16ビットデータから順に出力します。

FIFO コマンドの動作フロー

bool FIFO(uint8_t fifo_id, bool IN, bool OUT, uint16_t input, uint16_t &output, uint8_t size, bool reset = false)

コマンド

コマンド 引数 戻り値 動作
FIFO(fifo_id, IN, OUT, input, output, size, reset) uint8_t fifo_id — バッファ識別番号
bool IN — 立ち上がりエッジで入力を保存
bool OUT — 立ち上がりエッジで出力
uint16_t input — 保存するワード
uint16_t &output — 出力値を受け取る参照変数
uint8_t size — バッファサイズ
bool reset = false — バッファの初期化
bool 先に保存した16ビットデータから順に出力します。

使用例

シリアルモニタからiを2回送り、10と20を保存します。oを2回送ると10、20の順に出力されます。rでバッファを空にします。

uint16_t nextValue = 10;
uint16_t removedValue = 0;
 
void setup() {
  Serial.begin(115200);
  Serial.println(F("i: store, o: take, r: reset"));
}
 
void loop() {
  if (!Serial.available()) return;
  const char key = Serial.read();
  const bool store = key == 'i';
  const bool take = key == 'o';
  const bool reset = key == 'r';
  if (!store && !take && !reset) return;
 
  const bool ok = FIFO(0, store, take, nextValue, removedValue, 4, reset);  // INまたはOUTの立ち上がり時に値を保存・取り出します。
  FIFO(0, false, false, 0, removedValue, 4);  // 次の入力でも立ち上がりを検出できるよう、INとOUTをOFFに戻します。
 
  if (reset) {
    nextValue = 10;
    Serial.println(F("buffer cleared"));
  } else if (!ok) {
    Serial.println(F("buffer full or empty"));
  } else if (store) {
    Serial.print(F("stored: "));
    Serial.println(nextValue);
    nextValue += 10;
  } else {
    Serial.print(F("taken: "));
    Serial.println(removedValue);
  }
}

満杯のバッファへの保存、空のバッファからの取り出しは失敗します。

注意事項

INOUTCUCDは立ち上がり時に動作します。各カウンタ・バッファに固有のidを使用し、sizeは必要な範囲で小さく設定してください。

同じカテゴリの内蔵コマンド

ja-jp_commands/reference/fifo.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki