노트 / 자료구조와 알고리즘
시간과 메모리 복잡도: 작은 MCU에서 먼저 따질 것
RAM 20KB, 클럭 72MHz인 MCU에서는 알고리즘을 고르기 전에 계산량과 메모리를 먼저 따져야 합니다.
PC에서는 메모리가 GB 단위라 자료구조를 넉넉하게 써도 됩니다. MCU는 RAM이 수 KB에서 수백 KB이고, 제어 루프는 정해진 주기 안에 끝나야 합니다. 그래서 임베디드에서는 "평균적으로 빠른가"보다 "최악의 경우에도 시간 안에 끝나는가"가 더 중요합니다.
빅오를 실무 언어로
| 표기 | 의미 | 예 |
|---|---|---|
| O(1) | 데이터 양과 무관 | 링 버퍼에 넣기, 룩업 테이블 |
| O(log n) | 절반씩 줄임 | 정렬된 표에서 이진 탐색 |
| O(n) | 하나씩 다 봄 | 배열 평균, 선형 탐색 |
| O(n²) | 이중 루프 | 버블 정렬 |
메모리 예산
설계할 때 RAM 사용량을 표로 먼저 적어 봅니다. 통신 버퍼, 센서 샘플 버퍼, RTOS 태스크 스택, 로그 버퍼를 더했을 때 전체의 70% 안쪽이면 안전한 편입니다. 링커가 만드는 맵 파일로 실제 사용량을 확인합니다.
현업 감각
10kHz 전류 제어 루프라면 한 주기는 100µs입니다. 72MHz MCU에서 7200클럭 안에 ADC 읽기, 좌표 변환, PI 계산, PWM 갱신을 모두 끝내야 합니다. 이런 루프 안에서는 나눗셈 한 번, sin() 한 번도 비용으로 계산합니다.