그라운드 임베디드 유튜브 구독

노트 / C 언어

제어문: 펌웨어가 무한 루프인 이유

if, switch, for, while로 흐름을 만들고, 임베디드 프로그램이 끝나지 않는 루프로 짜이는 이유를 봅니다.

GROUND EMBEDDED · 정리 노트C 언어 03제어문 1int main(void) { 2 init_clock(); 3 init_gpio(); 4 while (1) {

PC 프로그램은 일을 마치면 종료합니다. MCU에는 돌아갈 운영체제가 없으므로 main은 끝나면 안 됩니다. 그래서 거의 모든 펌웨어가 초기화 뒤 무한 루프로 이루어집니다.

int main(void) {
    init_clock();
    init_gpio();
    while (1) {
        read_sensor();
        update_control();
        send_status();
    }
}

제어문 고르기

  • if / else: 조건이 두세 개일 때
  • switch: 상태나 명령 번호처럼 값 하나로 갈라질 때. break를 빠뜨리면 다음 case까지 실행됩니다.
  • for: 횟수가 정해진 반복
  • while: 조건이 바뀔 때까지 기다리는 반복. 플래그를 기다리는 루프에는 반드시 타임아웃을 둡니다.

기다리는 루프의 함정

while (!(USART->SR & TXE));처럼 하드웨어 플래그를 기다리는 코드는 하드웨어가 응답하지 않으면 영원히 멈춥니다. 카운터나 타이머로 빠져나갈 길을 만들어 두는 것이 현업의 기본입니다.