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

노트 / 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();
    }
}
리셋초기화클럭, GPIO, 주변장치while (1)센서 읽기 → 제어 → 전송다시 처음으로
펌웨어의 뼈대. 초기화는 한 번, 그 뒤는 끝없이 반복합니다.

제어문 고르기

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

기다리는 루프의 함정

플래그 기다림올라왔나?아니면 시간 확인타임아웃오류 처리
하드웨어 플래그를 기다릴 때는 빠져나올 길을 둡니다.

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

영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSEC 문법을 실제 펌웨어 코드로 써 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →