임베디드의 가장 기본 골격이다.
int main(void) {
init();
for (;;) {
read_sensor();
update_control();
send_status();
}
}
언제 무너지나
한 작업이 오래 걸린다 나머지 전부가 그만큼 밀린다
블로킹 대기가 들어간다 delay·통신 대기 동안 아무것도 못 한다
주기가 서로 다른 일이 섞인다 1ms 짜리와 1s 짜리를 같은 루프에 넣기 어렵다
살리는 방법
delay 를 없앤다 상태 기계로 바꿔 "기다리지 않고 나눈다"
주기별로 나눈다 1ms·10ms·100ms 슬롯을 만들어 시간 기반으로 분할
급한 것은 인터럽트로 루프는 느린 일만 담당한다
이 셋을 적용하면 상당한 규모까지 RTOS 없이 간다. RTOS 로 넘어갈 시점은 우선순위가 다른 블로킹 작업이 여러 개 생겨 손으로 관리하기 어려워질 때다.