Lines Matching +full:- +full:- +full:form

5  * SPDX-License-Identifier: MIT
71 #define heapADD_WILL_OVERFLOW( a, b ) ( ( a ) > ( heapSIZE_MAX - ( b ) ) )
73 /* Check if the subtraction operation ( a - b ) will result in underflow. */
80 …BLOCK_ALLOCATED_BITMASK ( ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 ) )
82 #define heapBLOCK_IS_ALLOCATED( pxBlock ) ( ( ( pxBlock->xBlockSize ) & heapBLOCK_ALLOCATED_…
83 #define heapALLOCATE_BLOCK( pxBlock ) ( ( pxBlock->xBlockSize ) |= heapBLOCK_ALLOCATED_B…
84 #define heapFREE_BLOCK( pxBlock ) ( ( pxBlock->xBlockSize ) &= ~heapBLOCK_ALLOCATED_…
86 /*-----------------------------------------------------------*/
92 * heap - probably so it can be placed in a special segment or address. */
136 ( ( uint8_t * ) ( pxBlock ) <= &( ucHeap[ configTOTAL_HEAP_SIZE - 1 ] ) ) )
138 /*-----------------------------------------------------------*/
154 /*-----------------------------------------------------------*/
158 static const size_t xHeapStructSize = ( sizeof( BlockLink_t ) + ( ( size_t ) ( portBYTE_ALIGNMENT -
171 /*-----------------------------------------------------------*/
194 … xAdditionalRequiredSize = portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ); in pvPortMalloc()
235 * structure is used to determine who owns the block - the application or in pvPortMalloc()
247 …while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != heapPROTECT_BLOCK_PO… in pvPortMalloc()
250 pxBlock = heapPROTECT_BLOCK_POINTER( pxBlock->pxNextFreeBlock ); in pvPortMalloc()
258 /* Return the memory space pointed to - jumping over the in pvPortMalloc()
260 …rn = ( void * ) ( ( ( uint8_t * ) heapPROTECT_BLOCK_POINTER( pxPreviousBlock->pxNextFreeBlock ) ) … in pvPortMalloc()
265 pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; in pvPortMalloc()
269 … configASSERT( heapSUBTRACT_WILL_UNDERFLOW( pxBlock->xBlockSize, xWantedSize ) == 0 ); in pvPortMalloc()
271 if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE ) in pvPortMalloc()
282 pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; in pvPortMalloc()
283 pxBlock->xBlockSize = xWantedSize; in pvPortMalloc()
286 pxNewBlockLink->pxNextFreeBlock = pxPreviousBlock->pxNextFreeBlock; in pvPortMalloc()
287 … pxPreviousBlock->pxNextFreeBlock = heapPROTECT_BLOCK_POINTER( pxNewBlockLink ); in pvPortMalloc()
294 xFreeBytesRemaining -= pxBlock->xBlockSize; in pvPortMalloc()
305 /* The block is being returned - it is allocated and owned in pvPortMalloc()
308 pxBlock->pxNextFreeBlock = NULL; in pvPortMalloc()
346 /*-----------------------------------------------------------*/
357 puc -= xHeapStructSize; in vPortFree()
364 configASSERT( pxLink->pxNextFreeBlock == NULL ); in vPortFree()
368 if( pxLink->pxNextFreeBlock == NULL ) in vPortFree()
370 /* The block is being returned to the heap - it is no longer in vPortFree()
377 if( heapSUBTRACT_WILL_UNDERFLOW( pxLink->xBlockSize, xHeapStructSize ) == 0 ) in vPortFree()
379 … ( void ) memset( puc + xHeapStructSize, 0, pxLink->xBlockSize - xHeapStructSize ); in vPortFree()
387 xFreeBytesRemaining += pxLink->xBlockSize; in vPortFree()
388 traceFREE( pv, pxLink->xBlockSize ); in vPortFree()
405 /*-----------------------------------------------------------*/
411 /*-----------------------------------------------------------*/
417 /*-----------------------------------------------------------*/
423 /*-----------------------------------------------------------*/
442 /*-----------------------------------------------------------*/
455 uxStartAddress += ( portBYTE_ALIGNMENT - 1 ); in prvHeapInit()
457 xTotalHeapSize -= ( size_t ) ( uxStartAddress - ( portPOINTER_SIZE_TYPE ) ucHeap ); in prvHeapInit()
474 uxEndAddress -= ( portPOINTER_SIZE_TYPE ) xHeapStructSize; in prvHeapInit()
477 pxEnd->xBlockSize = 0; in prvHeapInit()
478 pxEnd->pxNextFreeBlock = heapPROTECT_BLOCK_POINTER( NULL ); in prvHeapInit()
483 …pxFirstFreeBlock->xBlockSize = ( size_t ) ( uxEndAddress - ( portPOINTER_SIZE_TYPE ) pxFirstFreeBl… in prvHeapInit()
484 pxFirstFreeBlock->pxNextFreeBlock = heapPROTECT_BLOCK_POINTER( pxEnd ); in prvHeapInit()
486 /* Only one block exists - and it covers the entire usable heap space. */ in prvHeapInit()
487 xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize; in prvHeapInit()
488 xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize; in prvHeapInit()
490 /*-----------------------------------------------------------*/
499 …OTECT_BLOCK_POINTER( pxIterator->pxNextFreeBlock ) < pxBlockToInsert; pxIterator = heapPROTECT_BLO… in prvInsertBlockIntoFreeList()
513 if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert ) in prvInsertBlockIntoFreeList()
515 pxIterator->xBlockSize += pxBlockToInsert->xBlockSize; in prvInsertBlockIntoFreeList()
527 …if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) heapPROTECT_BLOCK_POINTER( pxIterator->… in prvInsertBlockIntoFreeList()
529 if( heapPROTECT_BLOCK_POINTER( pxIterator->pxNextFreeBlock ) != pxEnd ) in prvInsertBlockIntoFreeList()
531 /* Form one big block from the two blocks. */ in prvInsertBlockIntoFreeList()
532 …pxBlockToInsert->xBlockSize += heapPROTECT_BLOCK_POINTER( pxIterator->pxNextFreeBlock )->xBlockSiz… in prvInsertBlockIntoFreeList()
533 …pxBlockToInsert->pxNextFreeBlock = heapPROTECT_BLOCK_POINTER( pxIterator->pxNextFreeBlock )->pxNex… in prvInsertBlockIntoFreeList()
537 pxBlockToInsert->pxNextFreeBlock = heapPROTECT_BLOCK_POINTER( pxEnd ); in prvInsertBlockIntoFreeList()
542 pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; in prvInsertBlockIntoFreeList()
551 pxIterator->pxNextFreeBlock = heapPROTECT_BLOCK_POINTER( pxBlockToInsert ); in prvInsertBlockIntoFreeList()
558 /*-----------------------------------------------------------*/
579 if( pxBlock->xBlockSize > xMaxSize ) in vPortGetHeapStats()
581 xMaxSize = pxBlock->xBlockSize; in vPortGetHeapStats()
584 if( pxBlock->xBlockSize < xMinSize ) in vPortGetHeapStats()
586 xMinSize = pxBlock->xBlockSize; in vPortGetHeapStats()
591 pxBlock = heapPROTECT_BLOCK_POINTER( pxBlock->pxNextFreeBlock ); in vPortGetHeapStats()
597 pxHeapStats->xSizeOfLargestFreeBlockInBytes = xMaxSize; in vPortGetHeapStats()
598 pxHeapStats->xSizeOfSmallestFreeBlockInBytes = xMinSize; in vPortGetHeapStats()
599 pxHeapStats->xNumberOfFreeBlocks = xBlocks; in vPortGetHeapStats()
603 pxHeapStats->xAvailableHeapSpaceInBytes = xFreeBytesRemaining; in vPortGetHeapStats()
604 pxHeapStats->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations; in vPortGetHeapStats()
605 pxHeapStats->xNumberOfSuccessfulFrees = xNumberOfSuccessfulFrees; in vPortGetHeapStats()
606 pxHeapStats->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining; in vPortGetHeapStats()
610 /*-----------------------------------------------------------*/