Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- yocto
- 개발자 취준
- .so 라이브러리
- cdev
- 노션
- systemd
- wiringpi
- raspberry pi 4
- 라즈베리파이 카메라
- 커널 모듈
- 라즈베리파이
- 캐릭터 디바이스
- /dev
- 임베디드 리눅스
- IOT
- 취준
- SQLite
- rtsp
- 리눅스 커널 드라이버
- 디바이스 트리 작성법
- 디바이스 트리
- 데몬 프로세스
- pthreads
- 바이브 코딩
- qt widget
- 가계부 개발
- ioctl
- 금융권 취준
- udev
- 멀티클라이언트
Archives
- Today
- Total
이로또
임베디드 시스템의 이해 본문
요약
임베디드 시스템에 대한 전반적인 이해를 돕기 위해 개념을 체계적으로 정리했습니다.
Embedded System의 정의부터 구조, 메모리 계층, 레지스터와 캐시, 실시간 시스템, ARM 구조, 그리고 MMU/MPU 비교까지 실무에서 필요한 핵심 개념을 모두 담았습니다.
목차
- Embedded System 정의
- 특징 및 설계 과정
- 개발 환경 요소
- CPU 운영 모드
- GPU 컴퓨팅 개념
- 시스템 소프트웨어 구성
- 실시간 시스템 개요
- gcc 컴파일러 단계
- 시스템 아키텍처와 버스
- 시스템 메모리와 메모리 맵
- 메모리 계층 구조 및 비교
- 지역성(Locality)
- Cache 종류
- volatile의 의미
- MMU vs MPU 비교
- ARM 구조 및 모드
- 레지스터 및 상태 레지스터 설명
- SFR 개념
- 비트 연산 실습 (Bit Field)
- 연산 비용 비교
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 연산)
- 연산 속도: +, <<, *, / 순으로 느려짐
'임베디드' 카테고리의 다른 글
임베디드 리눅스 드라이버의 이해 5편: 커널과 하드웨어의 연결 (0) | 2025.06.04 |
---|---|
임베디드 리눅스 드라이버의 이해 4편: 인터럽트 처리의 원리 (1) | 2025.06.04 |
임베디드 리눅스 드라이버의 이해 3편: 커널에서의 메모리 할당 (0) | 2025.06.04 |
임베디드 리눅스 드라이버의 이해 2편: 캐릭터 디바이스와 장치 파일, ioctl (0) | 2025.05.27 |
임베디드 리눅스 커널 구조와 드라이버의 이해 1편 (0) | 2025.05.26 |