제어문: 펌웨어가 무한 루프인 이유
if, switch, for, while로 흐름을 만들고, 임베디드 프로그램이 끝나지 않는 루프로 짜이는 이유를 봅니다.
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));처럼 하드웨어 플래그를 기다리는 코드는 하드웨어가 응답하지 않으면 영원히 멈춥니다. 카운터나 타이머로 빠져나갈 길을 만들어 두는 것이 현업의 기본입니다.