이로또

임베디드 시스템의 이해 본문

임베디드

임베디드 시스템의 이해

이로또 2025. 4. 18. 17:08

요약

임베디드 시스템에 대한 전반적인 이해를 돕기 위해 개념을 체계적으로 정리했습니다.

Embedded System의 정의부터 구조, 메모리 계층, 레지스터와 캐시, 실시간 시스템, ARM 구조, 그리고 MMU/MPU 비교까지 실무에서 필요한 핵심 개념을 모두 담았습니다.


목차

  1. Embedded System 정의
  2. 특징 및 설계 과정
  3. 개발 환경 요소
  4. CPU 운영 모드
  5. GPU 컴퓨팅 개념
  6. 시스템 소프트웨어 구성
  7. 실시간 시스템 개요
  8. gcc 컴파일러 단계
  9. 시스템 아키텍처와 버스
  10. 시스템 메모리와 메모리 맵
  11. 메모리 계층 구조 및 비교
  12. 지역성(Locality)
  13. Cache 종류
  14. volatile의 의미
  15. MMU vs MPU 비교
  16. ARM 구조 및 모드
  17. 레지스터 및 상태 레지스터 설명
  18. SFR 개념
  19. 비트 연산 실습 (Bit Field)
  20. 연산 비용 비교

Embedded System 정의

  • Embedded System은 larger system 안에 포함된 특정 기능 수행 목적의 컴퓨터 시스템입니다.
  • 전용 기능만을 수행하며, 일반적인 범용 PC와 달리 하나의 기능에 최적화되어 있습니다.
  • 예: 전자레인지, 자동차 ECU, 스마트워치, 산업용 제어기 등
computer system → 내장형 시스템이다.
dedicated function → 용도가 정해진 장치이다.
within a larger mechanical or electrical system.

특징

  • 경량화 및 최적화 설계
  • 저전력 소비
  • 실시간성 및 고신뢰성 요구 (특히 안전성 관련 시스템)
  • 멀티미디어 기능 (카메라, 오디오 등)
  • 네트워크 기능 포함 (Ethernet, Wi-Fi, BLE 등)

설계 및 구현 과정

  • SoC (System on Chip): CPU, RAM, Flash, I/O 등을 단일 칩에 통합
  • Bare-metal (Firmware): OS 없이 직접 하드웨어를 제어하는 방식
  • Embedded OS 기반: RTOS 또는 Linux를 기반으로 구성 가능
    • 예: 라즈베리파이 (Linux 기반)

개발 환경 구성 요소

항목 설명
Host 개발용 PC. 코드 작성 및 컴파일 수행
Target 실제로 코드가 실행되는 임베디드 보드
Toolchain gcc, linker, assembler 등 포함된 툴 모음
IDE VS Code, Keil, IAR, Eclipse 등 개발 도구

CPU Operation Mode

모드 설명
USR (User Mode) 비특권 모드. 일반 응용 프로그램 실행
SVC (Supervisor Call) 특권 모드. 운영체제 또는 커널 전용

@Cortex-M 기준

  • Thread Mode: 일반 코드 실행 (비특권 또는 특권)
  • Handler Mode: 인터럽트 및 예외 처리 (무조건 특권)

GPU Computing

  • CPU는 로직 처리, GPU는 연산 집중 파트 담당
  • GPU는 병렬 처리에 특화되어 있음
  • GPU 가속을 통해 고성능 처리 가능 (CUDA 등)

임베디드 시스템 소프트웨어 구성

Bare-metal 방식

  • Startup Code → Main Loop → I/O 직접 제어

Embedded OS 방식

  • RTOS (예: FreeRTOS, VxWorks)
  • 일반 OS (예: Linux, Android)

실시간 시스템 (Real-Time System)

유형 설명
Hard Real-time 시간 제약 절대 위반 불가 (자동차, 항공 등)
Soft Real-time 시간 제약 위반 시 QoS 저하 (영상 재생 등)

gcc 컴파일러 단계별 옵션

$ gcc -E      # 전처리
$ gcc -S      # 어셈블리 코드 생성
$ gcc -c      # 오브젝트 파일 생성
$ gcc -o main # 링크 후 실행 파일 생성

시스템 아키텍처와 버스 구조

버스 종류

  • Internal Bus: CPU 내부
  • External Bus: 외부 디바이스 연결

버스 핸드쉐이킹

  • Master → 요청 / Slave → 응답

시스템 메모리

휘발성 메모리 (Volatile)

  • SRAM: 빠름, 비쌈, 적은 용량 → 캐시, MCU 내부 RAM
  • DRAM: 느림, 저렴함, 큰 용량 → 외부 RAM, PC 메모리

비휘발성 메모리 (Non-Volatile)

  • ROM, PROM, EPROM, EEPROM
  • NOR Flash: 코드 저장
  • NAND Flash: 대용량 저장소 (USB 등)
#define dev2 (*(volatile unsigned *)0xE001000)
r = dev2;

메모리 계층 구조

계층 예시 특징
1단계 레지스터 CPU 내부, 가장 빠름
2단계 캐시 L1, L2, L3
3단계 주기억장치 RAM
4단계 보조기억장치 Flash, SSD
5단계 원격 저장소 외부 EEPROM, 서버 등

SRAM vs DRAM 비교

항목 SRAM DRAM
저장 방식 플립플롭 (6T) 커패시터 + 트랜지스터 (1T1C)
리프레시 불필요 필요
속도 빠름 느림
가격 비쌈 저렴함
소비전력 낮음 높음
용도 캐시, 내부 RAM 외부 RAM, 메인 메모리

지역성(Locality)

  • 시간적 지역성: 최근 접근한 데이터는 곧 다시 접근할 가능성 높음
  • 공간적 지역성: 인접한 데이터도 함께 접근할 가능성 높음

Cache 종류

  • Direct Mapped
  • Fully Associative
  • Set Associative

volatile의 의미

volatile int *rREG = (int *)0xE0001000;
int i = *rREG;
  • 컴파일러 최적화를 방지하고 실제 메모리에서 매번 읽어오도록 강제

MMU vs MPU

항목 MMU MPU
주소 변환 가능 (가상 → 물리) 없음 (물리 주소만 사용)
메모리 보호 페이지 단위 영역 단위
캐시 정책 설정 가능 제한적
지원 아키텍처 Cortex-A Cortex-M
OS Linux 등 RTOS, bare-metal 등

Arm Architecture

버전 코어 설명
v4 ARM7 피처폰 시대
v5 ARM9 효리폰
v6 ARM11 연아폰
v7 Cortex-M/A/R 32bit, 임베디드용
v8 Cortex-A 64bit, 서버/스마트폰용

Arm Operation Mode

  • 특권 모드 (Privileged Mode): 예외 처리, OS 커널 동작
  • 비특권 모드 (User Mode): 일반 사용자 애플리케이션

@Cortex-M:

  • Thread Mode: 일반 애플리케이션 (비특권 또는 특권)
  • Handler Mode: 인터럽트 및 예외 처리 (특권)

Register 종류

이름 별칭 설명
r13 SP Stack Pointer
r14 LR Link Register (return 주소)
r15 PC Program Counter
xPSR Program Status Reg. N/Z/C/V 플래그 포함

SFR (Special Function Register)

#define UART0 (*(volatile unsigned int *)0xE0001000);
  • Configuration, Control, Data, Status Register 등으로 구성
  • 장치 설정 및 제어에 사용

비트 연산 실습 (Bit Field)

필드 추출

int dst = src & (0xF << 4);

필드 클리어

int dst = src & ~((3<<6) | (3<<2));

필드 설정

int dst = src & ~((3<<6) | (3<<2));
dst |= ((2<<6) | (3<<2));

필드 토글

int dst = src ^ (3 << 4);

단일 비트 제어 예시

rREG |= (1<<12)|(1<<9)|(1<<4)|(1<<0);     // set
rREG &= ~((1<<12)|(1<<9)|(1<<4)|(1<<0));  // clear

용어 정리

  • bit: 1비트
  • nibble: 4비트
  • byte: 8비트 = 2 nibble
  • mask: 특정 비트를 제어하기 위한 값

연산 비용 비교

int j = i / 8;      // 느림
int k = i >> 3;     // 빠름 (Shift 연산)
  • 연산 속도: +, <<, *, / 순으로 느려짐