diff --git a/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_4.c b/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_4.c index 9ec5af5..67187dc 100755 --- a/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_4.c +++ b/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_4.c @@ -308,6 +308,33 @@ BlockLink_t *pxLink; } /*-----------------------------------------------------------*/ +void *pvPortRealloc( void *pv, size_t xWantedSize ) +{ +void *pvReturn = NULL; + + if(pv) + { + BlockLink_t *pxLink = (BlockLink_t *)((char*)pv - xHeapStructSize); + if(pxLink->xBlockSize & xBlockAllocatedBit) + { + uint32_t blockSize = (pxLink->xBlockSize & ~xBlockAllocatedBit); + blockSize -= (xHeapStructSize + HEAP_CHECK_SIZE); + pvReturn = pvPortMalloc(xWantedSize); + if(pvReturn) + { + memcpy(pvReturn, pv, blockSize); + vPortFree(pv); + } + } + } + else { + pvReturn = pvPortMalloc(xWantedSize); + } + + return pvReturn; +} +/*-----------------------------------------------------------*/ + size_t xPortGetFreeHeapSize( void ) { return xFreeBytesRemaining; diff --git a/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_5.c b/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_5.c index 2f8675d..c45cbc4 100755 --- a/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_5.c +++ b/FreeRTOS-Classic/FreeRTOS/Source/portable/MemMang/heap_5.c @@ -317,6 +317,33 @@ BlockLink_t *pxLink; } /*-----------------------------------------------------------*/ +void *pvPortRealloc( void *pv, size_t xWantedSize ) +{ +void *pvReturn = NULL; + + if(pv) + { + BlockLink_t *pxLink = (BlockLink_t *)((char*)pv - uxHeapStructSize); + if(pxLink->xBlockSize & xBlockAllocatedBit) + { + uint32_t blockSize = (pxLink->xBlockSize & ~xBlockAllocatedBit); + blockSize -= (uxHeapStructSize + HEAP_CHECK_SIZE); + pvReturn = pvPortMalloc(xWantedSize); + if(pvReturn) + { + memcpy(pvReturn, pv, blockSize); + vPortFree(pv); + } + } + } + else { + pvReturn = pvPortMalloc(xWantedSize); + } + + return pvReturn; +} +/*-----------------------------------------------------------*/ + size_t xPortGetFreeHeapSize( void ) { return xFreeBytesRemaining;