callgraph: vPortExitCritical/24 (vPortExitCritical) @06ad4e00 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call) Calls: vPortEnterCritical/23 (vPortEnterCritical) @06ad4c40 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call) Calls: xTaskResumeAll/22 (xTaskResumeAll) @06ad42a0 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call) vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (214748 (estimated locally),0.93 per call) Calls: vTaskSuspendAll/21 (vTaskSuspendAll) @06ad40e0 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730857 (estimated locally),1.00 per call) vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (231566 (estimated locally),1.00 per call) Calls: vPortGetHeapStats/20 (vPortGetHeapStats) @06ac60e0 Type: function definition analyzed Visibility: externally_visible public References: xStart/6 (read)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulFrees/11 (read)xMinimumEverFreeBytesRemaining/9 (read) Referring: Availability: available Function flags: count:168730857 (estimated locally) body optimize_size Called by: Calls: vPortExitCritical/24 (168730858 (estimated locally),1.00 per call) vPortEnterCritical/23 (168730858 (estimated locally),1.00 per call) xTaskResumeAll/22 (168730858 (estimated locally),1.00 per call) vTaskSuspendAll/21 (168730857 (estimated locally),1.00 per call) prvInsertBlockIntoFreeList/19 (prvInsertBlockIntoFreeList) @06ac6d20 Type: function definition analyzed Visibility: prevailing_def_ironly References: xStart/6 (addr)pxEnd/7 (read) Referring: Availability: local Function flags: count:118111600 (estimated locally) body local nonfreeing_fn optimize_size Called by: vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (8283 (estimated locally),0.04 per call) Calls: prvHeapInit/18 (prvHeapInit) @06ac6a80 Type: function definition analyzed Visibility: prevailing_def_ironly References: ucHeap/4 (addr)xStart/6 (write)xStart/6 (write)pxEnd/7 (write)xMinimumEverFreeBytesRemaining/9 (write)xFreeBytesRemaining/8 (write)xBlockAllocatedBit/12 (write) Referring: Function prvHeapInit/18 is inline copy in pvPortMalloc/13 Availability: local Function flags: count:40362 (estimated locally) body local nonfreeing_fn optimize_size Called by: pvPortMalloc/13 (inlined) (40362 (estimated locally),0.17 per call) Calls: vPortInitialiseBlocks/17 (vPortInitialiseBlocks) @06ac67e0 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body nonfreeing_fn optimize_size Called by: Calls: xPortGetMinimumEverFreeHeapSize/16 (xPortGetMinimumEverFreeHeapSize) @06ac6540 Type: function definition analyzed Visibility: externally_visible public References: xMinimumEverFreeBytesRemaining/9 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body nonfreeing_fn optimize_size Called by: Calls: xPortGetFreeHeapSize/15 (xPortGetFreeHeapSize) @06ac62a0 Type: function definition analyzed Visibility: externally_visible public References: xFreeBytesRemaining/8 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body nonfreeing_fn optimize_size Called by: Calls: vPortFree/14 (vPortFree) @06ac6000 Type: function definition analyzed Visibility: externally_visible public References: xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xNumberOfSuccessfulFrees/11 (read)xNumberOfSuccessfulFrees/11 (write) Referring: Availability: available Function flags: count:306783 (estimated locally) body optimize_size Called by: Calls: xTaskResumeAll/22 (18715 (estimated locally),0.06 per call) prvInsertBlockIntoFreeList/19 (18715 (estimated locally),0.06 per call) vTaskSuspendAll/21 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (pvPortMalloc) @06abeee0 Type: function definition analyzed Visibility: externally_visible public References: pxEnd/7 (read)xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xStart/6 (read)xStart/6 (addr)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xMinimumEverFreeBytesRemaining/9 (read)xMinimumEverFreeBytesRemaining/9 (write)xBlockAllocatedBit/12 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulAllocations/10 (write) Referring: Availability: available Function flags: count:231566 (estimated locally) body optimize_size Called by: Calls: xTaskResumeAll/22 (214748 (estimated locally),0.93 per call) prvInsertBlockIntoFreeList/19 (8283 (estimated locally),0.04 per call) prvHeapInit/18 (inlined) (40362 (estimated locally),0.17 per call) vTaskSuspendAll/21 (231566 (estimated locally),1.00 per call) Clearing variable flags: Promotable global:pxEnd (uid=6222) Promotable global:xFreeBytesRemaining (uid=6223) Promotable global:xMinimumEverFreeBytesRemaining (uid=6224) Promotable global:xNumberOfSuccessfulAllocations (uid=6225) Promotable global:xNumberOfSuccessfulFrees (uid=6226) Promotable global:xBlockAllocatedBit (uid=6227) Function name:vPortGetHeapStats/20: locals read: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xNumberOfSuccessfulAllocations xNumberOfSuccessfulFrees locals written: Function name:prvInsertBlockIntoFreeList/19: locals read: pxEnd locals written: Function name:prvHeapInit/18: locals read: locals written: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xBlockAllocatedBit Function name:vPortInitialiseBlocks/17: locals read: locals written: Function name:xPortGetMinimumEverFreeHeapSize/16: locals read: xMinimumEverFreeBytesRemaining locals written: Function name:xPortGetFreeHeapSize/15: locals read: xFreeBytesRemaining locals written: Function name:vPortFree/14: locals read: xFreeBytesRemaining xNumberOfSuccessfulFrees xBlockAllocatedBit locals written: xFreeBytesRemaining xNumberOfSuccessfulFrees Function name:pvPortMalloc/13: locals read: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xNumberOfSuccessfulAllocations xBlockAllocatedBit locals written: xFreeBytesRemaining xMinimumEverFreeBytesRemaining xNumberOfSuccessfulAllocations ordered call graph: reduced vPortGetHeapStats/20 (vPortGetHeapStats) @06ac60e0 Type: function definition analyzed Visibility: externally_visible public Aux: @04b94670 References: xStart/6 (read)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulFrees/11 (read)xMinimumEverFreeBytesRemaining/9 (read) Referring: Availability: available Function flags: count:168730857 (estimated locally) body optimize_size Called by: Calls: vPortExitCritical/24 (168730858 (estimated locally),1.00 per call) vPortEnterCritical/23 (168730858 (estimated locally),1.00 per call) xTaskResumeAll/22 (168730858 (estimated locally),1.00 per call) vTaskSuspendAll/21 (168730857 (estimated locally),1.00 per call) vPortInitialiseBlocks/17 (vPortInitialiseBlocks) @06ac67e0 Type: function definition analyzed Visibility: externally_visible public Aux: @04b946f0 References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body nonfreeing_fn optimize_size Called by: Calls: xPortGetMinimumEverFreeHeapSize/16 (xPortGetMinimumEverFreeHeapSize) @06ac6540 Type: function definition analyzed Visibility: externally_visible public Aux: @04b94330 References: xMinimumEverFreeBytesRemaining/9 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body nonfreeing_fn optimize_size Called by: Calls: xPortGetFreeHeapSize/15 (xPortGetFreeHeapSize) @06ac62a0 Type: function definition analyzed Visibility: externally_visible public Aux: @04b944f0 References: xFreeBytesRemaining/8 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body nonfreeing_fn optimize_size Called by: Calls: vPortFree/14 (vPortFree) @06ac6000 Type: function definition analyzed Visibility: externally_visible public Aux: @04b945b0 References: xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xNumberOfSuccessfulFrees/11 (read)xNumberOfSuccessfulFrees/11 (write) Referring: Availability: available Function flags: count:306783 (estimated locally) body optimize_size Called by: Calls: xTaskResumeAll/22 (18715 (estimated locally),0.06 per call) prvInsertBlockIntoFreeList/19 (18715 (estimated locally),0.06 per call) vTaskSuspendAll/21 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (pvPortMalloc) @06abeee0 Type: function definition analyzed Visibility: externally_visible public Aux: @04b94370 References: pxEnd/7 (read)xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xStart/6 (read)xStart/6 (addr)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xMinimumEverFreeBytesRemaining/9 (read)xMinimumEverFreeBytesRemaining/9 (write)xBlockAllocatedBit/12 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulAllocations/10 (write) Referring: Availability: available Function flags: count:231566 (estimated locally) body optimize_size Called by: Calls: xTaskResumeAll/22 (214748 (estimated locally),0.93 per call) prvInsertBlockIntoFreeList/19 (8283 (estimated locally),0.04 per call) prvHeapInit/18 (inlined) (40362 (estimated locally),0.17 per call) vTaskSuspendAll/21 (231566 (estimated locally),1.00 per call) prvHeapInit/18 (prvHeapInit) @06ac6a80 Type: function definition analyzed Visibility: prevailing_def_ironly Aux: @04b94430 References: ucHeap/4 (addr)xStart/6 (write)xStart/6 (write)pxEnd/7 (write)xMinimumEverFreeBytesRemaining/9 (write)xFreeBytesRemaining/8 (write)xBlockAllocatedBit/12 (write) Referring: Function prvHeapInit/18 is inline copy in pvPortMalloc/13 Availability: local Function flags: count:40362 (estimated locally) body local nonfreeing_fn optimize_size Called by: pvPortMalloc/13 (inlined) (40362 (estimated locally),0.17 per call) Calls: prvInsertBlockIntoFreeList/19 (prvInsertBlockIntoFreeList) @06ac6d20 Type: function definition analyzed Visibility: prevailing_def_ironly Aux: @04b94410 References: xStart/6 (addr)pxEnd/7 (read) Referring: Availability: local Function flags: count:118111600 (estimated locally) body local nonfreeing_fn optimize_size Called by: vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (8283 (estimated locally),0.04 per call) Calls: Function name:prvInsertBlockIntoFreeList/19: locals read: pxEnd locals written: globals read: pxEnd globals written: Function name:prvHeapInit/18: locals read: locals written: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xBlockAllocatedBit globals read: globals written: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xBlockAllocatedBit Function name:pvPortMalloc/13: locals read: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xNumberOfSuccessfulAllocations xBlockAllocatedBit locals written: xFreeBytesRemaining xMinimumEverFreeBytesRemaining xNumberOfSuccessfulAllocations globals read: ALL globals written: ALL Function name:vPortFree/14: locals read: xFreeBytesRemaining xNumberOfSuccessfulFrees xBlockAllocatedBit locals written: xFreeBytesRemaining xNumberOfSuccessfulFrees globals read: ALL globals written: ALL Function name:xPortGetFreeHeapSize/15: locals read: xFreeBytesRemaining locals written: globals read: xFreeBytesRemaining globals written: Function name:xPortGetMinimumEverFreeHeapSize/16: locals read: xMinimumEverFreeBytesRemaining locals written: globals read: xMinimumEverFreeBytesRemaining globals written: Function name:vPortInitialiseBlocks/17: locals read: locals written: globals read: globals written: Function name:vPortGetHeapStats/20: locals read: pxEnd xFreeBytesRemaining xMinimumEverFreeBytesRemaining xNumberOfSuccessfulAllocations xNumberOfSuccessfulFrees locals written: globals read: ALL globals written: ALL vPortGetHeapStats (struct HeapStats_t * pxHeapStats) { size_t xMinSize; size_t xMaxSize; size_t xBlocks; struct BlockLink_t * pxBlock; unsigned int _1; struct BlockLink_t * pxEnd.26_3; unsigned int xFreeBytesRemaining.27_4; unsigned int xNumberOfSuccessfulAllocations.28_5; unsigned int xNumberOfSuccessfulFrees.29_6; unsigned int xMinimumEverFreeBytesRemaining.30_7; [local count: 168730857]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG xBlocks => 0 # DEBUG xMaxSize => 0 # DEBUG xMinSize => 4294967295 # DEBUG BEGIN_STMT vTaskSuspendAll (); # DEBUG BEGIN_STMT pxBlock_17 = xStart.pxNextFreeBlock; # DEBUG pxBlock => pxBlock_17 # DEBUG BEGIN_STMT if (pxBlock_17 != 0B) goto ; [70.00%] else goto ; [30.00%] [local count: 118111600]: [local count: 1073741824]: # pxBlock_8 = PHI # xBlocks_9 = PHI <0(5), xBlocks_18(6)> # xMaxSize_11 = PHI <0(5), xMaxSize_2(6)> # xMinSize_13 = PHI <4294967295(5), xMinSize_19(6)> # DEBUG xMinSize => xMinSize_13 # DEBUG xMaxSize => xMaxSize_11 # DEBUG xBlocks => xBlocks_9 # DEBUG pxBlock => pxBlock_8 # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xBlocks_18 = xBlocks_9 + 1; # DEBUG xBlocks => xBlocks_18 # DEBUG BEGIN_STMT _1 = pxBlock_8->xBlockSize; xMaxSize_2 = MAX_EXPR <_1, xMaxSize_11>; # DEBUG xMaxSize => xMaxSize_2 # DEBUG BEGIN_STMT xMinSize_19 = MIN_EXPR <_1, xMinSize_13>; # DEBUG xMinSize => xMinSize_19 # DEBUG BEGIN_STMT pxBlock_20 = pxBlock_8->pxNextFreeBlock; # DEBUG pxBlock => pxBlock_20 # DEBUG BEGIN_STMT pxEnd.26_3 = pxEnd; if (pxEnd.26_3 != pxBlock_20) goto ; [89.00%] else goto ; [11.00%] [local count: 955630225]: goto ; [100.00%] [local count: 168730858]: # xBlocks_10 = PHI <0(2), xBlocks_18(3)> # xMaxSize_12 = PHI <0(2), xMaxSize_2(3)> # xMinSize_14 = PHI <4294967295(2), xMinSize_19(3)> # DEBUG xMinSize => xMinSize_14 # DEBUG xMaxSize => xMaxSize_12 # DEBUG xBlocks => xBlocks_10 # DEBUG BEGIN_STMT xTaskResumeAll (); # DEBUG BEGIN_STMT pxHeapStats_22(D)->xSizeOfLargestFreeBlockInBytes = xMaxSize_12; # DEBUG BEGIN_STMT pxHeapStats_22(D)->xSizeOfSmallestFreeBlockInBytes = xMinSize_14; # DEBUG BEGIN_STMT pxHeapStats_22(D)->xNumberOfFreeBlocks = xBlocks_10; # DEBUG BEGIN_STMT vPortEnterCritical (); # DEBUG BEGIN_STMT xFreeBytesRemaining.27_4 = xFreeBytesRemaining; pxHeapStats_22(D)->xAvailableHeapSpaceInBytes = xFreeBytesRemaining.27_4; # DEBUG BEGIN_STMT xNumberOfSuccessfulAllocations.28_5 = xNumberOfSuccessfulAllocations; pxHeapStats_22(D)->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations.28_5; # DEBUG BEGIN_STMT xNumberOfSuccessfulFrees.29_6 = xNumberOfSuccessfulFrees; pxHeapStats_22(D)->xNumberOfSuccessfulFrees = xNumberOfSuccessfulFrees.29_6; # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining.30_7 = xMinimumEverFreeBytesRemaining; pxHeapStats_22(D)->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining.30_7; # DEBUG BEGIN_STMT vPortExitCritical (); return; } prvInsertBlockIntoFreeList (struct BlockLink_t * pxBlockToInsert) { struct BlockLink_t * pxIterator; struct A_BLOCK_LINK * _1; unsigned int _2; uint8_t * _3; unsigned int _5; unsigned int _6; unsigned int _7; uint8_t * _8; struct BlockLink_t * pxEnd.19_9; unsigned int _10; unsigned int _11; struct A_BLOCK_LINK * _12; struct A_BLOCK_LINK * _20; [local count: 118111600]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG pxIterator => &xStart [local count: 1073741824]: # pxIterator_14 = PHI <&xStart(2), _1(14)> # DEBUG pxIterator => pxIterator_14 # DEBUG BEGIN_STMT _1 = pxIterator_14->pxNextFreeBlock; if (_1 < pxBlockToInsert_19(D)) goto ; [89.00%] else goto ; [11.00%] [local count: 955630223]: goto ; [100.00%] [local count: 118111601]: # _20 = PHI <_1(3)> # pxIterator_4 = PHI # DEBUG BEGIN_STMT # DEBUG puc => pxIterator_4 # DEBUG BEGIN_STMT _2 = pxIterator_4->xBlockSize; _3 = pxIterator_4 + _2; if (_3 == pxBlockToInsert_19(D)) goto ; [30.00%] else goto ; [70.00%] [local count: 35433480]: # DEBUG BEGIN_STMT _5 = pxBlockToInsert_19(D)->xBlockSize; _6 = _2 + _5; pxIterator_4->xBlockSize = _6; # DEBUG BEGIN_STMT # DEBUG pxBlockToInsert => pxIterator_4 [local count: 118111601]: # pxBlockToInsert_13 = PHI # DEBUG pxBlockToInsert => pxBlockToInsert_13 # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG puc => pxBlockToInsert_13 # DEBUG BEGIN_STMT _7 = pxBlockToInsert_13->xBlockSize; _8 = pxBlockToInsert_13 + _7; if (_8 == _20) goto ; [30.00%] else goto ; [70.00%] [local count: 35433480]: # DEBUG BEGIN_STMT pxEnd.19_9 = pxEnd; if (pxEnd.19_9 != _20) goto ; [70.00%] else goto ; [30.00%] [local count: 24803436]: # DEBUG BEGIN_STMT _10 = _20->xBlockSize; _11 = _7 + _10; pxBlockToInsert_13->xBlockSize = _11; # DEBUG BEGIN_STMT _12 = _20->pxNextFreeBlock; pxBlockToInsert_13->pxNextFreeBlock = _12; goto ; [100.00%] [local count: 10630044]: # DEBUG BEGIN_STMT pxBlockToInsert_13->pxNextFreeBlock = pxEnd.19_9; goto ; [100.00%] [local count: 82678120]: # DEBUG BEGIN_STMT pxBlockToInsert_13->pxNextFreeBlock = _20; [local count: 118111601]: # DEBUG BEGIN_STMT if (pxIterator_4 != pxBlockToInsert_13) goto ; [70.00%] else goto ; [30.00%] [local count: 82678120]: # DEBUG BEGIN_STMT pxIterator_4->pxNextFreeBlock = pxBlockToInsert_13; [local count: 118111601]: # DEBUG BEGIN_STMT return; } prvHeapInit () { size_t xTotalHeapSize; size_t uxAddress; uint8_t * pucAlignedHeap; unsigned int _1; unsigned int _2; struct BlockLink_t * uxAddress.14_3; unsigned int _4; [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG xTotalHeapSize => 8192 # DEBUG BEGIN_STMT uxAddress_7 = (size_t) &ucHeap; # DEBUG uxAddress => uxAddress_7 # DEBUG BEGIN_STMT _1 = uxAddress_7 & 7; if (_1 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 536870913]: # DEBUG BEGIN_STMT uxAddress_8 = uxAddress_7 + 7; # DEBUG uxAddress => uxAddress_8 # DEBUG BEGIN_STMT uxAddress_9 = uxAddress_8 & 4294967288; # DEBUG uxAddress => uxAddress_9 # DEBUG BEGIN_STMT _2 = 8192 - uxAddress_9; xTotalHeapSize_10 = _2 + uxAddress_7; # DEBUG xTotalHeapSize => xTotalHeapSize_10 [local count: 1073741824]: # uxAddress_5 = PHI # xTotalHeapSize_6 = PHI <8192(2), xTotalHeapSize_10(3)> # DEBUG xTotalHeapSize => xTotalHeapSize_6 # DEBUG uxAddress => uxAddress_5 # DEBUG BEGIN_STMT pucAlignedHeap_11 = (uint8_t *) uxAddress_5; # DEBUG pucAlignedHeap => pucAlignedHeap_11 # DEBUG BEGIN_STMT xStart.pxNextFreeBlock = pucAlignedHeap_11; # DEBUG BEGIN_STMT xStart.xBlockSize = 0; # DEBUG BEGIN_STMT uxAddress_15 = uxAddress_5 + xTotalHeapSize_6; # DEBUG uxAddress => uxAddress_15 # DEBUG BEGIN_STMT uxAddress_16 = uxAddress_15 + 4294967288; # DEBUG uxAddress => uxAddress_16 # DEBUG BEGIN_STMT uxAddress_17 = uxAddress_16 & 4294967288; # DEBUG uxAddress => uxAddress_17 # DEBUG BEGIN_STMT uxAddress.14_3 = (struct BlockLink_t *) uxAddress_17; pxEnd = uxAddress.14_3; # DEBUG BEGIN_STMT uxAddress.14_3->xBlockSize = 0; # DEBUG BEGIN_STMT uxAddress.14_3->pxNextFreeBlock = 0B; # DEBUG BEGIN_STMT # DEBUG pxFirstFreeBlock => pucAlignedHeap_11 # DEBUG BEGIN_STMT _4 = uxAddress_17 - uxAddress_5; MEM[(struct BlockLink_t *)pucAlignedHeap_11].xBlockSize = _4; # DEBUG BEGIN_STMT MEM[(struct BlockLink_t *)pucAlignedHeap_11].pxNextFreeBlock = uxAddress.14_3; # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining = _4; # DEBUG BEGIN_STMT xFreeBytesRemaining = _4; # DEBUG BEGIN_STMT xBlockAllocatedBit = 2147483648; return; } vPortInitialiseBlocks () { [local count: 1073741824]: # DEBUG BEGIN_STMT return; } xPortGetMinimumEverFreeHeapSize () { size_t _2; [local count: 1073741824]: # DEBUG BEGIN_STMT _2 = xMinimumEverFreeBytesRemaining; return _2; } xPortGetFreeHeapSize () { size_t _2; [local count: 1073741824]: # DEBUG BEGIN_STMT _2 = xFreeBytesRemaining; return _2; } vPortFree (void * pv) { uint32_t ulNewBASEPRI; uint32_t ulNewBASEPRI; uint8_t * puc; unsigned int _1; unsigned int xBlockAllocatedBit.21_2; unsigned int _3; struct A_BLOCK_LINK * _4; unsigned int _5; unsigned int _6; unsigned int _7; unsigned int xFreeBytesRemaining.24_8; unsigned int _9; unsigned int xNumberOfSuccessfulFrees.25_10; unsigned int _11; [local count: 306783]: # DEBUG BEGIN_STMT # DEBUG puc => pv_13(D) # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT if (pv_13(D) != 0B) goto ; [70.00%] else goto ; [30.00%] [local count: 214748]: # DEBUG BEGIN_STMT puc_15 = pv_13(D) + 4294967288; # DEBUG puc => puc_15 # DEBUG BEGIN_STMT # DEBUG pxLink => puc_15 # DEBUG BEGIN_STMT _1 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize; xBlockAllocatedBit.21_2 = xBlockAllocatedBit; _3 = _1 & xBlockAllocatedBit.21_2; if (_3 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_22 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_22 [local count: 1073741823]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT [local count: 1073741824]: goto ; [100.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT _4 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].pxNextFreeBlock; if (_4 != 0B) goto ; [82.57%] else goto ; [17.43%] [local count: 88659]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_23 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_23 [local count: 886588623]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT [local count: 886588623]: goto ; [100.00%] [local count: 18715]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT _5 = ~xBlockAllocatedBit.21_2; _6 = _1 & _5; MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize = _6; # DEBUG BEGIN_STMT vTaskSuspendAll (); # DEBUG BEGIN_STMT _7 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize; xFreeBytesRemaining.24_8 = xFreeBytesRemaining; _9 = _7 + xFreeBytesRemaining.24_8; xFreeBytesRemaining = _9; # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT prvInsertBlockIntoFreeList (puc_15); # DEBUG BEGIN_STMT xNumberOfSuccessfulFrees.25_10 = xNumberOfSuccessfulFrees; _11 = xNumberOfSuccessfulFrees.25_10 + 1; xNumberOfSuccessfulFrees = _11; # DEBUG BEGIN_STMT xTaskResumeAll (); [local count: 110750]: # DEBUG BEGIN_STMT return; } pvPortMalloc (size_t xWantedSize) { uint32_t ulNewBASEPRI; uint32_t ulNewBASEPRI; void * pvReturn; struct BlockLink_t * pxNewBlockLink; struct BlockLink_t * pxPreviousBlock; struct BlockLink_t * pxBlock; struct BlockLink_t * pxEnd.0_1; unsigned int xBlockAllocatedBit.1_2; unsigned int _3; unsigned int _4; unsigned int _5; unsigned int _6; unsigned int _7; unsigned int xFreeBytesRemaining.2_9; unsigned int _10; struct A_BLOCK_LINK * _11; struct BlockLink_t * pxEnd.3_12; struct A_BLOCK_LINK * _13; struct A_BLOCK_LINK * _14; unsigned int _15; unsigned int pxNewBlockLink.4_16; unsigned int _17; unsigned int xFreeBytesRemaining.5_18; unsigned int _19; unsigned int _20; unsigned int xMinimumEverFreeBytesRemaining.7_21; unsigned int xBlockAllocatedBit.9_22; unsigned int _23; unsigned int xNumberOfSuccessfulAllocations.10_24; unsigned int _25; unsigned int pvReturn.11_26; unsigned int _27; unsigned int _57; [local count: 231566]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG pvReturn => 0B # DEBUG BEGIN_STMT vTaskSuspendAll (); # DEBUG BEGIN_STMT pxEnd.0_1 = pxEnd; if (pxEnd.0_1 == 0B) goto ; [17.43%] else goto ; [82.57%] [local count: 40362]: # DEBUG BEGIN_STMT prvHeapInit (); [local count: 231566]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xBlockAllocatedBit.1_2 = xBlockAllocatedBit; _3 = xBlockAllocatedBit.1_2 & xWantedSize_39(D); if (_3 == 0) goto ; [83.25%] else goto ; [16.75%] [local count: 192779]: # DEBUG BEGIN_STMT _4 = xWantedSize_39(D) + 4294967295; if (_4 <= 4294967286) goto ; [71.00%] else goto ; [29.00%] [local count: 136873]: # DEBUG BEGIN_STMT xWantedSize_40 = xWantedSize_39(D) + 8; # DEBUG xWantedSize => xWantedSize_40 # DEBUG BEGIN_STMT _5 = xWantedSize_40 & 7; if (_5 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 68436]: # DEBUG BEGIN_STMT _6 = xWantedSize_40 & 4294967288; _7 = _6 + 8; if (_7 > xWantedSize_40) goto ; [71.00%] else goto ; [29.00%] [local count: 117026]: # xWantedSize_28 = PHI <_7(7), xWantedSize_40(6)> # DEBUG xWantedSize => xWantedSize_28 # DEBUG BEGIN_STMT if (xWantedSize_28 != 0) goto ; [71.00%] else goto ; [29.00%] [local count: 83089]: xFreeBytesRemaining.2_9 = xFreeBytesRemaining; if (xFreeBytesRemaining.2_9 >= xWantedSize_28) goto ; [71.00%] else goto ; [29.00%] [local count: 58993]: # DEBUG BEGIN_STMT # DEBUG pxPreviousBlock => &xStart # DEBUG BEGIN_STMT pxBlock_41 = xStart.pxNextFreeBlock; # DEBUG pxBlock => pxBlock_41 # DEBUG BEGIN_STMT [local count: 551465]: # pxBlock_29 = PHI # pxPreviousBlock_30 = PHI <&xStart(10), pxBlock_29(28)> # DEBUG pxPreviousBlock => pxPreviousBlock_30 # DEBUG pxBlock => pxBlock_29 # DEBUG BEGIN_STMT _10 = pxBlock_29->xBlockSize; if (_10 < xWantedSize_28) goto ; [94.50%] else goto ; [5.50%] [local count: 521134]: _11 = pxBlock_29->pxNextFreeBlock; if (_11 != 0B) goto ; [94.50%] else goto ; [5.50%] [local count: 492472]: goto ; [100.00%] [local count: 58993]: # _57 = PHI <_10(11), _10(12)> # pxBlock_54 = PHI # pxPreviousBlock_8 = PHI # DEBUG BEGIN_STMT pxEnd.3_12 = pxEnd; if (pxEnd.3_12 != pxBlock_54) goto ; [85.10%] else goto ; [14.90%] [local count: 50203]: # DEBUG BEGIN_STMT _13 = pxPreviousBlock_8->pxNextFreeBlock; pvReturn_42 = _13 + 8; # DEBUG pvReturn => pvReturn_42 # DEBUG BEGIN_STMT _14 = pxBlock_54->pxNextFreeBlock; pxPreviousBlock_8->pxNextFreeBlock = _14; # DEBUG BEGIN_STMT _15 = _57 - xWantedSize_28; if (_15 > 16) goto ; [50.00%] else goto ; [50.00%] [local count: 25102]: # DEBUG BEGIN_STMT pxNewBlockLink_44 = pxBlock_54 + xWantedSize_28; # DEBUG pxNewBlockLink => pxNewBlockLink_44 # DEBUG BEGIN_STMT pxNewBlockLink.4_16 = (unsigned int) pxNewBlockLink_44; _17 = pxNewBlockLink.4_16 & 7; if (_17 != 0) goto ; [67.00%] else goto ; [33.00%] [local count: 16818]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_55 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_55 [local count: 168180375]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT [local count: 168180375]: goto ; [100.00%] [local count: 8283]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT pxNewBlockLink_44->xBlockSize = _15; # DEBUG BEGIN_STMT pxBlock_54->xBlockSize = xWantedSize_28; # DEBUG BEGIN_STMT prvInsertBlockIntoFreeList (pxNewBlockLink_44); [local count: 33385]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xFreeBytesRemaining.5_18 = xFreeBytesRemaining; _19 = pxBlock_54->xBlockSize; _20 = xFreeBytesRemaining.5_18 - _19; xFreeBytesRemaining = _20; # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining.7_21 = xMinimumEverFreeBytesRemaining; if (_20 < xMinimumEverFreeBytesRemaining.7_21) goto ; [50.00%] else goto ; [50.00%] [local count: 16693]: # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining = _20; [local count: 33385]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xBlockAllocatedBit.9_22 = xBlockAllocatedBit; _23 = _19 | xBlockAllocatedBit.9_22; pxBlock_54->xBlockSize = _23; # DEBUG BEGIN_STMT pxBlock_54->pxNextFreeBlock = 0B; # DEBUG BEGIN_STMT xNumberOfSuccessfulAllocations.10_24 = xNumberOfSuccessfulAllocations; _25 = xNumberOfSuccessfulAllocations.10_24 + 1; xNumberOfSuccessfulAllocations = _25; [local count: 214748]: # pvReturn_31 = PHI <0B(4), 0B(9), 0B(8), 0B(13), pvReturn_42(21), 0B(7), 0B(5)> # DEBUG xWantedSize => NULL # DEBUG pvReturn => pvReturn_31 # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xTaskResumeAll (); # DEBUG BEGIN_STMT pvReturn.11_26 = (unsigned int) pvReturn_31; _27 = pvReturn.11_26 & 7; if (_27 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_56 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_56 [local count: 1073741824]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT [local count: 1073741824]: goto ; [100.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT return pvReturn_31; }