stack overflow
412
작성한 질문수 3
안녕하세요
강사님,
스택오버플로우 챕터에서 태스크 안에 배열을 540바이트를 할당하고 돌렸음에도 task가 돌아가는 것을 영상으로 확인했습니다.
1.
동작되는 것이 문제라고 하셨는데 그것이 왜 동작되는지에 대한 이유가 궁금합니다.
만약, 태스크 스택 사이즈가 512바이트였다면, 그 태스크 안에서 사용 가능한 스택은 정해진 만큼만 사용 가능한 것으로 알고 있습니다.
명확하게 큰 사이즈의 변수를 쓸 경우에는 문제가 발생한다는 것은 이미 경험한 바 있습니다만, 영상과 같은 경우에는 모르고 지나칠 수도 있을거 같습니다.
2.
예제를 보면 아래에서 memset으로 배열의 변수를 어떤 값으로 초기화를 해줍니다. 이유가 컴파일러 최적화로 인한 메모리 할당이 안 되는 것을 방지하기 위한 것인가요?
또, UNUSED 매크로 함수를 사용한 이유가 무엇인가요?
답변 1
1
deckster님! 안녕하세요~~
FreeRTOS 프로그래밍 강좌에 관심 가져주셔서 감사드리고, 질문하신 내용에 답변드립니다.
(질문1) 스택 오버플로우에 관련된 질문
전체 스택사이즈는 4K 바이트이고, 어떠한 함수를 실행하고 있는 특정 시점에 사용가능한 스택사이즈가 850바이트라고 가정해볼게요. 지역변수 char s[1024]; 를 포함한 임의의 함수를 실행하였을 경우, 이것이 문제가 있다는 사실은 누구나 공감할 수 있습니다. 하지만, 예상외로 이 함수의 실행 후 아무일도 일어나지 않을 가능성(문제가 발생하지 않을 가능성)도 있습니다.
사용자가 memset(s, '0', 24); 용도로만 해당 배열을 사용하였기 때문이죠. 1024 바이트 배열이지만 실제로 사용한 것은 24 바이트 뿐이기 때문입니다.
그럼 이런 경우는 어떨까요? memset(s, '0', 1024); 는 스택 오버 플로우를 발생시켰을텐데 괜찮을까요?
이때도 마찬가지로 아무 문제가 발생하지 않을 수 있습니다. 아니죠!!!. 문제가 발생하였지만 우리가 알아차리지 못한 것 뿐입니다.
컴파일러는 사용자가 함수내에서 선언한 지역변수의 합이 스택오버플로우 구간을 침범하는지 여부를 확인해주지 않습니다. 또한 MCU 도 프로그램 실행시 발생할 수 있는 런타임 스택오버플로우를 우리를 위해 확인해주지 않습니다.
그렇기 때문에 메모리 크기가 작은 시스템일수록 스택오버플로우 예방에 더욱 더 주의를 기울여야 하겠습니다.
(질문2) UNUSED을 사용하는 경우
memset 은 위에서 답변드린 것으로 대신합니다. UNUSED 는 어떤 변수를 선언한 이후 사용하지 않으면 빌드후에 WARNING 이 발생하죠?. 단지, 이것을 막는 키워드입니다.
만약에 포팅을 할때 1년에 한번 잡는 치명적인 문제를 해결하는 코드가 들어갔다고 가정하면
0
82
2
STM32 포팅할 때 STM32 Project가 없음
0
213
2
FreeRTOS 멀티코어 지원안됨?
0
114
2
[소스코드 분석-configUSE_TIME_SLICING] TASK1,2의 우선순위가 동일할 때, configUSE_TIME_SLICING값 변경에 따른 출력 변화
0
104
2
포팅 부탁드립니다!
0
68
1
포팅 부탁드립니다. <NUCLEO-G071RB>
0
75
2
상호배제 후 되지를 않아서 질문드립니다.
0
72
1
수료증 발급 기준 수정 요청
1
86
1
재진입가능여부에 관한 질문
1
81
1
01_TASKMAN프로젝트 디버깅 모드 실패
1
95
2
그러면 malloc/free가 아닌 동적할당자를 써서 메모리를 할당했기떄문에
1
78
2
실행순서
1
84
2
uart 전송중에는 스위칭이 금지되나요?
1
83
2
스택오버플로우 실습 중 stack size 설정 질문
0
90
2
포팅 원합니다.
2
83
2
코루틴 실습질문
1
111
2
TODO 2번 문제
1
148
4
10. 선점형 커널 그림 설명중 우선순위가 반대인 경우에도 Task B가 먼저 수행되나요?
1
94
2
디버거모드에 진입이 안됩니다.
0
188
2
prvExampleTaskHook 함수 호출 부분에 대해 문의드립니다.
0
131
2
보드 STM32H735IG와 강의 호환 여부 문의
1
161
3
[ L152RE ] 원샷 소프트타이머 실행 잘 되시나요?
1
168
2
Deferred Interrupt Processing 샘플 예제 문의 드립니다.
1
123
2
포팅 서비스 부탁드립니다
1
131
2





