inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

FreeRTOS 프로그래밍

소스분석-configCHECK_FOR_STACK_OVERFLOW

configCHECK_FOR_STACK_OVERFLOW 관련

381

taeun.ahn

작성한 질문수 1

1

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

FreeRTOSConfig.h 에 configCHECK_FOR_STACK_OVERFLOW 를 정의했는데

image.png

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

image.png

 

운영체제 임베디드 FreeRTOS

답변 2

1

홍영기

안녕하세요. 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 인턴

안녕하세요, 인프런 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

만약에 포팅을 할때 1년에 한번 잡는 치명적인 문제를 해결하는 코드가 들어갔다고 가정하면

0

57

2

STM32 포팅할 때 STM32 Project가 없음

0

148

2

FreeRTOS 멀티코어 지원안됨?

0

83

2

[소스코드 분석-configUSE_TIME_SLICING] TASK1,2의 우선순위가 동일할 때, configUSE_TIME_SLICING값 변경에 따른 출력 변화

0

82

2

포팅 부탁드립니다!

0

57

1

포팅 부탁드립니다. <NUCLEO-G071RB>

0

64

2

상호배제 후 되지를 않아서 질문드립니다.

0

60

1

수료증 발급 기준 수정 요청

1

69

1

재진입가능여부에 관한 질문

1

66

1

01_TASKMAN프로젝트 디버깅 모드 실패

1

76

2

그러면 malloc/free가 아닌 동적할당자를 써서 메모리를 할당했기떄문에

1

69

2

실행순서

1

74

2

uart 전송중에는 스위칭이 금지되나요?

1

71

2

스택오버플로우 실습 중 stack size 설정 질문

0

79

2

포팅 원합니다.

2

75

2

코루틴 실습질문

1

99

2

TODO 2번 문제

1

140

4

10. 선점형 커널 그림 설명중 우선순위가 반대인 경우에도 Task B가 먼저 수행되나요?

1

80

2

디버거모드에 진입이 안됩니다.

0

175

2

prvExampleTaskHook 함수 호출 부분에 대해 문의드립니다.

0

119

2

보드 STM32H735IG와 강의 호환 여부 문의

1

151

3

[ L152RE ] 원샷 소프트타이머 실행 잘 되시나요?

1

157

2

Deferred Interrupt Processing 샘플 예제 문의 드립니다.

1

119

2

포팅 서비스 부탁드립니다

1

122

2