임베디드 C

정의
임베디드 C(Embedded C)는 임베디드 시스템(embedded system)에서 사용되는 마이크로컨트롤러·마이크로프로세서 등을 프로그래밍하기 위해 표준 C 언어에 하드웨어 특화 기능을 추가하거나 제한을 둔 프로그래밍 언어·또는 그에 대한 개발 환경을 통칭한다. 일반적인 데스크톱·서버용 C와 동일한 문법을 기본으로 하며, 입출력 포트 제어, 인터럽트 처리, 실시간 타이머 설정 등 하드웨어 자원을 직접 다루는 확장이 포함된다.

역사
1980년대 후반부터 마이크로컨트롤러가 상업적으로 보급되면서, 해당 장치를 효율적으로 제어하기 위한 고수준 언어가 필요해졌다. 당시 C 언어가 이미 시스템 프로그래밍에 널리 활용되고 있었기 때문에, 이를 기반으로 한 임베디드 전용 변형이 등장하였다. 주요 벤더(예: Atmel, Microchip, ARM)와 툴 제공 업체(예: Keil, IAR Systems)는 각각 자체적인 확장·제한 규칙을 정의했으며, 이러한 흐름을 통합·표준화하려는 시도로 1990년대 초반에 “Embedded C”라는 용어가 사용되기 시작했다.

특징

구분 내용
표준 기반 ISO C 표준(현재 C17 등)을 기반으로 하며, 필요에 따라 컴파일러가 제공하는 벤더 고유의 키워드·라이브러리를 추가한다.
하드웨어 접근 레지스터 직접 매핑, 입출력 포트 비트 제어, 인터럽트 서비스 루틴(ISR) 정의 등을 위한 확장(예: __interrupt, sfr 등)을 제공한다.
메모리 모델 제한된 RAM/ROM 환경을 고려해 메모리 모델(near, far, far‑call 등) 및 데이터 타입(size_t 대신 uint8_t 등) 사용을 권장한다.
실시간성 컴파일러 및 링커 옵션을 통해 코드 최적화, 루프 제거, 인라인 어셈블리 삽입 등을 지원하여 실시간 응답성을 확보한다.
디버깅·시뮬레이션 하드웨어 디버거(JTAG, SWD 등)와 연동 가능한 IDE(예: Keil µVision, Eclipse 기반)에서 소스‑레벨 디버깅을 지원한다.

주요 사용 분야

  • 자동차 전자제어 장치(ECU)
  • 가전제품·산업용 제어기
  • 휴대용 전자기기(스마트워치, IoT 디바이스)
  • 의료기기 임베디드 컨트롤러
  • 로봇·드론 등 실시간 제어 시스템

관련 표준·규격

  • ISO/IEC 9899 (C 표준) – 기본 언어 규격.
  • MISRA C – 자동차·산업용 임베디드 소프트웨어의 안전성을 위한 코딩 규칙.
  • IEC 61508 – 안전 관련 전자·전기 시스템에서 임베디드 소프트웨어에 적용되는 기능 안전 표준.
  • ARM CMSIS – ARM Cortex‑M 기반 마이크로컨트롤러용 C API 및 하드웨어 추상화 레이어.

개발 도구

주요 상용·오픈소스 IDE와 컴파일러가 임베디드 C를 지원한다. 예를 들어 Keil µVision, IAR Embedded Workbench, Eclipse + GCC (arm-none-eabi-gcc), Visual Studio Code + PlatformIO 등이 있다. 이들 툴은 크로스 컴파일, 링킹, 플래시 프로그램 다운로드, 디버깅 기능을 일체화하여 제공한다.

참고
임베디드 C는 특정 마이크로컨트롤러·아키텍처에 종속된 확장이 포함될 수 있으므로, 동일한 C 코드라도 다른 벤더의 툴 체인에서는 호환되지 않을 수 있다. 따라서 프로젝트 초기 단계에서 목표 하드웨어와 사용 컴파일러의 문서를 확인하는 것이 권장된다.

둘러보기

더 찾아볼 만한 주제