stackoverflow 검출 방법 관련해서 질문이 있습니다.
693
작성한 질문수 1
올려주신 강의를 잘 보고 있습니다.
스택오버플로우 검출 관련해서 질문이 있습니다.
말씀해 주신 것 처럼, FreeRTOS 가이드에서 제공된 방법은 stackoverflow를 검출을 "할수는 있다" 정도인듯 한데요. 정리하자면, 현재 환경(st-link, CubeIDE)에서 런타임 중 stackoverflow를 신뢰성 있게 확인 할 수 있는 방법은 없다라고 이해하면 될까요.
추가로, 말씀해주신 stackoverflow 검출을 하는 방법이 FreeRTOS만 그런 것인지 다른 RTOS(상용 OS, 뉴클리어스 등)에서도 적용되는지, 다른방법이 있다면 어떤 것들이 있는지 궁금합니다.
답변 1
0
정범종님!!! 안녕하세요. 우선 제 영상을 선택해주셔서 감사합니다.
임베디드 소프트웨어 개발시 스택오버플로우는 개발자가 항시 주의를 기울여야 하는 주제입니다.
특히 CM(cortex-Mx) 의 경우 메모리 크기가 상대적으로 작기 때문에 더욱 조심해야 하죠.
스택오버플로우를 검사하는 방법을 RTOS 커널 내에서 제공해 준다는 점은 환영할 일임은 틀림없겠지만, 아쉽게도 마이크로 C 오에스나 FreeRTOS 모두 완성도 높은 방법을 제시하고 있지는 않습니다.
문맥전환을 할 때 호출되는 함수인 vTaskSwitchContext 내부에서 '스택오버플로우 검사'를 하도록 구현되어 있죠. 문맥전환시에만 스택오버플로우를 검출하기에 실시간 검사라고 부를 수는 없는 노릇이고, 검사 결과 자체도 100% 무결함 검사법은 아닙니다.
하지만, 개발자가 이러한 특징을 알고 사용한다는 전제하에 이 방법이 '스택오버플로우 검사' 의 보조적인 도구로서의 가치는 있다고 생각합니다.
void vTaskSwitchContext( void )
{
. . .
/* Check for stack overflow, if configured. */
taskCHECK_FOR_STACK_OVERFLOW();
. . .
}
하지만, 도구는 도구일 뿐이고, 가장 중요한 것은 스택오버플로우에 대한 개발자의 지속적인 관심일 겁니다.
우리가 금과옥조로 믿고 있는 전역변수의 단점은 더이상 소용량 메모리 풋프린트 시스템에서는 해당되지 않는 말일 수도 있습니다. 이러한 시스템에서는 약간의 단점을 감수하더라도 전역변수를 적극적으로 사용해야 할 수도 있다는 말이죠.
전역 변수의 적극적인 사용이 태스크 스택의 개별 사이즈를 작게 만들 수 있는데 기여를 하고, 스택오버플로우의 발생 위험을 낮추는 일석이조의 효과를 낼 수 있는 것이죠.
기타 방법을 말씀드립니다.
TRACE32 와 같은 ICD 을 이용하면 스택오버플로우 검사를 할 수 있는 것으로 알고 있습니다. 더 자세한 내용은 찾아보셔야 할거에요.
Q. 추가로, 말씀해주신 stackoverflow 검출을 하는 방법이 FreeRTOS만 그런 것인지 다른 RTOS(상용 OS, 뉴클리어스 등)에서도 적용되는지, 다른방법이 있다면 어떤 것들이 있는지 궁금합니다.
=> 제가 오래 전에 개발할 적에는 스택 검사 기능을 사용하지 않았었기 때문에, 다른 OS(뉴클레오스, vxworks 등) 에서 지원해 주는지 여부를 알지 못합니다.
여기까지입니다. 추가적인 질문이 있으시면 글 남겨주세요.
- 메모리 크기가 작은 시스템에서의 소프트웨어 개발은 고통스럽다 -
글 수정 2021-7-4 오전 7:24
만약에 포팅을 할때 1년에 한번 잡는 치명적인 문제를 해결하는 코드가 들어갔다고 가정하면
0
58
2
STM32 포팅할 때 STM32 Project가 없음
0
176
2
FreeRTOS 멀티코어 지원안됨?
0
89
2
[소스코드 분석-configUSE_TIME_SLICING] TASK1,2의 우선순위가 동일할 때, configUSE_TIME_SLICING값 변경에 따른 출력 변화
0
87
2
포팅 부탁드립니다!
0
61
1
포팅 부탁드립니다. <NUCLEO-G071RB>
0
67
2
상호배제 후 되지를 않아서 질문드립니다.
0
62
1
수료증 발급 기준 수정 요청
1
73
1
재진입가능여부에 관한 질문
1
68
1
01_TASKMAN프로젝트 디버깅 모드 실패
1
77
2
그러면 malloc/free가 아닌 동적할당자를 써서 메모리를 할당했기떄문에
1
72
2
실행순서
1
77
2
uart 전송중에는 스위칭이 금지되나요?
1
75
2
스택오버플로우 실습 중 stack size 설정 질문
0
84
2
포팅 원합니다.
2
77
2
코루틴 실습질문
1
101
2
TODO 2번 문제
1
141
4
10. 선점형 커널 그림 설명중 우선순위가 반대인 경우에도 Task B가 먼저 수행되나요?
1
82
2
디버거모드에 진입이 안됩니다.
0
177
2
prvExampleTaskHook 함수 호출 부분에 대해 문의드립니다.
0
121
2
보드 STM32H735IG와 강의 호환 여부 문의
1
153
3
[ L152RE ] 원샷 소프트타이머 실행 잘 되시나요?
1
159
2
Deferred Interrupt Processing 샘플 예제 문의 드립니다.
1
121
2
포팅 서비스 부탁드립니다
1
125
2





