/* * memory.c * * Created on: 2021Äê12ÔÂ25ÈÕ * Author: graydon */ #include #include #include "memory.h" //L1¿Õ¼ä #define L1_DM1_SIZE 64*1024+16 #define L1_DM2_SIZE 0 #define L1_PM_SIZE 64*1024+16 static char l1mem_dm[L1_DM1_SIZE]; static char l1mem_dm2[L1_DM2_SIZE]; static pm char l1mem_pm[L1_PM_SIZE]; //ÓÉÓÚL1·ÇÁ¬Ðø£¬ÐèÒª¶¨ÖÆÄÚ´æ. #define BANKNUM 3 static int memIndex[BANKNUM] ={255,255,255}; int sram_init() { // heap_init(SRAM_L2); // heap_init(SRAM_L1); // heap_init(SRAM_DDR); #if L1_DM1_SIZE> 0 memIndex[mem_dm1] = heap_install(l1mem_dm, L1_DM1_SIZE , 10); #endif #if L1_DM2_SIZE> 0 memIndex[mem_dm2] = heap_install(l1mem_dm2, L1_DM2_SIZE , 11); #endif #if L1_PM_SIZE> 0 memIndex[mem_pm] = heap_install(l1mem_pm, L1_PM_SIZE , 12); #endif return 0; } static void* sram_alloc_l1(meml1_sub_type subType, int size) { int i, memid; void* ptr = NULL; switch(subType){ case mem_dm1: case mem_dm2: case mem_pm: if(memIndex[subType] != 255) ptr = heap_malloc(memIndex[subType],size); break; case mem_heap: ptr = heap_malloc(SRAM_L1,size); break; case mem_any: ptr = heap_malloc(SRAM_L1,size); if(ptr) break; ptr = heap_malloc(memIndex[mem_dm1],size); if(ptr) break; ptr = heap_malloc(memIndex[mem_dm2],size); if(ptr) break; ptr = heap_malloc(memIndex[mem_pm],size); if(ptr) break; } if(ptr == NULL) { memid = -1; } return ptr; } void* sram_malloc(MemoryType memtype , meml1_sub_type subType ,int size) { void* p = NULL; switch(memtype) { case SRAM_L2: case SRAM_DDR: p = heap_malloc(memtype,size); break; case SRAM_L1: p = sram_alloc_l1(subType, size); break; case SRAM_AUTO: p = sram_alloc_l1(subType, size); if(p == NULL) { p = heap_malloc(SRAM_L2,size); } if(p == NULL) { p = heap_malloc(SRAM_DDR,size); } break; default: break; } return p; } void sram_free(MemoryType memtype ,void* ptr) { if(memtype < SRAM_AUTO) { heap_free(memtype, ptr); } } int sram_free_space(MemoryType memtype, meml1_sub_type subType) { int size = 0; int memid ; switch(memtype) { case SRAM_L2: case SRAM_DDR: size = heap_space_unused(memtype); break; case SRAM_L1: switch(subType) { case mem_heap: size = heap_space_unused(memtype); break; case mem_pm: case mem_dm1: case mem_dm2: size = heap_space_unused(memIndex[subType]); break; } break; case SRAM_AUTO: break; default: break; } return size; }