이 Repository는 Embedded Software Enginner에 관한 로드맵 입니다.
이 내용은 Firmware 및 Softeware에 관한 내용으로, 그동안 임베디드 업무를 진행하면서 겪은 개인적인 견해가 담겨 있는 글입니다.
임베디드 소프트웨어 엔지니어는 말 그대로 PCB에서 동작하는 소프트웨어를 작성하는 업무를 말합니다.
소프트웨어와 펌웨어 둘 다 언어를 사용하여 프로그래밍을 하는 직무이기 때문에 둘을 묶어 임베디드 소프트웨어 엔지니어 라고도 합니다.
임베디드 소프트웨어 엔지니어는 Non-OS 기반 펌웨어와 다르게 OS가 있는 환경에서 작업을 하는 경우가 많습니다.
OS는 주로 리눅스 또는 임베디드 리눅스, 안드로이드 환경을 말합니다.
예를 들어 Raspberry Pi 또는 Jetson 시리즈와 같이 PCB임에도 리눅스 OS가 탑재되어 OS가 있는 환경에서 프로그래밍 하는 것을 볼 수 있습니다.
임베디드 소프트웨어는 분야에 따라 하는 업무가 결정됩니다.
소프트웨어는 앱, 웹, 로봇, IoT, Dear Learning 등 수많은 분야와 업계가 존재합니다.
임베디드 소프트웨어도 이런 분야에 따라서 어느 환경에서 업무를 진행할지가 결정이 되어 어느 분야에 관심이 있는지 결정하는 것이 좋습니다.
또는 리눅스 Kernel이나 Device Driver 또는 Boot loader 를 개발하는 직무도 있습니다.
차량용 또는 방산 사업과 같은 곳에서 전문연구요원으로 하는 경우도 종종 있으며, 이 외에 기능이 많은 임베디드 시스템을 만드는 회사에서 채용합닌다.
따라서 대표적으로 업무에 따른 내용은 아래 리스트와 같습니다.
- System : C, Linux Kernel, Device Driver, Boot loader, File System
- GUI : C++, Android, Qt/QML, GTK
- Robotics : C++, Python, ROS1/2, OpenCV, Gazebo, SLAM
- IoT : C, C++, Java, HTTP/HTTPS, MQTT, Web Interface
- Vision : C++, Python, OpenCV, Qt/QML, GStreamd, V4L2
필요 언어는 분야에 따라 결정되며, 기본적으로 C/C++이 사용됩니다.
- C/C++
- Python
- Java
- Javascript
- Rust
- 기본적 프로그래밍 지식
- 통신 개념
- 리눅스 사용법
- TCP/IP, HTTP
- Python, Java
- GUI 툴 작성 능력(WPF, Winform, Qt, MFC ...)
- 웹 통신에 관한 전반적인 이해
- 리눅스 구조 및 Kernel
- Shell Script
- Git
임베디드 펌웨어 엔지니어는 완성된 PCB를 동작시키는 프로그래밍 작업을 하는 직무를 말합니다.
보통 Non-OS에서 작업을 하며, 제품 컨셉에 따라 RTOS를 포팅해서 사용하기도 합니다.
MCU(Micro Controller Unit) 종류에 따라 개발 환경, 펌웨어 프로그램을 다운로드하는 Emulator가 달라집니다.
예를 들어, ST社 의 경우 프로그램은 STM32CubeIDE(Keil, IAR Workbench 등)를 사용하며, Emulator는 ST-Link를 사용합니다.
펌웨어 엔지니어는 하드웨어 엔지니어와 협업하며, 완성된 PCB에 넣을 프로그램을 작성하는 업무를 진행합니다.
펌웨어 업무를 진행하기 위해 PCB의 회로도, 사용되는 IC의 Datasheet, 통신 방식 등을 확인하며 그 구현에 맞는 코드를 C언어로 작성합니다.
MCU의 메모리 크기는 일반 PC와 다르게 극히 적으므로, 메모리 효율에 맞는 프로그래밍을 해야합니다.
그래도 최근 나오는 MCU의 메모리 크기는 과거에 비해 많이 좋아져 원할한 프로그래밍을 할 수 있습니다.
작은 기업일 수록 하드웨어를 겸업으로 하는 경우가 종종 있으며, 큰 기업일 수록 하드웨어와 완전히 불리되는 경우가 있습니다.
하드웨어를 겸업하는 직무의 경우, 하드웨어 설계 및 디버깅의 능력도 필수적으로 필요합니다.
필요 언어는 대부분의 경우 C언어로 작성하며, 때때로 C++, Assembly 언어를 사용하기도 합니다.
Espressif Systems(ESP) 또는 Micro Bit 등과 같이 MicroPython 언어가 지원하는 보드의 경우 MicroPython을 사용하는 곳도 있습니다.
- C/C++
- Assembly
- MicroPython
- 기본 프로그래밍 작성 능력
- Register 구조에 따른 Bit 제어
- GPIO, Timer, UART, SPI 등 기본 Peripheral 동작 능력
- Datasheet 해석 능력
- 회로도 해석 능력
- 디버깅 도구(Oscilloscope, Multi meter 등)
- GUI 툴 작성 능력(WPF, Winform, Qt, MFC ...)
- Assembly 언어
- Git
아래 종류는 많이 사용하는 MCU의 종류이며, 이외에 다른 MCU도 존재합니다.
- ST Electronic (STM32CubeIDE, Keil, IAR Workbench)
- AVR (Atmel Studio)
- PIC (MPLAB)
- Texas Instruments (Code Composer Studio)
- Nordic (Segger Embedded Studio)
- NXP (MCUXpresso)
- Renesas (CS+ for CA cx)
임베디드 하드웨어 엔지니어는 말 그대로 하드웨어(PCB)에 관련된 업무를 진행합니다.
크게 전자회로(Schematics)와 PCB 설계 업무를 진행합니다.
기업 규모에 따라 회로와 PCB 설계를 겸업하며, 큰 기업의 경우 나눠지기도 합니다.
하드웨어 엔지니어는 회로 설계와 PCB 설계 업무를 진행합니다.
PCB가 사용되는 업계에 따라 PCB의 구조 및 방향성이 달라집니다.
크게 회로의 특성에 따라 아날로그 회로, 디지털 회로, RF 회로로 나뉘는데, 회로에 따라 각 업무가 달라집니다.
따라서 어떤 회로에 관심이 있는지 정하는 것이 좋습니다.
추가로 외주 업무 관리 및 부품 수급 업무도 진행합니다.
임베디드 시스템의 경우 단가 문제는 중요한 문제이기 때문에, 저렴한 부품, 좋은 부품을 찾아 수급하고 주문합니다.
그리고 관련 업체를 찾고 지정하며, 발주까지 진행합니다. 또한 SMD 업체도 관리합니다.
마지막으로 인증 업무까지 진행하는 경우도 많이 있습니다.
기본적으로 전자제품을 판매하기 위해 관련 인증을 받아야 하는데, 인증에 관해 알아두는 것도 좋습니다.
- 아날로그 및 디지털 개념
- 기본적인 전자 이론 지식과 회로 설계 및 해석 능력
- 전자 부품 특성
- 회로 설계 툴(ORCAD, KICAD)과 PCB 설계 툴(Pads, Allegro) 사용 능력
- 펌웨어 작성 능력
- 인증(KC, CE ...)
- 전자 회로 Simulation
FPGA 엔지니어는 FPGA 칩(Xilinx, Zynq)에 프로그래밍 하는 업무를 진행합니다.
대표적인 HDL(Hardware Description Language) 중에서 Verilog와 VHDL을 사용합니다.
일반적인 프로세서는 메모리에 있는 프로그램을 불러온 후 CPU에서 해독하여 작업을 실행하지만, FPGA는 아예 프로세서 내부 회로를 프로그램에 맞춰 설계하고 곧바로 병렬적으로 실행시키므로, 일반 MCU 구현보다 압도적으로 빠른 속도를 자랑한다.
기본적인 MCU 기능에서부터 고속처리, 병렬처리, DSP 등 특정화된 시스템에서 사용하고 있습니다.
FPGA를 설계하는 일을 진행하며, 떄로는 하드웨어 or 펌웨어와 겸업하여 일을 진행합
관련 업무를 진행하기 위해 게이트, 하드웨어, 간단한 프로그래밍 지식이 필요합니다.
FPGA를 사용하는 임베디드 시스템은 규모가 크고, 일반적이 아닌 특정한 스펙에 맞는 시스템에서 많이 사용합니다.
고속처리 또는 병렬처리, DSP와 같은 시스템이 필요한 연구소에서 근무하는 경우가 종종 있습니다.
- 기본적인 프로그래밍 지식
- 디지털 회로와 논리 회로
- Verilog, VHDL
- ARM Architecture
- 하드웨어 구조와 설계
- 펌웨어 작성 능력
- 회로 해석 능력
Name | Image | Type | Description |
---|---|---|---|
혼자 공부하는 C언어 | Language | 혼공 시리즈 중 하나로, C언어 입문 교재로 많이 사용되고 있는 교재이다. 혼공 시리즈의 특징으로, 그림이 많고 설명을 최대한 쉽게 하고 있으며, 예제도 많이 존재하여 입문서로 추천하는 교재이다. 관련 카페가 존재하며, 유튜브에 관련 강의도 있어 입문자가 적절하게 공부할 수 있도록 구성되어 있다. | |
윤성우의 열혈 C 프로그래밍 | Language | 열혈강의 시리즈 중 하나로, 입문서로 많이 사용되고 있는 교재이다. C언어를 입문하는 교재로 많이 사용되고 있으며, 관련 강의와 카페도 운영되고 있다. 입문서에 맞게 그림도 많이 포함되어 있어 입문서로 적절한 교재이다. | |
윤성우의 열혈 C++ 프로그래밍 | Language | 열혈강의 시리즈 중 하나로, C++ 입문서로 많이 사용되고 있다. 프로그래밍을 처음 접하는 입문자의 경우 OOP의 개념이 헷갈릴 수 있지만, 쉽게 풀어낸 것 같은 내용으로 입문자들이 쉽게 이해할 수 있도록 구성되어 있다. 관련카페와 강의도 구성되어 있다. | |
C++ 기초 플러스 | Language | 국내에서 유명한 C++교재로, 1732페이지 라는 엄청난 페이지 수를 자랑한다. 국내 언어 교재 중 가장 많은 페이지의 책이 아닐까 싶긴 하지만, 많은 페이지 만큼 정말 C++의 필요한 내용들이 전부 다 들어있는 것 같다. 책에 그림은 많이 없지만, 정말 중요한 부분들을 모두 담고 있어 입문서를 막 마치고 난 후 언어의 깊이에 대해 공부할 수 있을 것 같은 좋은 책이다. 입문서로는 추천하지 않지만, 기본을 공부하고 난 후 보면 좋을 추천하는 교재이다. | |
임베디드 프로그래밍 C코드 최적화 | Language | C언어를 공부하고 난 후, 임베디드의 느낌을 잡기에 좋은 책이다. 책의 내용을 과장과 대리의 이야기로 풀어 나가는데, 책의 내용이 지루하지 않고 신입의 기준으로 쉽게 설명하며 지루하지 않게 진행한다. 책이 271페이지로 얇은 책이어서 많고 자세한 설명을 담고 있지는 않지만, 임베디드 입문자로서 느낌과 개념을 잡기에 가볍게 읽기 좋은 교재이다. |