임베디드에서 넘어왔습니다.
임베디드 시스템
(♥ 0)
분류
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. 설계 절차[편집]
반도체 칩 및 IDE 선정, 부트로더 시스템 설계, 임베디드 OS 또는 RTOS 선정, 임베디드 응용 S/W 제작, 테스트 및 디버깅 순으로 진행된다. 반도체사 또는 서드파티 라이브러리 예제로부터 시작하는 것이 좋다.
2010년대 중반 이후 Linux 및 RTOS 등을 구동 가능한 디바이스 및 모듈들이 Allwinner, Rockchip, Espressif, MediaTek, Actions, Spreadtrum, Leadcore, Broadcom, VIA, Amlogic 등의 반도체 회사들로부터 저렴하게 공급되고 있다. 커스텀화한 라이브러리를 프리-컴파일하기 위한 유틸을 사용하기 위해 Linux 개발환경을 구성해야 한다. 멀티 태스킹이나 고급 GUI 설계시 RTOS나 Linux 등을 사용한다.
4. 프로그래밍 요소[편집]
- 부트로더: 하드웨어 초기화, 파티션 앱 로딩, 시큐어 부트, 플래시 인크립션, 앱 이미지 업데이트 관련 기능 등등을 담당하는 별개의 앱이다. 임베디드 시스템 설계에서 가장 중요한 부분이 부트로더 설계이다. 펌웨어 업데이트와도 관련된다.
- 운영체제 - 임베디드 시스템의 특성에 맞춰 일부 기능이 생략될 수 있다.
- 네트워크 API - TCP/IP 프로토콜 스택, 무선 통신 기기 스텍, 웹 서버/클라이언트 라이브러리 등으로 구성된다.
- JTAG - 플래시 프로그래밍 및 디버깅 목적으로 사용한다.
5. 기타[편집]
- 마이크로 칩,보드, 커널 소프트웨어, RTOS등이 포함된 BSP(Board Support Package) 형태로 서드 파티에서 유통되기도 한다.
- 1990년대 8051, 80C196KC, Z80 등 8비트류의 마이크로 컨트롤러는 현재 쓰는데가 거의 없다.
- 임베디드기사 자격증이 2013년부터 시행되기 시작했다. 2016년 필기에 150명이 응시하여 실기에 4명이 합격하였다. 과목은 임베디드 하드웨어, 임베디드 펌웨어, 임베디드 플랫폼, 임베디드 소프트웨어.
- Controller Area Network (CAN): 차량용 통신 제어 프로토콜.
- 스택(자료구조): 인터럽트가 발생했을 때, 프로세서의 현재 상태와 레지스터 값을 보존하기 위해 사용.
예시
- 로봇 - 마이크로 마우스, 라인트레이서, 레고 마인드스톰, 견마형 로봇, 로봇/보행형
- 비행체 - 드론, 무인기, 캔위성
- 통신 시스템 제어 - RFID 시스템, 센서 네트워크, 사물인터넷, 인터넷 공유기/자작
- 특정 목적만을 수행하는 PC에 내장되는 UEFI 마이크로프로세서 및 펌웨어. 특정 장치의 디바이스 드라이버
- 멀티미디어 장치 - 아케이드 게임기, 반주기, 콘솔 게임기, TV, 내비게이션, DVR 등등
이 문서의 내용 중 전체 또는 일부는 2024-08-20 22:58:28에 나무위키 임베디드 시스템 문서에서 가져왔습니다.