인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

chul17.choi님의 프로필 이미지

작성한 질문수

FreeRTOS 프로그래밍

태스크 스택의 크기를 결정하기

Task 의 Stack 메모리 영역 설명 부분 질문 드립니다.

작성

·

37

0

대상 강의: '태스크 스택의 크기를 결정하기'

재생 위치: 1:50

 

Q. Task Stack 동적 메모리 할당을 Heap 영역으로, 정적 메모리 할당을 bss 영역으로 설명해주셨는데요. 이게 Build Option (configSUPPORT_DYNAMIC/STATIC) 기준으로 설명해주신 건가요?

답변 2

0

chul17.choi님의 프로필 이미지
chul17.choi
질문자

이거 설명이 오류인 것 같습니다.

 

영상: '커널소스분석-태스크 스택메모리'

시간: 1:00

 

위 파트에서 configSUPPORT_DYNAMIC_ALLOCATION 을 설명해주시는데요, 이때 pvPortMalloc 에 의해 bss 에 할당되는 걸로 설명해주시네요.

 

이게 맞죠.

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

안녕하세요. chul17.choi님!

말씀하신 영상의 내용은 이상 없음을 알려드립니다.

과거 유사 질문이 있었기에 링크를 첨부합니다. 참고바랍니다.
https://www.inflearn.com/community/questions/629169

https://www.inflearn.com/community/questions/652584

0

인프런 AI 인턴님의 프로필 이미지

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

FreeRTOS에서의 Task Stack 메모리 할당은 동적 메모리 할당과 정적 메모리 할당 방식으로 나누어질 수 있습니다. 동적 메모리 할당은 Heap 영역을 사용하는 반면, 정적 메모리 할당은 BSS 영역을 사용합니다. 이러한 할당 방식은 FreeRTOS의 설정 옵션인 configSUPPORT_DYNAMIC_ALLOCATIONconfigSUPPORT_STATIC_ALLOCATION에 의해 제어됩니다.

  • configSUPPORT_DYNAMIC_ALLOCATION이 설정되면, xTaskCreate 함수가 사용되어 동적으로 메모리가 할당됩니다. 이 경우, 메모리는 일반적으로 FreeRTOS가 제공하는 힙 관리자(pvPortMalloc) 함수를 통해 할당되며, 이는 Heap 영역을 사용합니다.

  • configSUPPORT_STATIC_ALLOCATION이 설정되면, 정적으로 미리 예약된 메모리를 사용하여 xTaskCreateStatic 함수가 사용됩니다. 정적 할당의 경우 BSS 영역에 미리 선언된 변수를 통해 메모리를 할당합니다.

동적과 정적 설정을 동시에 가능하게 설정할 수도 있으며, 이 경우 사용자가 xTaskCreate 혹은 xTaskCreateStatic 중 어떤 것을 사용하느냐에 따라 메모리 할당 방식이 결정됩니다.

관련 질문에 대해 더 자세한 설명을 다룬 게시물이 있으니 참고해 주세요:
- 태스크 스택 관련 질문입니다.
- heap 영역에 task 할당해주는 함수가 있나요?

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