[왕초보 임베디드-C 공부 일기] 8. 반복문(1) - for
1. 개념과 구조
1) 정의
for 구문은 조건식이 참(True)인 동안 특정 코드 블록을 반복해서 실행하는 제어 흐름 구문(Control Flow Statement)이다.
반복 횟수가 명확하게 정해져 있을 때 주로 사용한다.
2) 구조 해부
for 문은 소괄호 안에 반복을 통제하는 3가지 요소를 갖추고 있다.
for 구문은 조건식이 참(True)인 동안 특정 코드 블록을 반복해서 실행하는 제어 흐름 구문(Control Flow Statement)이다.
반복 횟수가 명확하게 정해져 있을 때 주로 사용한다.
2) 구조 해부
for 문은 소괄호 안에 반복을 통제하는 3가지 요소를 갖추고 있다.
for(초기식 ; 조건식 ; 증감식) { 실행할 코드 } -초기식 : 반복문에 진입할 때 단 한 번만 실행된다. 카운터 변수를 설정한다. ( int i = 0 )
-조건식 : 매 반복마다 코드를 실행하기 직전에 검사한다. 이 결과가 참이면 중괄호 안으로 진입하고, 거짓이면 반복문을 완전히 탈출한다. ( i < 10 )
-증감식 : 중괄호 안의 코드가 끝까지 실행된 후, 다시 조건식으로 돌아가기 직전에 실행된다. ( i++ )
-조건식 : 매 반복마다 코드를 실행하기 직전에 검사한다. 이 결과가 참이면 중괄호 안으로 진입하고, 거짓이면 반복문을 완전히 탈출한다. ( i < 10 )
-증감식 : 중괄호 안의 코드가 끝까지 실행된 후, 다시 조건식으로 돌아가기 직전에 실행된다. ( i++ )
2. 다양한 형태와 활용 예시
1) 표준 형태
가장 기본적이고 많이 쓰이는 형태이다. 배열(Array)과 함께 자주 쓰인다.
사용 예시⬇️ : 8개의 센서 값을 한 번에 읽어와서 배열에 저장해야 할 때
가장 기본적이고 많이 쓰이는 형태이다. 배열(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++);