From 2c88fb7fa1600a92a437a81937464715b12cb00b Mon Sep 17 00:00:00 2001 From: Gaurav Aggarwal Date: Sat, 16 Feb 2019 20:21:47 +0000 Subject: [PATCH] Fix build failure when dynamic allocation is not enabled. When dynamic allocation is not enabled, vPortFree is not available. The current code used vPortFree and this resulted in linker error. This commit removes the use of vPortFree when dynamic allocation is not enabled. --- FreeRTOS/Source/timers.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/FreeRTOS/Source/timers.c b/FreeRTOS/Source/timers.c index 3c0b46267..51dfa0ce6 100644 --- a/FreeRTOS/Source/timers.c +++ b/FreeRTOS/Source/timers.c @@ -301,7 +301,7 @@ BaseType_t xReturn = pdFAIL; return pxNewTimer; } -#endif /* configSUPPORT_STATIC_ALLOCATION */ +#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ /*-----------------------------------------------------------*/ #if( configSUPPORT_STATIC_ALLOCATION == 1 ) @@ -820,17 +820,29 @@ TickType_t xTimeNow; break; case tmrCOMMAND_DELETE : - /* The timer has already been removed from the active list, - just free up the memory if the memory was dynamically - allocated. */ - if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 ) + #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) { - vPortFree( pxTimer ); + /* The timer has already been removed from the active list, + just free up the memory if the memory was dynamically + allocated. */ + if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 ) + { + vPortFree( pxTimer ); + } + else + { + pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; + } } - else + #else { + /* If dynamic allocation is not enabled, the memory + could not have been dynamically allocated. So there is + no need to free the memory - just mark the timer as + "not active". */ pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; } + #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ break; default :