그라운드 임베디드 유튜브 구독

노트

자료구조와 알고리즘 노트

MCU에는 메모리가 수십 KB뿐입니다. 어떤 구조로 데이터를 쌓느냐가 곧 안정성입니다.

로드맵에서 보기 →
GROUND EMBEDDED · 정리 노트자료구조 01시간과 메모리 복잡도표기의미예O(1)데이터 양과 무관링 버퍼에 넣기, 룩업 …O(log n)절반씩 줄임정렬된 표에서 이진 탐색
자료구조와 알고리즘

시간과 메모리 복잡도: 작은 MCU에서 먼저 따질 것

RAM 20KB, 클럭 72MHz인 MCU에서는 알고리즘을 고르기 전에 계산량과 메모리를 먼저 따져야 합니다.

GROUND EMBEDDED · 정리 노트자료구조 02링 버퍼 1#define N 64// 2의 거듭제… 2static volatile uint8_t buf[N]; 3static volatile uint16_t head, tail; 4void rb_put(uint8_t b) {// ISR에서 …
자료구조와 알고리즘

링 버퍼: 인터럽트와 메인 루프 사이의 다리

UART로 들어오는 바이트를 잃지 않고 쌓아 두는 원형 큐. 인터럽트가 쓰고 메인 루프가 읽는 구조입니다.

GROUND EMBEDDED · 정리 노트자료구조 03큐와 스택 1static int16_t st[16]; 2static uint8_t top; 3void push(int16_t v) { if (top < 16) st… 4int16_t pop(void) { return top ? st[…
자료구조와 알고리즘

큐와 스택: 먼저 온 것과 나중에 온 것

작업 대기열은 큐, 함수 호출은 스택입니다. 두 구조를 배열로 직접 구현하며 차이를 봅니다.

GROUND EMBEDDED · 정리 노트자료구조 04연결 리스트와 메모리 풀 1typedef struct node { struct node *next… 2static node_t pool[16]; 3static node_t *free_list; 4void pool_init(void) {
자료구조와 알고리즘

연결 리스트와 메모리 풀

malloc 없이 미리 잡아 둔 메모리 풀로 연결 리스트를 쓰는 방법. 단편화와 실패를 피하는 임베디드식 할당입니다.

GROUND EMBEDDED · 정리 노트자료구조 05상태 머신 1typedef enum { IDLE, RUN, FAULT } state… 2static state_t st = IDLE; 3void motor_task(void) { 4 switch (st) {
자료구조와 알고리즘

상태 머신: 펌웨어 설계의 기본 도구

복잡한 동작 순서를 상태와 전이로 정리합니다. 플래그가 늘어나 if문이 얽히기 시작하면 상태 머신으로 바꿀 때입니다.

GROUND EMBEDDED · 정리 노트자료구조 06탐색과 룩업 테이블 1static const int16_t sin_lut[256] = { 0… 2int16_t s = sin_lut[angle >> 8];// 16비트 …
자료구조와 알고리즘

탐색과 룩업 테이블

정렬된 표에서 이진 탐색으로 빠르게 찾고, sin이나 센서 보정처럼 비싼 계산은 표로 미리 만들어 둡니다.

GROUND EMBEDDED · 정리 노트자료구조 07CRC와 체크섬 1uint16_t crc16_modbus(const uint8_t *p,… 2 uint16_t crc = 0xFFFF; 3 while (n--) { 4 crc ^= *p++;
자료구조와 알고리즘

CRC와 체크섬: 깨진 데이터 알아내기

통신 중 비트가 뒤집혔는지 확인하는 계산. 단순 합 체크섬과 CRC의 차이, 그리고 구현 방법을 정리했습니다.

GROUND EMBEDDED · 정리 노트자료구조 08고정소수점 연산 1int16_t q15_mul(int16_t a, int16_t b) { 2 int32_t r = (int32_t)a * b; 3 return (int16_t)(r >> 15); 4}
자료구조와 알고리즘

고정소수점 연산: 정수로 소수 다루기

FPU가 없는 MCU에서 소수를 빠르게 계산하는 Q 포맷. 스케일, 곱셈 후 시프트, 포화 처리를 정리했습니다.