[왕초보 임베디드-C 공부 일기] 8. 반복문(1) - for

1. 개념과 구조

   1) 정의
      for 구문은 조건식이 참(True)인 동안 특정 코드 블록을 반복해서 실행하는 제어 흐름 구문(Control Flow Statement)이다.
      반복 횟수가 명확하게 정해져 있을 때 주로 사용한다. 
   2) 구조 해부
      for 문은 소괄호 안에 반복을 통제하는 3가지 요소를 갖추고 있다. 
    for(초기식 ; 조건식 ; 증감식) { 실행할 코드 }
   -초기식 : 반복문에 진입할 때 단 한 번만 실행된다. 카운터 변수를 설정한다. ( int i = 0 )
   -조건식 : 매 반복마다 코드를 실행하기 직전에 검사한다. 이 결과가 참이면 중괄호 안으로 진입하고, 거짓이면 반복문을 완전히 탈출한다. ( i < 10 )
   -증감식 : 중괄호 안의 코드가 끝까지 실행된 후, 다시 조건식으로 돌아가기 직전에 실행된다.  ( i++ )

2. 다양한 형태와 활용 예시


   1) 표준 형태
      가장 기본적이고 많이 쓰이는 형태이다. 배열(Array)과 함께 자주 쓰인다. 

사용 예시⬇️ : 8개의 센서 값을 한 번에 읽어와서 배열에 저장해야 할 때
   int sensor_values[8]
// i는 0부터 7까지 1씩 증가하며 총 8번 반복
   for(int i = 0 ; i < 8 ; i++){
      sensor_values[i] = read_ultrasonic_sensor(i);
}

   2)무한 반복
      : 초기식, 조건식, 증감식을 모두 비워두면( ; ; )조건이 영원히 참인 것으로 간주한다. 

사용 예시⬇️ : 운영체제가 올라간 위성 시스템에서, 특정 작업이 종료되지 않고 영원히 진행되어야 할 때
// UART 통신 수신 프로세스(통신이 끊어지면 안되므로 무한 반복 프로세스 사용)
void UART_Recieve_task() {
   for (; ;){
       if(UART_Data_Ready()){
         process_packet();
      }
      //작업 대기 함수
   }
}

   3) 다중 변수 제어
      : 초기식과 증감식에 쉼표를 써서 두 개 이상의 변수를 동시에 조종할 수 있다. 

사용 예시⬇️ : 지상국으로 보낼 데이터 배열의 순서를 거꾸로 뒤집어야 할 때
char packet[10] = ""ROVER_DATA";
char temp;
// i는 앞에서부터 , j는 뒤에서부터 중앙을 향해 이동
for (int i=0, j=9 ; i < j ; i++, j--){
   //자리 바꾸기(swap)
   temp = packet[i];
   packet[i] = packet[j]
   packet[j] = temp;
}

   4) 본문 생략
      : 중괄호 안에 아무 내용도 쓰지 않고 세미콜론으로 닫는 형태이다.

사용 예시⬇️ : 하드웨어가 초기화될 때까지 아주 짧은 시간을 강제로 기다려야 할 때
for(volatile int delay = 0; delay < 10000; delay++);