[FreeRTOS] Task에서 사용하고 있는 최대 Stack Size 확인 법

2021. 7. 23. 11:042018년 이전 관심사/프로그램 언어

반응형

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 );
    }
}

 

반응형