강의

멘토링

로드맵

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

SeongJin님의 프로필 이미지
SeongJin

작성한 질문수

FreeRTOS 프로그래밍

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

작성

·

2

0

안녕하세요.

 

저는 F429I 보드를 사용하고 있고,

올려주신 포팅한 자료로 실습하고 있습니다.

 

그런데, 강의 내용과는 다르게

taskCreate 함수에서 설정하는 stak 크기가 default로 256이 설정되어 있었습니다.

 

아래와 같이 256으로 설정하면, 정상적으로 동작하는데,

모든 tsck의 Create 함수를 128로 설정하면, 아래 putty 캡처 그림과 같이 task2가 정상적으로 실행되지 않습니다.

 

혹시 stack size를 128로 줄이면서 문제가 발생하는 이유를 알려주실 수 있을까요?

image.pngimage.png

 

답변 1

0

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

스택의 크기를 128로 줄였을 때 문제가 발생한다면, 스택의 부족으로 인한 스택 오버플로우가 발생했을 가능성이 높습니다. FreeRTOS에서 각 태스크는 고정된 크기의 스택을 할당받아 사용하며, 스택은 함수 호출, 지역 변수 등 여러 요소로 인해 사용됩니다. 할당된 스택 크기가 충분하지 않으면 함수 호출이나 데이터 저장 시 문제가 발생할 수 있습니다.

스택 크기와 오버플로우

  1. 스택 크기 설정: 태스크 생성 시 지정된 스택 크기는 bytes가 아니라 words(보통 4 bytes)가 기본 단위입니다. 즉, 128 words는 512 bytes의 메모리를 의미합니다.

  2. 스택 사용량: 일부 태스크에서 지역 변수나 함수 호출이 많은 경우 더 많은 스택을 필요로 합니다. 특히 이 중에 큰 배열을 선언했다면, 이는 많은 스택 공간을 차지할 수 있습니다.

  3. 스택 오버플로우 관리: FreeRTOS에서 스택 오버플로우를 검출하는 기능을 활성화할 수 있습니다. 이를 통해 디버깅 시 스택이 초과되는지 확인할 수 있습니다. FreeRTOS 설정 파일에서 configCHECK_FOR_STACK_OVERFLOW를 1 또는 2로 설정해 이 기능을 켜보세요.

참고 링크

태스크의 동작이 정상적으로 진행되기 위해서는 적절한 스택 크기 설정이 필요합니다. 문제가 지속될 경우, 스택 사용 추적기를 통해 각 태스크의 실제 메모리 사용량을 분석해 보는 것도 도움될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

SeongJin님의 프로필 이미지
SeongJin

작성한 질문수

질문하기