Vehicle Control Unit 0.01
This is the c library for controlling the car.
Loading...
Searching...
No Matches
Functions | Variables
sysmem.c File Reference

STM32CubeIDE System Memory calls file. More...

#include <errno.h>
#include <stdint.h>
Include dependency graph for sysmem.c:

Go to the source code of this file.

Functions

void * _sbrk (ptrdiff_t incr)
 _sbrk() allocates memory to the newlib heap and is used by malloc and others from the C library More...
 

Variables

static uint8_t * __sbrk_heap_end = NULL
 

Detailed Description

STM32CubeIDE System Memory calls file.

Author
Generated by STM32CubeIDE
       For more information about which C functions
       need which of these lowlevel functions
       please consult the newlib libc manual
Attention

Copyright (c) 2024 STMicroelectronics. All rights reserved.

This software is licensed under terms that can be found in the LICENSE file in the root directory of this software component. If no LICENSE file comes with this software, it is provided AS-IS.

Definition in file sysmem.c.

Function Documentation

◆ _sbrk()

void * _sbrk ( ptrdiff_t  incr)

_sbrk() allocates memory to the newlib heap and is used by malloc and others from the C library

* ############################################################################
* #  .data  #  .bss  #       newlib heap       #          MSP stack          #
* #         #        #                         # Reserved by _Min_Stack_Size #
* ############################################################################
* ^-- RAM start      ^-- _end                             _estack, RAM end --^
* 

This implementation starts allocating at the '_end' linker symbol The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack The implementation considers '_estack' linker symbol to be RAM end NOTE: If the MSP stack, at any point during execution, grows larger than the reserved size, please increase the '_Min_Stack_Size'.

Parameters
incrMemory size
Returns
Pointer to allocated memory

Definition at line 53 of file sysmem.c.

54{
55 extern uint8_t _end; /* Symbol defined in the linker script */
56 extern uint8_t _estack; /* Symbol defined in the linker script */
57 extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
58 const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
59 const uint8_t *max_heap = (uint8_t *)stack_limit;
60 uint8_t *prev_heap_end;
61
62 /* Initialize heap end at first call */
63 if (NULL == __sbrk_heap_end)
64 {
65 __sbrk_heap_end = &_end;
66 }
67
68 /* Protect heap from growing into the reserved MSP stack */
69 if (__sbrk_heap_end + incr > max_heap)
70 {
71 errno = ENOMEM;
72 return (void *)-1;
73 }
74
75 prev_heap_end = __sbrk_heap_end;
76 __sbrk_heap_end += incr;
77
78 return (void *)prev_heap_end;
79}
static uint8_t * __sbrk_heap_end
Definition: sysmem.c:30

Variable Documentation

◆ __sbrk_heap_end

uint8_t* __sbrk_heap_end = NULL
static

Pointer to the current high watermark of the heap usage

Definition at line 30 of file sysmem.c.