작성
·
73
답변 2
0
안녕하세요. taeun.ahn님!
해외출장 건으로 답변이 늦어진 점 우선 양해를 구합니다.
stm32cubeide 버젼이 올라가면서 생긴 변화(경고 WARNING) 입니다. 자세한 내용은 여기참조
stm32cubeide 1.15.0 이후 버젼을 사용하시는 분들만 이 글을 참조해주세요.
주의!!! 역 호환되지 않기 때문에 이전 버젼(stm32cubeide 1.15.0 보다 이전 버전)을 사용하시는 분들은 아래 내용을 적용하시면 안됩니다.
freeRTOS_tutorials 의 모든 프로젝트를 대상으로 아래와 같이 두 가지를 수정해 주셔야 하는데
첫째, 링커스크립트 파일(STM32F???_FLASH.ld)을 아래 그림을 참고해서 수정해주세요.
둘째, 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
함수가 활성화되지 않는 문제는 몇 가지 원인으로 발생할 수 있습니다. 아래 몇 가지 점검 사항을 확인해 보세요:
configCHECK_FOR_STACK_OVERFLOW 설정 확인: FreeRTOSConfig.h
파일에서 #define configCHECK_FOR_STACK_OVERFLOW 2
를 정의했는지 확인하시고, 이 값이 올바른지 확인해주세요. 일반적으로 1 또는 2의 값을 설정할 수 있으며, 2를 사용하는 경우는 더 많은 오버헤드를 가지고 정확한 검사를 수행합니다.
vApplicationStackOverflowHook 함수 정의 여부 확인: task.c
에 vApplicationStackOverflowHook
함수가 올바르게 정의되어 있는지 확인해 주세요. 함수가 제대로 구현되지 않으면 호출되지 않습니다.
컴파일 옵션 확인: 스택 오버플로우 체크가 활성화되려면 프로젝트 설정에서 컴파일러 최적화 옵션이 이에 영향을 줄 수 있습니다. 최적화 수준을 변경해 보세요.
각 태스크의 스택 크기 확인: 생성된 태스크의 스택 크기가 충분한지 확인해 주세요. uxTaskGetStackHighWaterMark()
와 같은 기능을 사용하여 스택 사용량을 모니터링할 수 있습니다.
문제가 해결되지 않으면, 코드의 다른 부분이나 빌드 과정을 살펴보는 것도 좋습니다. 추가적인 해결 방법이 필요하시다면 간단한 샘플 코드와 함께 더 많은 정보를 제공해 주시면 도움이 될 수 있습니다.