스택 크기를 감으로 정하지 않기 위한 도구다.
1. 태스크 스택을 0xA5 같은 패턴으로 가득 채운다
2. 한동안 돌린다 (최악 경로까지 포함되도록)
3. 아직 0xA5 로 남아 있는 부분이 안 쓴 여유다
RTOS 는 대개 이 기능을 API 로 제공한다. 값을 주기적으로 읽어 로그로 남기면 여유가 얼마나 남았는지를 계속 감시할 수 있다.
얼마를 남길 것인가
측정된 최대 사용량에 여유를 더한다. 여유가 필요한 이유는
인터럽트가 그 스택 위에 쌓인다 (구성에 따라)
아직 안 타 본 예외 경로가 있다
컴파일러 최적화 수준이 바뀌면 사용량도 바뀐다
한계
측정은 지나간 경로만 말해 준다. 한 번도 실행되지 않은 깊은 호출 경로는 잡히지 않는다. 그래서 정적 분석 도구로 호출 그래프 기반 최대 깊이를 함께 계산하는 것이 안전하다.
더 확실한 방법
MPU 로 스택 끝에 접근 금지 영역을 두면, 넘치는 순간 조용한 오염 대신 폴트가 난다.