스택 오버플로우(Stack overflow)
기술노트 57348
아키텍처:
All
컴포넌트:
debugger
업데이트:
2021-07-15 오후 9:29
소개
경우에 따라 C-SPY는 다음과 같은 경고 메시지를 띄우는데 ...
The stack 'CSTACK' is filled to 100% (4096 bytes used out of 4096). The warning threshold is set to 90%
... 스택에 충분한 여유 공간이 있으므로 해당 경고에 어떠한 원인이 없다.
배경
프로젝트가 생성되면 옵션이 기본값으로 설정됩니다. 이러한 기본값 중 하나는 C stack(s) checking를 활성화하는 것입니다.
일반 임베디드 응용프로그램을 쓰고 디버깅할 때 일반 C 스택을 확인할 수 있는 가능성은 좋은 기능입니다.
반면, RTOS가 있는 응용프로그램에서는 C 스택 검사가 의도한 대로 작동하지 않습니다. C 스택 검사는 스택 포인터가 '알려진' 스택 영역 밖에 있는 이유를 '이해'할 수 없습니다. 이러한 상황의 이유는 RTOS가 RTOS 응용 프로그램에서 서로 다른 작업의 서로 다른 스택을 유지하고 전환하기 때문이다.
C-SPY의 C 스택 체크는 IAR Embedded Workbench에 통합된다. (이전에는 스택 체크는 C-SPY 플러그인에 의해 처리되었다.)
해결방법
Tools > Options... > Stack > 'Warn when stack pointer is out of bounds'에서 체크마크를 제거하는 것으로 경고 메시지를 비활성화 할 수 있습니다.
C-SPY 스택 플러그인을 사용하는 예전 버전의 IAR Embedded Workbench에서 Project > Options > Debugger > Plugins > Stack 에서 체크마크를 제거하는 것으로 플러그인을 비활성화 할 수 있습니다.
RTOS를 사용할 때는 C-SPYC 스택 검사를 활성화하지 마십시오. RTOS용 플러그인에서 태스크 스택 체크인을 활성화할 수 있습니다.
기타 문제 상황
응용 프로그램에서 RTOS를 사용하지 않는 경우 경고의 이유는 다음 중 하나일 수 있습니다 ...
- 임베디드 프로그램에서 변경이 필요함을 암시하는 올바른 경고 이거나...
- 응용프로그램은 디버그 정보 없이 (적어도 부분적으로) 작성됩니다. C 스택 검사는 디버그 정보 없이는 의도한 대로 작동할 수 없습니다. 이 경우 C 스택 검사를 비활성화합니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.