:::: MENU ::::

«bare metal» malloc

Во встраиваемых системах без ОС, обычно не используют выделение памяти — malloc. Но, если очень хочется — то можно…

Что-бы использовать библиотечную функцию  malloc, вначале необходимо указать размер heap(кучи). Именно из heap выделяется память для malloc. Для STM32 в keil размер heap указывается в startup_stm32xxx_xx.s файле:

Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

Или можно написать свой malloc — что-то вроде этого:

extern char buff_malloc[1024];
extern char *p_buff_malloc = &buff_malloc[0];
extern uint16_t free_size_buff_malloc = 1024;
 
void *my_malloc(uint16_t size)
{
  char *tmp;
  if(free_size_buff_malloc > size)
  {
    tmp = p_buff_malloc;
    p_buff_malloc += size;
    free_size_buff_malloc -= size;
  }
  else
  {
    // обработчик переполнения
  }
  return tmp;
}