임베디드 용어 사전
구조·RTOS

스택 워터마크

스택이 실제로 얼마나 깊게 쓰였는지 측정한 값. 미리 패턴을 채워 두고 얼마나 덮였는지로 잰다.

스택 크기를 감으로 정하지 않기 위한 도구다.

1. 태스크 스택을 0xA5 같은 패턴으로 가득 채운다
2. 한동안 돌린다 (최악 경로까지 포함되도록)
3. 아직 0xA5 로 남아 있는 부분이 안 쓴 여유다

RTOS 는 대개 이 기능을 API 로 제공한다. 값을 주기적으로 읽어 로그로 남기면 여유가 얼마나 남았는지를 계속 감시할 수 있다.

얼마를 남길 것인가

측정된 최대 사용량에 여유를 더한다. 여유가 필요한 이유는

인터럽트가 그 스택 위에 쌓인다 (구성에 따라)
아직 안 타 본 예외 경로가 있다
컴파일러 최적화 수준이 바뀌면 사용량도 바뀐다

한계

측정은 지나간 경로만 말해 준다. 한 번도 실행되지 않은 깊은 호출 경로는 잡히지 않는다. 그래서 정적 분석 도구로 호출 그래프 기반 최대 깊이를 함께 계산하는 것이 안전하다.

더 확실한 방법

MPU 로 스택 끝에 접근 금지 영역을 두면, 넘치는 순간 조용한 오염 대신 폴트가 난다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — RTOS — 선점과 블로킹을 되찾는다