사용자 도구

사이트 도구


commands:reference:fifo

차이

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

차이 보기로 링크

다음 판
이전 판
commands:reference:fifo [2026/09/01 20:04] – 만듦 - 바깥 편집 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 fifoOut+uint16_t nextValue = 10
-FIFO(0, digitalRead(0)digitalRead(1)D[0]fifoOut, 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, removedValue4);  // 다음 시리얼 입력에서도 상승 순간을 인식하도록 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); 
 +  } 
 +}
 </code> </code>
 +
 +버퍼가 가득 찬 상태의 저장 또는 빈 버퍼의 꺼내기는 실패합니다.
  
 ===== 주의사항 ===== ===== 주의사항 =====
  
 ''IN'', ''OUT'', ''CU'', ''CD''는 상승 순간에 동작합니다. 각 카운터·버퍼에 고유한 ''id''를 사용하고 ''size''는 필요한 범위로 작게 설정하십시오. ''IN'', ''OUT'', ''CU'', ''CD''는 상승 순간에 동작합니다. 각 카운터·버퍼에 고유한 ''id''를 사용하고 ''size''는 필요한 범위로 작게 설정하십시오.
 +
 +===== 같은 카테고리의 내장 명령어 =====
 +
 +  * [[commands:reference:filo|FILO() 상세 설명 보기]]
  
 [[commands:builtin|← 내장 명령어 리스트]] [[commands:builtin|← 내장 명령어 리스트]]
  
commands/reference/fifo.1788260661.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki