자격증 정복/임베디드기사(기능사)

임베디드기능사 필기 08 — 시스템소프트웨어·펌웨어·개발도구 (MCU·RTOS·JTAG)

올드 IT직장인 2026. 9. 17. 06:00

임베디드기능사 필기 08 — 시스템소프트웨어·펌웨어·개발도구 (MCU·RTOS·JTAG)

출제기준 대단원 7: 시스템소프트웨어 펌웨어 구현
2026년 신규 추가 파트! MCU, RTOS, 개발도구 개념 중심이에요.


운영체제 종류 ⭐

범용 OS
  Windows, Linux, macOS
  대형 컴퓨터·서버 운용

RTOS (Real-Time OS)
  정해진 시간 안에 작업 처리 보장
  VxWorks, QNX, FreeRTOS, uC/OS
  항공·의료·자동차 등 임베디드에 필수

임베디드 Linux
  Linux를 임베디드에 맞게 경량화
  라즈베리파이, 스마트 기기 등

마이크로프로세서 구조 ⭐⭐

CPU vs MCU

CPU (Central Processing Unit)
  → 연산·제어만 담당
  → 외부에 메모리·I/O 필요

MCU (Micro Controller Unit)
  → CPU + 메모리(ROM/RAM) + I/O가 하나의 칩
  → 임베디드 시스템의 핵심
  → Arduino의 핵심이 MCU (ATmega328P 등)

MCU 구성요소

CPU 코어     — 연산·제어
Flash ROM    — 프로그램 저장 (비휘발성)
SRAM         — 데이터 저장 (휘발성)
GPIO         — 디지털 입출력
Timer/Counter— 시간 측정·PWM 생성
UART/SPI/I2C — 직렬 통신 인터페이스
ADC          — 아날로그→디지털 변환
Interrupt    — 인터럽트 처리

대표 MCU

AVR 계열   — ATmega328P (아두이노 우노)
ARM 계열   — STM32, Cortex-M 시리즈
PIC 계열   — Microchip Technology
8051       — Intel, 교육용으로 많이 사용

아두이노 (Arduino) ⭐⭐

임베디드기능사 실기에서 핵심 플랫폼!

아두이노 우노 (Arduino UNO)
  MCU: ATmega328P
  디지털 I/O: 14개 핀
  아날로그 입력: 6개 핀
  동작 전압: 5V
  클록: 16MHz

기본 구조

void setup() {
    // 초기화 코드 (한 번만 실행)
    pinMode(13, OUTPUT);  // 13번 핀을 출력으로 설정
}

void loop() {
    // 반복 실행 코드
    digitalWrite(13, HIGH);  // LED ON
    delay(1000);             // 1초 대기
    digitalWrite(13, LOW);   // LED OFF
    delay(1000);
}

주요 함수

pinMode(pin, mode)      — 핀 모드 설정 (INPUT/OUTPUT)
digitalWrite(pin, val)  — 디지털 출력 (HIGH/LOW)
digitalRead(pin)        — 디지털 입력 읽기
analogWrite(pin, val)   — PWM 출력 (0~255)
analogRead(pin)         — 아날로그 입력 (0~1023)
delay(ms)               — ms 단위 지연
Serial.begin(9600)      — 시리얼 통신 시작
Serial.println(data)    — 시리얼 출력

펌웨어 개발 과정 ⭐

요구사항 분석
    ↓
설계 (하드웨어 + 소프트웨어)
    ↓
코딩 (C/C++/어셈블리)
    ↓
컴파일·빌드
    ↓
다운로드(플래싱)
    ↓
테스트·디버깅
    ↓
출시

크로스 컴파일 ⭐

호스트 PC에서 타겟 MCU용 코드를 컴파일
→ 크로스 컴파일러 (Cross Compiler)
→ 예: ARM용 gcc (arm-none-eabi-gcc)

개발도구 ⭐⭐

IDE (통합 개발 환경)

Arduino IDE    — 아두이노 전용
STM32CubeIDE  — STM32 전용
Keil MDK       — ARM MCU 전용
Eclipse        — 범용 (플러그인으로 임베디드 지원)
VS Code        — 범용, 확장 플러그인 활용

디버깅 도구

JTAG ⭐⭐⭐
  5신호: TCK / TMS / TDI / TDO / TRST
  직렬 방식
  TCK는 시스템 클록과 별개
  Boundary-Scan 기능으로 칩 내부 테스트

SWD (Serial Wire Debug)
  2선(SWDCLK, SWDIO)으로 디버깅
  ARM Cortex-M 전용
  JTAG보다 핀 수 적음

테스트 방법 ⭐

단위 테스트 (Unit Test)
  → 개별 함수·모듈 단위 검증

기능 테스트 (Functional Test)
  → 요구 기능 충족 여부 확인

통합 테스트 (Integration Test)
  → 여러 모듈 결합 후 동작 확인

시스템 테스트
  → 전체 시스템 최종 확인

하드웨어-인-더-루프 (HIL)
  → 실제 하드웨어와 시뮬레이션 결합 테스트

임베디드 통신 인터페이스 ⭐⭐

UART (Universal Asynchronous Receiver Transmitter)
  → 비동기 직렬 통신
  → TX(송신), RX(수신) 2선
  → 시작비트(0), 정지비트(1)

SPI (Serial Peripheral Interface)
  → 동기 직렬 통신
  → SCK, MOSI, MISO, CS 4선
  → 고속 통신에 적합

I2C (Inter-Integrated Circuit)
  → 동기 직렬 통신
  → SDA, SCL 2선
  → 여러 장치를 버스로 연결 (주소로 구분)

기출 문제

Q. JTAG의 5가지 신호를 나열하시오.

A. TCK / TMS / TDI / TDO / TRST

 

Q. JTAG에 대한 설명으로 틀린 것은?

A. "TCK는 시스템 클록과 동일하다" → 오답! (별개의 클록 사용)

 

Q. MCU와 CPU의 차이는?

A. MCU는 CPU + 메모리 + I/O가 하나의 칩에 통합된 것


핵심 정리

✅ RTOS: 시간 보장 (VxWorks, QNX, FreeRTOS)
✅ MCU = CPU + ROM + RAM + I/O 하나의 칩
✅ 아두이노: setup()=초기화 / loop()=반복
✅ JTAG 5신호: TCK/TMS/TDI/TDO/TRST
✅ TCK ≠ 시스템클록 (별개!)
✅ JTAG = 직렬 방식
✅ UART: 비동기(시작·정지비트) / SPI: 4선 / I2C: 2선
✅ 크로스 컴파일 = PC에서 MCU용 코드 컴파일

 

다음 편에서는 최종 예상 기출문제 풀이로 마무리합니다!

반응형