승코딩당당당
[임베디드] 임베디드 C 프로그래밍 기초 본문
임베디드 시스템은 가전제품, 자동차, 로봇, 의료기기 등 특정 목적의 기기 내부에 마이크로컨트롤러(MCU)와 소프트웨어를 내장하여 동작하는 전용 컴퓨터 시스템이다.
범용 컴퓨터와 달리 미리 정해진 기능만 수행하며, 제한된 자원 환경에서 안정적이고 실시간으로 동작해야 한다는 특징을 가진다.
임베디드 시스템은 하드웨어와 소프트웨어가 밀접하게 결합된 구조를 가지며, 이를 제어하는 펌웨어(Firmware)는 하드웨어의 특성을 직접 다루는 핵심 요소이다.
따라서 임베디드 개발자는 단순한 소프트웨어 개발자가 아니라, 하드웨어 특성을 이해하고 제어할 수 있는 펌웨어 개발자라고 볼 수 있다.
시스템 구성 측면에서는 입력 센서, 메인 프로세서, 출력 액추에이터로 이루어진 구조를 가지며,
MCU는 CPU, 메모리, 각종 인터페이스를 하나의 칩에 통합한 형태로 임베디드 시스템의 중심 역할을 수행한다.
본 글에서는 임베디드 시스템의 개념과 특징을 시작으로,
MCU와 CPU·MPU·GPU의 차이, 개발용 MCU 보드 종류, volatile 키워드의 필요성, MCU Bring-up과 I/O 접근 방식까지
임베디드 개발을 이해하기 위한 기초 개념들을 정리한다.
임베디드 시스템
- 임베디드 시스템
- 가전, 자동차, 기계 등 특정 기기에 마이크로컨트롤러(MCU)와 소프트웨어를 내장하여, 미리 정해진 고유한 기능만을 수행하도록 설계된 전용 컴퓨터 시스템
- 특징
- 목적: 가전제품(세탁기), 자동차(제어 장치), 로봇, 의료기기 등에서 단일 또는 특정 작업만 수행
- 하드웨어 및 소프트웨어 통합: 하드웨어와 이를 제어하는 펌웨어가 밀접하게 결합됨
- 제약 조건: 제한된 리소스(메모리, 처리 능력, 전력) 환경에서 작동
- 실시간성: 입력에 대한 즉각적인 반응이 필수적인 경우가 많음
- 펌웨어 = 드라이버
- PC에 뭔가를 꽂았을 때, 드라이버를 설치하라고 뜨잖아요? 이것이 드라이버
- 임베디드 개발자란, 펌웨어 개발자다
- 하드웨어의 특성을 잘 다루는 소프트웨어 개발
임베디드 시스템 HW 구조
- 메인 프로세서: 사람의 두뇌에 해당하며, 센서의 입출력 동작을 관리
- 입력 센서: 현재 상황을 인지하기 위해 사용되는 입력 장치들
- 출력 액추에이터: 로봇의 실제 움직이는 동작에 관여하는 출력 장치들
- 입력 센서 - 메인 프로세서 - 출력 액추에이터

CPU / GPU / MPU / MCU
- CPU, GPU, MPU 와 MCU 성격이 다름
- CPU, GPU, MPU는 연산 장치이지만, 누구를 연산하냐에 따라 다르다
- CPU(Central Processing Unit): 중앙에서 모든 것을 처리한다
- GPU(Graphic Processing Unit): 그래픽 유닛을 위해서 처리하는 장치 (대부분 행렬 사칙연산)
- MPU(Micro Processing Unit)
- 단독 동작 가능하도록 만들어짐
- MCU(Micro Controller Unit): 통합된 하나의 마더보드(motherboard)
- MCU = CPU + 메모리 + 인터페이스
개발용 MCU 보드 종류
- 초보 개발용 MCU 보드
- 아두이노
- 라즈베리
- …
- 사용 개발용 MCU 보드
- ST - Nucleo 시리즈
- 노르딕 -rf52
- 인피니언 - TC275, TC375
- …
- 많은 기능을 할 수록 가격이 낮아진다
- “규모의 경제”
ST사의 Product 소개
- NUCLEO 보드란: ST사가 개발자들을 위해 디버깅 및 기본 기능들을 탑재한 개발 보드
- 전적으로 ARM Core를 사용
volatile
- 변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 컴파일 시킴
- 사용 방법: volatile data_type variable_name
- 필요성:
- MIMO(Memory-mapped I/O)
- 인터럽트 서비스 루틴(Interrupt Service Routine)의 사용
- 멀티 쓰레드 환경
- 최적화(Optimization): 컴파일러가 코드를 “똑똑하게” 더 빠르고/작게 만들려고 멋대로 고치는 것
- 여기서 변수를 volatile로 선언한다면,
- 값이 안 쓰여도 접근 코드 유지
- while 문도 절대 지우지 않음
- 디버깅할 때 값이 사라지지 않음
Digital output 이해와 활용
MCU Bring-up
- Firmware를 통해 MCU가 기본적으로 동작하는 것을 의미
- Firmware:
- 하드웨어와 밀접하게 관련되어 있는 SW
- SW 위치: ROM / RAM 등에 위치
- 기본 하드웨어를 동작 시켜 MCU를 기본 동작이 가능하게 만드는 SW
- 뭐 하나만 바뀌어도 새로 컴파일 함 (생짜로 빌드해서, 이미지 파일 나와서, 펌웨어로 올려줘야 한다)
I/O Access 방법
- Special Instruction I/O
- Memory-mapped I/O
- Direct memory access (DMA)
Pull Down 저항
- Pull Down 저항이 눌리면 1
- Pull UP 저항이 눌리면 0
https://xeungcoding.tistory.com/64
[STM32] GPIO 레지스터 직접 제어 – LED Blinking
이번 실습에서는 STM32 MCU 기반 개발 보드인 Nucleo-L073RZ를 사용하여 GPIO 레지스터를 직접 제어하는 방식(Bare-Metal)으로 LED Blinking을 구현하였다.HAL 라이브러리나 CubeMX와 같은 고수준 추상화 도구를
xeungcoding.tistory.com
'개발 > 임베디드' 카테고리의 다른 글
| [임베디드] 임베디드 시스템의 인터페이스 이해 (0) | 2026.02.06 |
|---|---|
| [STM32] HAL 기반 GPIO 제어 – LED Blinking (1) | 2026.02.05 |
| [임베디드] 임베디드 소프트웨어 개발 기초 (0) | 2026.02.03 |
| [STM32] GPIO 레지스터 직접 제어 – LED Blinking (0) | 2026.02.03 |
| [미래자동차응용] 미래자동차 열관리 (0) | 2026.02.02 |