diff --git a/inc/FreeRTOS.h b/inc/FreeRTOS.h index f589a27..68931ff 100644 --- a/inc/FreeRTOS.h +++ b/inc/FreeRTOS.h @@ -431,7 +431,7 @@ #endif #ifndef configRECORD_STACK_HIGH_ADDRESS - #define configRECORD_STACK_HIGH_ADDRESS 0 + #define configRECORD_STACK_HIGH_ADDRESS 1 #endif #ifndef configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H diff --git a/src/tasks.c b/src/tasks.c index 988d8aa..4d2f000 100644 --- a/src/tasks.c +++ b/src/tasks.c @@ -5000,3 +5000,28 @@ static void prvAddCurrentTaskToDelayedList(TickType_t xTicksToWait, #endif #endif /* if ( configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H == 1 ) */ + + +// Добавьте в конец файла task.c (после всех функций) + +void vTaskGetCurrentTaskStackInfo( void ** ppvStackStart, void ** ppvStackEnd ) +{ + TCB_t * pxTCB = pxCurrentTCB; + + if( ppvStackStart != NULL ) + { + *ppvStackStart = ( void * ) pxTCB->pxStack; + } + + if( ppvStackEnd != NULL ) + { +#if ( configRECORD_STACK_HIGH_ADDRESS == 1 ) + *ppvStackEnd = ( void * ) pxTCB->pxEndOfStack; +#else + // Если pxEndOfStack не определён, можно вычислить его, зная размер стека. + // Но размер стека (в словах) не хранится в TCB. Поэтому либо включите + // configRECORD_STACK_HIGH_ADDRESS, либо используйте фиксированный лимит. + *ppvStackEnd = NULL; +#endif + } +} \ No newline at end of file