사용자 도구

사이트 도구


commands:reference:fifo

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
commands:reference:fifo [2026/09/08 00:53] – 바깥 편집 127.0.0.1commands:reference:fifo [2026/09/14 11:04] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 ====== FIFO() ====== ====== FIFO() ======
  
-''FIFO()''는 먼저 저장한 16비트 데이터를 먼저 출력합니다.+''FIFO()''는 저장한 순서대로 16비트 데이터를 꺼냅니다.
  
 {{:commands:reference:fifo.svg?900|FIFO 명령어 동작 흐름}} {{:commands:reference:fifo.svg?900|FIFO 명령어 동작 흐름}}
줄 10: 줄 10:
  
 ^ 명령어 ^ 인수 ^ 반환값 ^ 동작 ^ ^ 명령어 ^ 인수 ^ 반환값 ^ 동작 ^
-| ''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비트 데이터를 먼저 출력합니다. |+| ''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''를 두 번 보내 10과 20을 저장하고, ''o''를 두 번 보내면 10과 20이 저장된 순서대로 출력됩니다. ''r''은 버퍼를 비웁니다.
  
 <code cpp> <code cpp>
-uint16_t fifoValue 0+uint16_t nextValue 10
-uint16_t filoValue = 0; +uint16_t removedValue = 0;
-uint16_t sequence = 0;+
  
 void setup() { void setup() {
   Serial.begin(115200);   Serial.begin(115200);
 +  Serial.println(F("i: store, o: take, r: reset"));
 } }
  
 void loop() { void loop() {
-  const bool store = Iup(0, IdigitalRead(0, 5));  // 입력을 여러 번 연속으로 읽고, 모든 값이 같을 때만 상태를 갱신합니다. HIGH와 LOW가 섞이면 이전 안정 상태를 유지합니다. / 입력이 OFF에서 ON으로 바뀌는 순간에만 true를 반환합니다+  if (!Serial.available()) return; 
-  const bool release Iup(1, IdigitalRead(1, 5));  // 입력을 여러 번 연속으로 읽고, 모든 값이 같을 때만 상태를 갱신합니다. HIGH와 LOW가 섞이면 이전 안정 상태를 유지합니다. / 입력이 OFF에서 ON으로 바뀌는 순간에만 true를 반환합니다. +  const char key = Serial.read(); 
-  const bool reset = IdigitalRead(2, 5);  // 입력을 여러 번 연속으로 읽고, 모든 값이 같을 때만 상태를 갱신합니다. HIGH와 LOW가 섞이면 이전 안정 상태를 유지합니다.+  const bool store key == 'i'; 
 +  const bool take = key == 'o'; 
 +  const bool reset = key == 'r'; 
 +  if (!store && !take && !resetreturn;
  
-  if (store) ++sequence; +  const bool ok = FIFO(0, store, takenextValueremovedValue4, reset);  // IN 또는 OUT이 상승한 순간에 값을 저장하거나 꺼냅니다. 
-  const bool fifoOk = FIFO(0, store, releasesequencefifoValue16, reset);  // 먼저 저장한 16비트 데이터를 먼저 출력합니다. +  FIFO(0, falsefalse0removedValue4);  // 다음 시리얼 입력서도 상승 순간을 인식하도록 IN·OUT을 OFF로 돌립니다. 
-  const bool filoOk = FILO(0, storereleasesequencefiloValue16, reset);  // 나중에 저장한 16비트 데이터를 먼저 출력합니다. + 
-  if (release && fifoOk && filoOk) { +  if (reset) { 
-    Serial.print(F("oldest=")); Serial.print(fifoValue); +    nextValue = 10; 
-    Serial.print(F(", newest=")); Serial.println(filoValue);+    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);
   }   }
 } }
 </code> </code>
 +
 +버퍼가 가득 찬 상태의 저장 또는 빈 버퍼의 꺼내기는 실패합니다.
  
 ===== 주의사항 ===== ===== 주의사항 =====
commands/reference/fifo.1788796396.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki