/* * sdram_hp.c * Description: * * Created on: 2014-10-8 * Author: DELL * Modify: */ #include #include #include #include "hmem.h" //int _heap_install(void *base, size_t length, int userid, int pmdm /* -1 dm, 1 pm */); #define dm_size (32*1024)//-6080*2) #define pm_size (0*1024) #define dm_static_size (16*1024) #define sdram_size (1024*1024*8) static int* pdm=0,*ppm=0, *pdm_static =0,*psdram =0 ; static int dm_index =0 ,pm_index=0,sdram_index=0 ,dm_static_index=0; static unsigned short total_inner_mem = 0; static void dm_mem_init(void) { pdm = (void*)0x000e0000;//(void*)malloc(dm_size);(void*)0x000e0000; assert(pdm!=0); dm_index =0; pdm_static = (void*)0x000b8000; } static void* dm_static_malloc(int size) { void* p = pdm_static + dm_static_index; if(dm_static_index + size > dm_static_size){ return 0; } dm_static_index += size; return p; } static void* dm_malloc(int size) { void* p = pdm+dm_index; if(dm_index + size>dm_size){ return 0; } dm_index += size; return p; } static void dm_entrie_free(void) { dm_index=0; dm_static_index =0; } static void pm_mem_init(void) { ppm = (void*)0x000C5000; // assert(size<=pm_size); pm_index =0; } static void pm* pm_malloc(int size) { void* p = ppm+pm_index; if(pm_index + size>pm_size){ return 0; } pm_index += size; return (void pm*)p; } static void pm_entrie_free(void) { pm_index=0; } static void sdram_mem_init(void) { //sdram_index = heap_install((void*)0x00800000, sdram_size, 999, -1); psdram = (void*)0x00660000; sdram_index =0; //assert (sdram_index > 0); } static void* sdram_malloc(int size) { //return heap_malloc(sdram_index,size); void* p = psdram+sdram_index; if(sdram_index + size>sdram_size){ return 0; } sdram_index += size; return p; } static void sdram_free(void* _ptr) { //heap_free(sdram_index, _ptr); } static void sdram_entrie_free(void) { sdram_index =0; } uvoid hmem_init() { sdram_mem_init(); dm_mem_init(); pm_mem_init(); total_inner_mem = dm_size + pm_size + dm_static_size; } uvoidptr mymalloc(mymalloc_style type, uint32_t size) { uvoidptr ptr = unull; switch(type){ case SRAM_DM: ptr = dm_malloc(size); if(ptr == unull){ ptr = dm_static_malloc(size); } break; case SRAM_PM: ptr = pm_malloc(size); break; case SRAM_DDR: ptr = sdram_malloc(size); break; case SRAM_AUTO: ptr = dm_static_malloc(size); if(ptr == unull){ ptr = pm_malloc(size); } if(ptr == unull){ ptr = dm_malloc(size); } if(ptr == unull){ ptr = sdram_malloc(size); } break; } if(ptr == unull){ ptr = unull; } return ptr; } uvoid myfree(mymalloc_style type, uvoidptr ptr) { switch(type){ case SRAM_DM: break; case SRAM_PM: break; case SRAM_DDR: sdram_free(ptr); break; case SRAM_AUTO: break; } } short hmem_perused(mymalloc_style type) { short used =0; float used_ratio = 0; switch(type){ case SRAM_DM: used = dm_index+dm_static_index; used = used*100/(dm_size+dm_static_size); break; case SRAM_PM: // used = pm_index; // used = used*100/pm_size; break; case SRAM_DDR: used = sdram_index; used = used*100/sdram_size; break; case SRAM_AUTO: used = dm_index+dm_static_index + pm_index; used_ratio = ((float)used)/((float)total_inner_mem); used = used_ratio*10000; //used = used*100/(dm_size+pm_size+dm_static_size); break; } return used; } uvoid hmem_free() { dm_entrie_free(); pm_entrie_free(); sdram_entrie_free(); } void* sram_malloc(int memtype , int size) { void* p = 0; if(memtype == 2) { p =mymalloc(SRAM_DDR, size); } else { p = mymalloc(SRAM_AUTO, size); } return p; } void sram_free(int memtype ,void* ptr) { } int sram_free_space(int memtype) { return 0; }