인프런 커뮤니티 질문&답변

taeun.ahn님의 프로필 이미지
taeun.ahn

작성한 질문수

FreeRTOS 프로그래밍

소스분석-configCHECK_FOR_STACK_OVERFLOW

configCHECK_FOR_STACK_OVERFLOW 관련

작성

·

73

1

스택오버플로우 관련 문제가있어 질문드립니다.

FreeRTOSConfig.h 에 configCHECK_FOR_STACK_OVERFLOW 를 정의했는데

image.png

task.c 에 vApplicationStackOverflowHook 함수가 활성화가 되지않아 문의드립니다.

image.png

 

답변 2

0

홍영기님의 프로필 이미지
홍영기
지식공유자

안녕하세요. taeun.ahn님!
해외출장 건으로 답변이 늦어진 점 우선 양해를 구합니다.

stm32cubeide 버젼이 올라가면서 생긴 변화(경고 WARNING) 입니다. 자세한 내용은 여기참조

stm32cubeide 1.15.0 이후 버젼을 사용하시는 분들만 이 글을 참조해주세요.

주의!!! 역 호환되지 않기 때문에 이전 버젼(stm32cubeide 1.15.0 보다 이전 버전)을 사용하시는 분들은 아래 내용을 적용하시면 안됩니다.

freeRTOS_tutorials 의 모든 프로젝트를 대상으로 아래와 같이 두 가지를 수정해 주셔야 하는데

첫째, 링커스크립트 파일(STM32F???_FLASH.ld)을 아래 그림을 참고해서 수정해주세요.

image.png

 

둘째, FreeRTOSConfig_base.h 파일 내용중 아래를 수정

변경전
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILENAME__, LINE )

변경

#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE_NAME__, LINE )

 

 

0

안녕하세요, 인프런 AI 인턴입니다.

taeun.ahn님, 스택 오버플로우 문제로 고민이 크셨겠네요. vApplicationStackOverflowHook 함수가 활성화되지 않는 문제는 몇 가지 원인으로 발생할 수 있습니다. 아래 몇 가지 점검 사항을 확인해 보세요:

  1. configCHECK_FOR_STACK_OVERFLOW 설정 확인: FreeRTOSConfig.h 파일에서 #define configCHECK_FOR_STACK_OVERFLOW 2를 정의했는지 확인하시고, 이 값이 올바른지 확인해주세요. 일반적으로 1 또는 2의 값을 설정할 수 있으며, 2를 사용하는 경우는 더 많은 오버헤드를 가지고 정확한 검사를 수행합니다.

  2. vApplicationStackOverflowHook 함수 정의 여부 확인: task.cvApplicationStackOverflowHook 함수가 올바르게 정의되어 있는지 확인해 주세요. 함수가 제대로 구현되지 않으면 호출되지 않습니다.

  3. 컴파일 옵션 확인: 스택 오버플로우 체크가 활성화되려면 프로젝트 설정에서 컴파일러 최적화 옵션이 이에 영향을 줄 수 있습니다. 최적화 수준을 변경해 보세요.

  4. 각 태스크의 스택 크기 확인: 생성된 태스크의 스택 크기가 충분한지 확인해 주세요. uxTaskGetStackHighWaterMark()와 같은 기능을 사용하여 스택 사용량을 모니터링할 수 있습니다.

문제가 해결되지 않으면, 코드의 다른 부분이나 빌드 과정을 살펴보는 것도 좋습니다. 추가적인 해결 방법이 필요하시다면 간단한 샘플 코드와 함께 더 많은 정보를 제공해 주시면 도움이 될 수 있습니다.

출처: FreeRTOS Documentation

taeun.ahn님의 프로필 이미지
taeun.ahn

작성한 질문수

질문하기