Оптимально-простой в соответствии с ранее изложенными принципами менеджер памяти.
Подгибать, немного по месту, естественно, надо.
Инициализация у меня, например, в одном из применений выглядит примерно так:
Код
#pragma segment="HEAP_RTOS"
#pragma segment="XXX_STACK"
void init_system_heap( int add_ram_id )
{
system_heap.start = (heap_mcb *)(__segment_begin( "HEAP_RTOS"));
system_heap.freem = (heap_mcb *)(__segment_begin( "HEAP_RTOS"));
system_heap.hsize = (ulong)(__segment_begin( "XXX_STACK")) - (ulong)(__segment_begin( "HEAP_RTOS")) + 1;
heapinit( &system_heap );
if( add_ram_id == 2148 ) // LPC2148 USB Memory as General prupose RAM
heapadd( &system_heap, (void *)0x7FD00000, 0x2000 );
}
Для стандартной FreeRTOS можно для начала обертки сделать
Код
#define pvPortMalloc( size ) malloc_z( &system_heap, (size), MARK_SYSTEM, NULL )
#define vPortFree( ptr ) free_z( &system_heap, (ptr) )
Прикрепленные файлы
MEM.rar ( 3.2 килобайт )
Кол-во скачиваний: 318