스택 오버플로우(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 스택 검사를 비활성화합니다.

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.