최근 수정 시각 : 2024-09-28 00:04:35

임베디드 시스템

시스템 프로그래밍에서 넘어옴

[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)

1. 개요2. 특징3. 제작 과정4. 프로그래밍 요소5. 기타

1. 개요

Embedded System

내장형 시스템이라는 뜻으로, 시스템 '내부에 탑재된' 컴퓨터를 뜻한다. 노트북이나 데스크탑 컴퓨터는 문서작성, 게임, 채팅, 웹서핑, 코딩 등 수많은 용도로 사용 가능하기 때문에 임베디드 시스템이 아니고 일반 목적의 범용 컴퓨터이다. 반면 키오스크, 내비게이션, CCTV DVR, 세탁기, 냉장고, 전자렌지, 디지털 도어락, 블루투스 이어폰 등등 단일목적의 마이크로 컨트롤러 시스템을 임베디드 시스템이라 할 수 있다. 특정한 목적을 수행하며 프로그래밍 가능한 마이크로컨트롤러/컴퓨터 시스템으로 정의 될수 있다. PC용 x86 보드를 특정한 목적에만 사용하도록 설계한다면 역시 임베디드 시스템이라고 할 수 있다. 게임기 역시 '게임'이라는 특정목적을 주로 수행하므로 임베디드 시스템으로 분류할 수 있다.

2. 특징

  • 하드웨어 지식
    펌웨어를 포함하는 임베디드 시스템은 시스템 회로 및 관련 하드웨어에 대한 지식이 필수적이다. 펌웨어나 단순한 앱 프로그래밍 정도 알아서는 디렉팅 및 기획을 할수가 없다. 시스템 아키텍쳐, 아날로그 회로, 디지털 로직, 네트워크 통신, EMI/EMC, Safety, 프로토타입 제작, 메커니컬 디자인까지 알아야 한다. 즉, 하드웨어/펌웨어/소프트웨어 디자인을 모두 섭렵한 사람만이 임베디드 시스템 디자인이 가능하다.
  • 프로그램 최적화
    임베디드 시스템의 디바이스들은 절제된 리소스를 사용하므로 메모리 리크, 힙/스택 관리 등과 함께 효율적 코딩이 필요하다. 같은 동작을 하는 앱을 일반 응용 소프트웨어 개발자가 작성한 코드와 임베디드 설계자가 작성한 코드를 비교해보면 임베디드 코드가 압도적으로 간결하고 정갈한 경우가 많다. 2010년대 중반에 접어들면서 마이크로프로세서의 성능 향상과 더불어 고급 라이브러리들이 많이 공개되면서 예전과 같은 어려운 코딩의 필요성이 줄어들었다. 플래시나 SRAM등 메모리 용량이 적은 로 코스트 칩 경우 프로그램 최적화가 중요한 편이다.
  • 주변 디바이스와 연관된 알고리즘
    마이크로프로세서에 의해 수행되는 명령은 주변 디바이스를 직접 제어하기 때문에 안전성이나 정밀도 요구 사항이 더 높다. 자동차 엔진을 컨트롤하는 ECU 마이크로프로세서의 경우 차의 연비를 높이면서 공기 오염을 최소화함과 동시에 차의 퍼포먼스를 높이기 위한 복잡한 필터링 알고리즘을 수행한다.
  • 실시간 처리 지원
    임베디드 RTOS에서 말하는 실시간이란 빠른 실행을 의미하는 것이 아니라 어느 시간때 태스크가 실행됨을 파악할수 있음을 의미한다. Tick 타임과 Task Priority등의 태스크 스케쥴링이 특징이다. Async, 멀티 테스크/스레드, 멀티 코어 등의 Concurrent/Parallel 프로그래밍 기법이 필요하다. 1997년 화성에 착륙한 탐사선 마스 패스파인더는 착륙 후 화성의 기상 정보를 지구로 전송하는 과정에서 RTOS의 Priority Inversion 버그가 생기는 바람에 데이터들이 제 시간 안에 처리되지 못했고, Watchdog 타이머에 의해 시스템은 스스로를 리셋했다. 이후 다시 기상 정보를 수집해 지구로 보내는 과정에서 같은 일이 반복해서 발생하면서 탐사 임무를 제대로 수행하지 못한 일이 발생한 적이 있다. 이런한 태스크 우선순위 버그를 해결하기 위한 RTOS 프로그래밍 기법들이 있다. RTOS에는 무료인 freeRTOS와 유료인 Nucleus, VxWorks 등이 있다. Linux 또한 실시간 처리를 지원하고 있다.
  • UX
    특정 목적의 사용자 인터페이스를 디자인한다. 임베디드 시스템의 유져 인터페이스는 마이크로 컨트롤러 전용의 GUI 라이브러리를 사용하는 경우 또는 리소스가 넉넉한 시스템에서는 기존 OS의 어플리케이션 GUI 라이브러리를 사용한다.
  • 멀티레이트(Multirate)
    멀티 스트림등의 실시간 작업은 여러 개가 동시에 일어나기도 한다. 태스크 별로 slow rate과 fast rate로 수행되도록 동시에 컨트롤해야 한다. 멀티미디어를 예로 들면, 스트리밍되는 오디오 부분과 비디오 부분은 서로 rate가 다르지만, 반드시 동기화되어야 한다.

3. 제작 과정

일반적으로는 제작하려는 시스템의 요구사항을 확립한 다음[1] 이에 맞는 시스템 구성요소를 선정. 선정된 부품들의 개발키트등을 통한 프로토타입 제작과정을 거치고 타겟 애플리케이션을 위한 소프트웨어 개발을 진행하면서 테스트를 통한 디버깅을 진행후 실제품화 단계를 거치고 최종적으로 검사,인증 과정을 거쳐 하나의 완성된 시스템으로써 만들어진다.

각 시스템의 구성품은 애플리케이션에 따라 극단적으로 차이가 날수 있기 때문에 요구사항을 확립하고 부품을 선정하는 단계가 가장 까다로운 경우가 많으며 단순한 소비자 가전기기등은 완제품들을 조합해서 적용시키는 등 간단하게 이루어지는 경우도 많으나 해당 애플리케이션이 아주 강력한 법적 규제사항을 지켜야 하는 분야이거나 특수한 인증을 획득해야 하는 경우, 항공우주,방산 처럼 극한의 내환경성 요구사항을 준수해야 하는 경우 아예 부품선정 단계부터 까다롭게 진행하는 경우가 많다.

이런 법률적, 인증, 규제 적인 난이도가 시간이 지날수록 급증하자[2] 산업계에서는 시중에 있는 상용 완제품,반제품등을 이용한 개발등을 통해 개발비와 양산부담을 줄이거나[3] 가장 비용이 많이 드는 하드웨어 개발/인증 비용을 아예 부담하지 않기 위해 이미 완성된 하드웨어만 구매해서 자사에 맞춘 소프트웨어만 개발해 탑재하는 경우도 많아졌다.[4]

4. 프로그래밍 요소

  • 부트로더: 하드웨어 초기화, 파티션 앱 로딩, 시큐어 부트, 플래시 인크립션, 앱 이미지 업데이트 관련 기능 등등을 담당하는 별개의 앱이다. 임베디드 시스템 설계에서 가장 중요한 부분이 부트로더 설계이다. 펌웨어 업데이트와도 관련된다.
  • 운영체제 - 임베디드 시스템의 특성에 맞춰 일부 기능이 생략될 수 있다.
  • 네트워크 API - TCP/IP 프로토콜 스택, 무선 통신 기기 스텍, 웹 서버/클라이언트 라이브러리 등으로 구성된다.
  • JTAG - 플래시 프로그래밍 및 디버깅 목적으로 사용한다.

5. 기타

  • 마이크로 칩,보드, 커널 소프트웨어, RTOS등이 포함된 BSP(Board Support Package) 형태로 서드 파티에서 유통되기도 한다.
  • 1990년대 8051, 80C196KC, Z80 등 8비트류의 마이크로 컨트롤러는 현재 쓰는데가 거의 없다.
  • 임베디드기사 자격증이 2013년부터 시행되기 시작했다. 2016년 필기에 150명이 응시하여 실기에 4명이 합격하였다. 과목은 임베디드 하드웨어, 임베디드 펌웨어, 임베디드 플랫폼, 임베디드 소프트웨어.
  • Controller Area Network (CAN): 차량용 통신 제어 프로토콜.
  • 스택(자료구조): 인터럽트가 발생했을 때, 프로세서의 현재 상태와 레지스터 값을 보존하기 위해 사용.
  • PLC 제어 - PLC도 하드웨어 본체 밖(컴퓨터)에서 프로그램을 작성하여 PLC CPU에 업로드하므로 일종의 임베디드 시스템이라고 볼 수 있다.

예시
[1] 주로 필수적으로 갖춰져야할 기능이나 규제에 따른 필수 구성품, 동작 환경에 대한 내환경성, 각종 인증에 필요한 사양등. 국가나 산업 분야에 따라 달라질수 있다.[2] 부품단계에서 부터 "차량용" 등급을 획득한 부품은 일반 산업용 부품보다 훨씬 비싼 등 규제에 맞춰 모든 부품의 비용상승도 있었으며 이를 준수하는지도 테스트 해야 하는만큼 테스트도 더 자주해야 되었다. 또한 ROHS인증으로 전자제품의 경우 모든 부품에 대해 중금속 포함 여부를 증명해야 하기 때문에 부품선정을 함부로 하는것도 불가능하다.[3] 메인보드나 각종 구성품을 직접 만들면 내부에 들어가는 부품으로써 인증받아야할 품목이 계속 늘어나지만 이를 완제품이나 반제품으로 대체하면 이미 필요한 인증을 받은 부품에 대해서는 추가적인 인증을 거칠 필요도 없으며 자체적으로 해당 부품을 생산하기 위한 부품을 가질필요도 없고 특정 부품을 생산하기 위한 생산라인도 갖출 필요가 없으니 생산비용도 아주 크게 절감된다. 라즈베리 파이가 전세계적으로 인기를 끈 이유도 라즈베리 파이 자체가 개발자료가 많아 제품 개발이 쉬운것도 있지만 라즈베리 파이 재단이 전세계적으로 판매에 필요한 인증을 다 받아놨기 때문에 파이에 대해서는 인증을 받을 필요가 없고 전체 시스템을 개발해 인증받기 보다는 라즈베리 파이의 부속품만 개발해 그 부속으로 인증을 받는게 절차가 더 간단하기 때문이다.[4] 대표적인 예시는 ATM이나 인터랙티브 키오스크로 이들 제품들은 하드웨어 완제품을 만드는 회사는 따로있고 그 위에 은행이나 키오스크를 도입하는 기업들이 소프트웨어만 바꿔서 도입하는 경우가 대다수이며 실제로 국내 대다수의 은행들이 사용중인 ATM들은 효성TNS나 ATEC AP등의 두곳에서만 납품되고 비슷한 제품들을 소프트웨어만 다르게 해서 쓰는 중이다.

분류