
임베디드 SW 분야 정리!
임베디드 SW 분야
안녕하세요, 제어쟁이입니다. 전공 3~4학년이 읽어도 이해될 수 있도록, 임베디드 SW의 대표 영역을 줄글로 정리했습니다. 같은 임베디드 SW라도 하는 일이 꽤 다릅니다. 인버터/컨버터와 같은 HW를 제어하기위한 SW, BSW/드라이버는 하드웨어를 소프트웨어로 끌어올리며, RTOS는 여러 일을 시간 안에 정리하고, 리눅스는 시스템 전체를 부팅부터 업데이트까지 관리합니다.
관심 있는 분야를 하나 정해서 작은 프로젝트부터 꾸준히 만들어보시길 권합니다. 기록을 남기면 본인이 성장하는 속도가 확실히 다릅니다.과장 없이, 현업에서 실제로 하는 일을 기준으로 적었습니다.
1) 인버터/컨버터 제어 SW
인버터/컨버터 제어 SW는 모터 구동과 전력 변환을 위한 제어 알고리즘을 MCU에 구현하는 일입니다. BLDC/PMSM을 6‑step이나 FOC로 구동하고, 전류·전압·속도 같은 피드백을 읽어 PI 같은 기본 제어기를 돌립니다. 샘플링 타이밍, PWM 데드타임, ADC 트리거, 인터럽트 우선순위처럼 시간 민감한 요소를 맞추는 게 핵심입니다. 과전류·과전압·과열 보호와 같은 안전 로직을 같이 넣고, 기동 시퀀스나 센서리스 보조 알고리즘을 다루는 경우도 많습니다. 오실로스코프와 전류 프로브로 파형을 확인하고, 로그를 보고 튜닝하는 일이 잦습니다. 기본적으로 전력전자 개념, 모터 제어 수학(d‑q 변환, 파크/클라크), 고정소수점 연산, 필터 설계가 밑바탕이 됩니다.
2) BSW(Basic Software)
BSW는 보드가 켜졌을 때 가장 먼저 실행되는 초기화 코드부터 각종 주변장치 드라이버까지, 하드웨어를 SW에서 사용할 수 있게 만드는 층입니다. 클럭/전원/리셋 설정, GPIO, 타이머, UART·SPI·I2C·CAN, ADC/DMA, WDT 등을 레지스터 수준에서 설정하고 검증합니다. 부트 시퀀스와 인터럽트 벡터, 링커 스크립트로 메모리 배치를 잡는 것도 포함됩니다. AUTOSAR 환경이라면 MCAL 구성과 같은 표준화된 레이어 작업을 합니다. 데이터시트와 레퍼런스 매뉴얼을 정확히 읽고, 디버거(J‑Link, ST‑Link)로 레지스터 상태를 확인하면서 문제를 좁혀가는 능력이 중요합니다. 코드 자체보다 타이밍과 자원 제약을 맞추는 일이 더 어렵게 느껴질 수 있습니다.
3) RTOS(실시간 운영체제)
RTOS는 여러 작업을 일정 시간 안에 안정적으로 처리하기 위한 운영체제입니다. 센서 읽기, 통신 송신, 로깅처럼 주기가 다른 일을 태스크로 나누고 우선순위를 정해서 스케줄러가 돌게 합니다. 큐·세마포어·뮤텍스로 태스크 간 데이터를 교환하고 동기화합니다. ISR에서 무엇을 하고 무엇을 하지 말아야 하는지 구분하고, 블로킹 호출로 인해 우선순위 역전이나 데드락이 생기지 않게 구조를 잡아야 합니다. 실행시간 측정과 스택 사용량 모니터링으로 오버런을 찾는 것도 기본 업무입니다. FreeRTOS나 Zephyr 같은 RTOS를 쓰지만, 핵심은 어떤 작업을 어떤 주기로 돌리고, 실패했을 때 어떻게 복구할지를 명확히 정의하는 데 있습니다.
4) 임베디드 리눅스
임베디드 리눅스는 부트로더(U‑Boot), 커널, 디바이스 트리, 루트파일시스템을 구성해서 제품이 부팅되고 동작하도록 만드는 영역입니다. 하드웨어를 커널이 인식하도록 디바이스 트리를 작성하고, 필요한 커널 옵션을 켭니다. 사용자 공간에서는 데몬이나 서비스 프로그램을 만들어 센서 데이터를 수집하거나 네트워크 통신을 처리합니다. 부팅 시간을 줄이기 위해 불필요한 모듈을 빼고, 서비스 시작 순서를 조정하며, 전력 소비를 줄이기 위해 클록과 전원 관리를 설정합니다. OTA 업데이트와 롤백 같은 배포 방법을 설계하는 일도 포함됩니다. Yocto/Buildroot 같은 빌드 시스템을 쓰지만, 목표는 간단합니다. 필요한 기능만 담긴 이미지로 안정적으로 부팅하고, 현장에서 문제를 재현·수정할 수 있는 구조를 갖추는 것입니다.
5) 디바이스 드라이버
디바이스 드라이버는 센서, 액추에이터, 통신 모듈을 운영체제나 애플리케이션이 사용할 수 있게 추상화하는 코드입니다. 리눅스에서는 커널 모듈 형태로 작성해 /dev나 sysfs를 통해 접근시키고, RTOS나 베어메탈에서는 HAL 위에 드라이버 레이어를 만들어 API를 제공합니다. 인터럽트로 이벤트를 받고, DMA나 링버퍼로 데이터를 손실 없이 흘려보내며, 에러가 났을 때 재시도나 리셋을 어떻게 할지까지 포함합니다. I2C/SPI/UART/CAN 같은 버스 특성과 타이밍을 이해해야 하고, 로직애널라이저나 오실로스코프로 실제 신호를 확인할 줄 알아야 합니다. 드라이버의 품질은 성능뿐 아니라 예외 상황에서 얼마나 안전하게 복구되는지로 평가되는 경우가 많습니다.
댓글을 작성해보세요.