본문 바로가기
임베디드 기초

Embedded Software는 왜 무한 루프를 사용할까?

by 버그없는토마토 2025. 12. 13.

임베디드 시스템의 기본 구조 이해하기


 

안녕하세요, 버그없는토마토입니다 🍅
오늘은 임베디드 소프트웨어를 처음 접하는 사람들이 가장 의아해하는 부분,
바로 “왜 임베디드 소프트웨어는 무한히 반복되는 while(1) 루프를 사용하는가?”에 대해 쉽게 설명해보겠습니다.

일반적인 PC용 프로그램과 달리, 임베디드 소프트웨어는 “한 번 실행되고 종료되는” 구조가 아니라
전원이 켜져 있는 동안 끊임없이 자신의 역할을 수행해야 하는 시스템입니다.
이 구조를 이해하는 것이 임베디드 개념을 잡는 첫걸음입니다.

제가 예를 들 때에는 리모컨을 드는데요
리모컨은 리모컨 표면에있는 버튼의 역할만 할 수 있는데요
버튼에 없는 내용의 역할은 하지못하죠.
리모컨은 버려질 때까지 건전지만 있다면 일정한 역할을 수행합니다.
고장나지 않는다면 무한히 말이죠.
임베디드 시스템은 바로 그런 역할을 합니다.

1. Embedded Software는 하나의 목적을 위해 존재한다

PC 프로그램은 워드, 브라우저, 영상 플레이어처럼 다양한 기능을 실행합니다.
하지만 Embedded System은 특정 목적을 수행하기 위해 존재하는 장치입니다.

예를 들면:

  • 공기청정기는 공기를 정화하는 기능
  • 전동시트 ECU는 시트를 앞뒤로 움직이는 기능
  • LED 컨트롤러는 LED를 주기적으로 점멸시키는 기능

이처럼 Embedded Software는 “목적이 하나”인 경우가 대부분이기 때문에,
이 목적을 계속 수행하도록 설계됩니다.

그래서 프로그램이 종료되지 않고 무한히 반복되는 구조가 됩니다.


2. Embedded Software의 정석: 무한 루프 구조

임베디드 프로그램의 기본 틀은 대부분 아래와 같이 생겼습니다.

main문도 같은 과정을 거치죠.

while(1)
{
    // 기능을 반복적으로 수행
}

이 루프 내부에서:

  • 센서를 읽고
  • 값을 계산하고
  • 하드웨어를 제어하고
  • 안전 로직을 수행합니다

즉, 시스템이 전원이 켜진 상태라면 무조건 이 루프는 멈추지 않고 계속 동작합니다.


3. 실제 예시: 전등 깜박이는 임베디드 프로그램

아래는 아주 단순한 임베디드 예제입니다.

 
void main(void)
{
    Lamp_init();

    while(1)
    {
        Lamp_on();
        wait(100);   // 100us 대기
        Lamp_off();
        wait(100);
    }
}

전원이 들어온 순간부터 Lamp가:

  • 100µs 켜지고
  • 100µs 꺼지고

이 동작을 영원히 반복합니다.

이것이 임베디드 시스템의 기본 원리입니다.

핵심은:

“나는 램프만 반짝이면 된다.
OS를 쓰든, IRQ를 쓰든, SVC 모드를 쓰든 중요하지 않다.”

이것이 임베디드 개발의 본질적인 사고방식입니다.


4. 왜 이런 구조가 중요한가?

Embedded Software는 종료되는 프로그램이 아닙니다.
따라서 다음 조건들이 매우 중요해집니다.

✔ 1) 실시간성

정해진 시간 안에 작업을 계속 반복해야 함
(duty cycle, PWM, 센서 모니터링 등)

✔ 2) 지속적인 동작

전원이 켜져 있는 동안 멈추면 안 됨 → 무한 루프 필요

✔ 3) 안정성

루프가 멈추거나 예외 발생 시 시스템이 위험해질 수 있음
→ Watchdog이 바로 이 구조를 감시하는 이유도 여기에 있음

✔ 4) 하드웨어 제어

GPIO, PWM, ADC, SPI 같은 하드웨어 동작을 반복적으로 수행해야 함

즉, 무한 루프는 단순한 구조가 아니라
임베디드 시스템이 안정적으로 계속 동작하도록 하는 필연적 구조입니다.


5. ASIC과의 비교: 왜 소프트웨어가 필요할까?

초단순 기능(램프 깜박임 등)은 사실 소프트웨어가 아니라
ASIC(Application Specific IC)로도 충분히 구현 가능합니다.

하지만 소프트웨어가 필요해지는 이유는:

✔ 기능 변경이 가능
✔ 다양한 기능을 하나의 보드에서 처리
✔ OTA 업데이트 가능
✔ 하드웨어 변경 없이 기능 추가 가능
✔ 복잡한 제어 알고리즘 적용 가능

즉, “깜빡임” 같은 단순 기능도
소프트웨어로 구현하면 훨씬 유연성이 생깁니다.

소프트웨어의 힘은 바로 유연함 + 확장성입니다.


🏁 마무리

임베디드 시스템은 단순히 돌아가는 것이 아니라
정해진 목적을 무한히 반복적으로 수행하는 시스템”입니다.

그래서 Embedded Software = 무한 루프라는 공식이 성립하는 것입니다.

오늘도 버그없는토마토였습니다 🍅