임베디드 용어 사전
임베디드 학습노트에서 용어를 누르면 여기로 옵니다. 레지스터·부팅·통신·디버깅까지, 손으로 만질 때 필요한 개념을 정리했습니다.
99개 용어 · 상세 정리 99개
기초·메모리9
- MCU
CPU·메모리·주변장치를 한 칩에 담은 마이크로컨트롤러. OS 없이 펌웨어가 직접 하드웨어를 다룬다.
- 메모리 맵
주소 공간의 어느 구간이 무엇인지 정해 둔 표. MCU에서는 주변장치 레지스터도 주소에 배치돼 있다.
- CMSIS
ARM이 정한 Cortex-M 공통 소프트웨어 인터페이스. 벤더가 주변장치 레지스터를 구조체로 정의해 제공한다.
- 비트밴딩
특정 메모리 영역의 비트 하나하나를 별도 주소에 대응시켜, 읽기-수정-쓰기 없이 원자적으로 바꾸게 해 주는 기능.
- 마스크
원하는 비트만 골라 건드리기 위해 만드는 비트 패턴. 설정·해제·토글·검사의 기본 도구다.
- 원자성
중간에 끼어들 수 없는 성질. 읽기-수정-쓰기 3단계는 원자적이지 않아 인터럽트와 함께 쓰면 값이 사라진다.
- 비트필드
구조체 멤버에 비트 수를 지정하는 C 문법. 배치가 구현에 달려 있어 하드웨어 레지스터 매핑에는 권하지 않는다.
- 시프트
비트를 좌우로 밀어 옮기는 연산. 이동량과 타입을 잘못 잡으면 미정의 동작이 되거나 부호가 번진다.
- 크로스 컴파일
개발하는 기계와 코드가 실행될 기계가 다른 빌드. PC에서 Arm용 바이너리를 만든다.
C 함정7
- 정수 승격
작은 정수 타입이 연산 전에 int로 확대되는 C 규칙. 부호가 섞이며 예상과 다른 결과를 만든다.
- 구조체 패딩
정렬 규칙을 맞추려고 컴파일러가 멤버 사이에 넣는 빈 바이트. 크기와 배치가 예상과 달라진다.
- 엔디안
여러 바이트 값을 메모리에 늘어놓는 순서. 통신과 저장에서 서로 다른 규칙이 만나면 값이 뒤집힌다.
- 정렬
값이 자기 크기의 배수 주소에 놓여야 한다는 제약. Cortex-M에서 위반하면 폴트가 나거나 느려진다.
- 동적 할당
실행 중 힙에서 메모리를 얻는 방식. 임베디드에서는 단편화와 시간 불확정 때문에 대개 쓰지 않는다.
- volatile
컴파일러가 접근을 생략·재배치하지 못하게 막는 한정자. 레지스터와 ISR 공유 변수에 붙인다.
- 재진입
실행 도중 다시 불려도 결과가 망가지지 않는 성질. 정적 상태나 공유 버퍼가 있으면 재진입 안전하지 않다.
부팅·빌드7
- Reset_Handler
리셋 직후 가장 먼저 실행되는 함수. 전역 변수 초기화와 스택·클럭 준비를 마친 뒤 main을 부른다.
- VTOR
벡터 테이블의 시작 주소를 담는 레지스터. 부트로더가 애플리케이션으로 넘어갈 때 반드시 옮겨 준다.
- 링커 스크립트
어떤 코드와 데이터를 메모리의 어느 영역에 놓을지 지시하는 파일. 임베디드에서는 직접 손대는 일이 잦다.
- VMA
프로그램이 실행 중에 그 데이터를 보는 주소. 임베디드에서는 대개 SRAM 주소다.
- LMA
바이너리에서 그 데이터가 저장돼 있는 주소. .data는 플래시에 저장되고 실행 시 SRAM으로 복사된다.
- .bss 섹션
초기값이 없는 전역·정적 변수가 놓이는 영역. 바이너리에는 크기만 있고 부팅 때 0으로 채워진다.
- 맵 파일
링커가 남기는 배치 보고서. 어떤 심볼이 어디에 얼마나 놓였는지 전부 적혀 있다.
GPIO·인터럽트8
- 풀업
입력 핀을 저항으로 전원에 묶어 기본값을 HIGH로 잡아 주는 것. 없으면 핀이 떠서 값이 흔들린다.
- 풀다운
입력 핀을 저항으로 접지에 묶어 기본값을 LOW로 잡는 것. 풀업의 반대 방향이다.
- 채터링
기계식 스위치가 접점에서 짧게 여러 번 붙었다 떨어지는 현상. 한 번 누른 것이 여러 번으로 읽힌다.
- 슬루율
출력 핀의 전압이 변하는 속도. 빠를수록 신호는 깨끗하지만 노이즈와 소비 전류가 늘어난다.
- NVIC
Cortex-M의 인터럽트 컨트롤러. 어떤 인터럽트를 받을지, 어느 것을 먼저 처리할지 정한다.
- ISR
인터럽트가 발생했을 때 실행되는 함수. 짧게 끝내고 본 작업은 메인 루프나 태스크로 넘기는 것이 원칙이다.
- 링 버퍼
고정 크기 배열을 원형으로 쓰는 큐. ISR이 넣고 메인이 꺼내는 임베디드의 표준 구조다.
- 선점
실행 중인 것을 멈추고 더 급한 것을 먼저 처리하는 것. NVIC는 우선순위가 높은 인터럽트가 낮은 것을 선점하게 한다.
타이머·ADC9
- PWM
켜진 시간의 비율로 평균 전력을 조절하는 방식. 타이머 하나로 밝기·속도·아날로그 출력을 흉내 낸다.
- 입력 캡처
들어온 신호의 에지 순간 타이머 값을 하드웨어가 기록하는 기능. 주기·펄스폭을 정확히 잰다.
- SysTick
Cortex-M이 기본으로 제공하는 24비트 다운 카운터. OS 틱과 시간 기준으로 쓰인다.
- 워치독
정해진 시간 안에 리프레시하지 않으면 시스템을 리셋하는 타이머. 멈춘 펌웨어를 되살리는 마지막 방어선이다.
- 분해능
ADC가 아날로그 전압을 몇 단계로 나눠 표현하는지. 12비트면 4096단계다.
- 샘플링 시간
ADC가 입력 전압을 내부 커패시터에 담는 시간. 짧으면 값이 실제보다 낮게 나온다.
- DMA
CPU를 거치지 않고 주변장치와 메모리 사이에 데이터를 옮기는 하드웨어. 대량 전송에서 CPU를 해방시킨다.
- 프리스케일러
타이머 입력 클럭을 나눠 계수 속도를 정하는 분주기. 분해능과 측정 범위를 함께 결정한다.
- 기준 전압Vref
ADC가 최대값으로 삼는 전압. 값 전체가 이 전압에 대한 비율이라 여기가 흔들리면 측정이 통째로 흔들린다.
시리얼 통신12
- 보율
UART가 1초에 보내는 심볼 수. 송수신 양쪽이 같아야 하고, 오차가 크면 프레임이 깨진다.
- 패리티
데이터 비트의 1 개수를 짝수나 홀수로 맞추는 검사 비트. 1비트 오류를 검출한다.
- 오버런
수신한 데이터를 꺼내기 전에 다음 데이터가 도착해 이전 값이 덮이는 상황. 데이터가 조용히 사라진다.
- CPOL
SPI에서 클럭이 쉴 때의 전압 레벨. 0이면 LOW, 1이면 HIGH로 대기한다.
- CPHA
SPI에서 데이터를 어느 에지에 읽을지 정하는 설정. 0이면 첫 에지, 1이면 두 번째 에지다.
- 전이중
보내면서 동시에 받는 통신 방식. SPI는 클럭 한 번에 양방향으로 한 비트씩 교환한다.
- 풀업 저항
I²C의 두 선을 HIGH로 끌어올리는 저항. 오픈드레인 버스라 이것이 없으면 통신 자체가 안 된다.
- ACK
I²C에서 수신자가 한 바이트를 잘 받았다고 알리는 신호. 9번째 클럭에 선을 끌어내려 표시한다.
- 클럭 스트레칭
I²C 슬레이브가 클럭선을 붙잡아 마스터를 기다리게 하는 것. 처리 시간이 필요할 때 쓴다.
- 버스 잠김
I²C에서 슬레이브가 SDA를 계속 붙잡고 놓지 않아 통신이 멈춘 상태. 리셋으로도 안 풀리는 경우가 많다.
- 흐름 제어
받는 쪽이 못 따라갈 때 보내는 쪽을 잠시 멈추게 하는 장치. 없으면 결국 오버런으로 데이터를 잃는다.
- 칩 셀렉트
SPI에서 어느 슬레이브와 통신할지 고르는 선. 활성인 동안만 그 슬레이브가 클럭을 자기 것으로 받아들인다.
필드버스10
- 차동 신호
두 선의 전압 차이로 값을 표현하는 방식. 두 선에 함께 실린 잡음이 상쇄돼 노이즈에 강하다.
- 중재
여러 노드가 동시에 보낼 때 충돌 없이 우선순위를 가리는 과정. CAN은 ID가 작은 프레임이 이긴다.
- 비트 스터핑
같은 값이 5비트 연속되면 반대 비트를 하나 끼워 넣는 규칙. 수신 측이 클럭을 계속 맞추게 해 준다.
- 비트 타이밍샘플 포인트
한 비트를 몇 개의 시간 조각으로 나누고 어디서 읽을지 정하는 설정. 모든 노드가 같아야 통신된다.
- 필터
수신할 프레임의 ID 범위를 하드웨어가 걸러 주는 기능. 필요 없는 프레임이 CPU까지 오지 않게 한다.
- 종단 저항
전송선 양 끝에 다는 저항. 신호 반사를 없애 파형이 깨지는 것을 막는다. CAN에서는 120Ω 두 개다.
- 버스 오프
송신 오류가 임계를 넘은 CAN 노드가 스스로 버스에서 분리되는 상태. 고장 노드가 버스 전체를 망치는 것을 막는다.
- LINLIN 마스터
한 가닥 선과 12V로 도는 저속 차량 버스. 마스터 하나가 일정표대로 물어보고 슬레이브가 답한다.
- 브레이크 필드브레이크 필드 만들기
LIN 프레임의 시작을 알리는 13비트 이상의 우성 구간. 일반 데이터로는 만들 수 없는 패턴이라 구분자가 된다.
- 스케줄 테이블
LIN 마스터가 어떤 프레임을 언제 보낼지 적어 둔 일정표. 충돌을 없애고 지연을 예측 가능하게 만든다.
구조·RTOS9
- 슈퍼루프
main의 무한 루프에서 모든 일을 순서대로 처리하는 구조. 가장 단순하지만 한 작업이 길어지면 전체가 밀린다.
- 상태 기계
현재 상태와 입력에 따라 다음 상태를 정하는 구조. 기다리지 않고 일을 쪼개는 베어메탈의 핵심 도구다.
- 협조적 스케줄러
작업을 표로 관리하며 주기마다 호출해 주는 경량 구조. 각 작업이 스스로 양보해야 돌아간다.
- 태스크
RTOS가 독립적으로 실행하는 단위. 각자 자기 스택을 갖고, 스케줄러가 우선순위에 따라 교체한다.
- 우선순위 역전
낮은 우선순위 태스크가 쥔 자원 때문에 높은 태스크가 밀리는 현상. 중간 우선순위가 끼면 무한정 늦어진다.
- 뮤텍스
공유 자원을 한 번에 하나만 쓰게 보장하는 잠금. 소유자 개념이 있어 우선순위 상속을 지원한다.
- 틱
RTOS가 시간을 세는 기본 단위. 이 주기마다 스케줄러가 깨어나 태스크를 다시 고른다.
- 스택 워터마크
스택이 실제로 얼마나 깊게 쓰였는지 측정한 값. 미리 패턴을 채워 두고 얼마나 덮였는지로 잰다.
- 컨텍스트 스위칭
실행 중인 태스크의 레지스터와 스택 포인터를 저장하고 다른 태스크의 것을 복원하는 과정.
디버깅8
- JTAG
칩 내부를 들여다보고 제어하는 표준 디버그·테스트 인터페이스. 핀을 여러 개 쓰고 여러 칩을 데이지체인할 수 있다.
- SWD
ARM이 만든 2선 디버그 인터페이스. 핀 두 개로 JTAG과 거의 같은 일을 한다.
- 브레이크포인트
실행을 특정 위치에서 멈추게 하는 장치. 하드웨어 방식은 개수가 정해져 있다.
- 워치포인트
특정 주소에 읽기·쓰기가 일어나는 순간 멈추게 하는 기능. 값이 언제 바뀌는지 추적할 때 쓴다.
- HardFault
다른 폴트 핸들러가 처리하지 못한 예외가 승격돼 오는 최후의 예외. 대개 잘못된 포인터나 정렬 위반이 원인이다.
- CFSR
어떤 종류의 폴트가 왜 났는지 비트로 알려 주는 레지스터. 폴트 분석의 출발점이다.
- 스택 프레임
예외 진입 시 하드웨어가 스택에 자동으로 밀어 넣는 레지스터 묶음. 여기서 폴트가 난 위치를 꺼낸다.
- 스택 오버플로
스택이 할당된 범위를 넘어 다른 메모리를 덮는 상황. 증상이 원인과 멀어 찾기 어렵다.
관측·테스트9
- DWT
Cortex-M의 관측 유닛. 사이클 카운터로 코드 실행 시간을 정확히 재고 워치포인트도 제공한다.
- ITMSWO
Cortex-M이 제공하는 트레이스 유닛. 프로그램이 남긴 로그와 이벤트를 SWO 핀으로 흘려보낸다.
- RTT
디버그 인터페이스로 RAM 버퍼를 읽어 로그를 주고받는 방식. 추가 핀 없이 빠른 로그를 얻는다.
- 프로파일링
어디에서 시간을 쓰는지 측정하는 일. 임베디드에서는 PC 샘플링이나 GPIO 토글로 관측한다.
- 단위 테스트
하드웨어 없이 PC에서 로직만 떼어 검증하는 테스트. 프로토콜 파싱·상태 기계·계산 코드가 대상이다.
- HIL
실제 하드웨어를 자동 테스트 장비에 물려 돌리는 검증. 타이밍과 전기적 동작까지 포함해 확인한다.
- 정적 분석
코드를 실행하지 않고 검사해 결함 가능성을 찾는 도구. 컴파일러 경고보다 넓게 본다.
- 커버리지
테스트가 코드의 어느 부분을 실행했는지 비율로 나타낸 지표. 높다고 옳은 것은 아니다.
- 모킹
테스트에서 실제 하드웨어 대신 가짜 구현을 끼워 넣는 것. 보드 없이 로직을 검증할 수 있게 한다.
최적화·저전력7
- LTO
링크 시점에 전체 프로그램을 보고 최적화하는 기능. 크기와 속도를 함께 줄이지만 디버깅이 어려워진다.
- 대기 상태
플래시가 CPU보다 느려서 삽입하는 대기 사이클. 클럭만 올리면 성능이 그대로일 수 있는 이유다.
- 평균 전류
배터리 수명을 결정하는 값. 순간 소비가 아니라 시간에 대한 평균이 전부다.
- WFI
인터럽트가 올 때까지 CPU를 세우는 명령. 저전력 모드로 들어가는 가장 기본적인 방법이다.
- RTC
저전력 클럭으로 계속 도는 실시간 시계. 시스템이 깊이 잠든 동안 시간을 세고 깨워 준다.
- 인라인
함수 호출을 없애고 본문을 그 자리에 펼치는 최적화. 빨라지지만 코드 크기가 늘어난다.
- 듀티 사이클
전체 시간 중 깨어 활동하는 시간의 비율. 저전력 설계는 이 값을 낮추는 일이다.