[FreeRTOS] Task에서 사용하고 있는 최대 Stack Size 확인 법
2021. 7. 23. 11:04ㆍ2018년 이전 관심사/프로그램 언어
반응형
FreeRTOS 기반으로 어플리케이션을 개발 하다 보면, Task의 Stack Size 설정이 필요하며 이를 적절한 값으로 설정해야 할 필요가 있다.
FreeRTOS에서 제공하고 있는, uxTaskGetStackHighWaterMark 함수를 이용하면, 동작하고 있는 Task에 얼마만큼 여유 Stack이 남아 있는지를 확인 할 수 있다.
- Returns
- Word 단위로 Stack Size가 Return 됨
- 예를 들어 32bit 머신에서 1은 4bytes의 stack size가 사용되지 않고 있다는 의미
- Return되는 값이 0인 경우, Stack Overflow 발생( 사용 가능한 Stack이 남아 있지 않다는 의미 )
uxTaskGetStackHighWaterMark 기능을 사용하기 위해서는 아래 절차를 수행 하면 된다.
1. FreeRTOSConfig.h에 아래와 같이 설정
#define INCLUDE_uxTaskGetStackHighWaterMark 1
2. 남은 Stack Size를 확인하고 싶은 Task에 uxTaskGetStackHighWaterMark 함수를 수행하고 리턴 되는 값을 확인 하면 남은 Stack Size(Word 단위)를 알 수 있다.
void vTask1( void * pvParameters )
{
UBaseType_t uxHighWaterMark;
/* Inspect our own high water mark on entering the task. */
uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );
for( ;; )
{
/* Call any function. */
vTaskDelay( 1000 );
/* Calling the function will have used some stack space, we would
therefore now expect uxTaskGetStackHighWaterMark() to return a
value lower than when it was called on entering the task. */
uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );
}
}
반응형
'2018년 이전 관심사 > 프로그램 언어' 카테고리의 다른 글
[Python] eval(), exec() 함수 (0) | 2022.03.07 |
---|---|
[Python] 상위 폴더 import 방법 (0) | 2022.02.12 |
[C언어] NULL, 0 관련 (0) | 2021.07.22 |
[C언어]printf string format %*.*s (0) | 2021.07.20 |
[C#, Winform]Password 입력 항목 구현 (0) | 2021.07.15 |