256 lines
9.1 KiB
C
256 lines
9.1 KiB
C
![]() |
#include "malloc.h"
|
|||
|
|
|||
|
/********************************************************************************
|
|||
|
* @file malloc.c
|
|||
|
* @author <EFBFBD>̳ϿƼ<EFBFBD> Mr.Wang
|
|||
|
* @version V1.0.0
|
|||
|
* @date 11-Dec-2018
|
|||
|
* @brief STM32<EFBFBD>ڲ<EFBFBD>RAM <EFBFBD><EFBFBD>̬<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
******************************************************************************
|
|||
|
*******************************************************************************/
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD>ڲ<EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
****************************************************************************/
|
|||
|
/*mem1<6D>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨.mem1<6D><31>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD> <20>ڲ<EFBFBD>SRAM <20><><EFBFBD><EFBFBD>*/
|
|||
|
#define MEM1_BLOCK_SIZE 32 //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ32<33>ֽ<EFBFBD>
|
|||
|
#define MEM1_MAX_SIZE (6*1024) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> 20K
|
|||
|
#define MEM1_ALLOC_TABLE_SIZE (MEM1_MAX_SIZE/MEM1_BLOCK_SIZE) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
|
|||
|
/*mem2<6D>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨.mem2<6D><32><EFBFBD>ڴ<EFBFBD><DAB4>ش<EFBFBD><D8B4><EFBFBD> <20>ⲿSRAM <20><><EFBFBD><EFBFBD>*/
|
|||
|
#define MEM2_BLOCK_SIZE 32 //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>СΪ32<33>ֽ<EFBFBD>
|
|||
|
#define MEM2_MAX_SIZE (32) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>960K û<><C3BB><EFBFBD>ⲿRAM<41><EFBFBD><F2B2BBB7><EFBFBD><EFBFBD>ռ䣬<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD>ᵼ<EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ZI-data<74>ܴ<DCB4><F3A3ACB2><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڴ<EFBFBD>ռ<EFBFBD><D5BC>
|
|||
|
#define MEM2_ALLOC_TABLE_SIZE (MEM2_MAX_SIZE/MEM2_BLOCK_SIZE) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
|
|||
|
/*<2A>ڴ<EFBFBD><DAB4><EFBFBD>(32<33>ֽڶ<D6BD><DAB6><EFBFBD>)*/
|
|||
|
__align(32) u8 mem1base[MEM1_MAX_SIZE]; //<2F>ڲ<EFBFBD>SRAM<41>ڴ<EFBFBD><DAB4><EFBFBD>,__align(32)<29><>Ҫ<EFBFBD>ڴ<EFBFBD>32bits<74><73><EFBFBD><EFBFBD>
|
|||
|
__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))); //<2F>ⲿSRAM<41>ڴ<EFBFBD><DAB4>أ<EFBFBD>__attribute__<5F><EFBFBD><DEB6>ڴ<EFBFBD><DAB4><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
|||
|
|
|||
|
/*<2A>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //<2F>ڲ<EFBFBD>SRAM<41>ڴ<EFBFBD><DAB4><EFBFBD>MAP
|
|||
|
u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE))); //<2F>ⲿSRAM<41>ڴ<EFBFBD><DAB4><EFBFBD>MAP
|
|||
|
|
|||
|
/*<2A>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
const u32 memtblsize[SRAMBANK] = {MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE}; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
const u32 memblksize[SRAMBANK] = {MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE}; //<2F>ڴ<EFBFBD><DAB4>ֿ<EFBFBD><D6BF><EFBFBD>С
|
|||
|
const u32 memsize[SRAMBANK] = {MEM1_MAX_SIZE,MEM2_MAX_SIZE}; //<2F>ڴ<EFBFBD><DAB4>ܴ<EFBFBD>С
|
|||
|
|
|||
|
/*<2A>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>*/
|
|||
|
struct MallocDev_s
|
|||
|
{
|
|||
|
void (*init)(u8); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
u8 (*perused)(u8); //<2F>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ʺ<EFBFBD><CABA><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
u8 *membase[SRAMBANK]; //<2F>ڴ<EFBFBD><DAB4>ػ<EFBFBD><D8BB><EFBFBD>ַ <20><><EFBFBD><EFBFBD>SRAMBANK<4E><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|||
|
u16 *memmap[SRAMBANK]; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|||
|
u8 memrdy[SRAMBANK]; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
} ;
|
|||
|
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
struct MallocDev_s sMallco_dev=
|
|||
|
{
|
|||
|
MyMenInit, //<2F>ڴ<EFBFBD><DAB4><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
MyMenPerused, //<2F>ڴ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
|
|||
|
mem1base,mem2base, //<2F>ڴ<EFBFBD><DAB4><EFBFBD>
|
|||
|
mem1mapbase,mem2mapbase, //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|||
|
0,0, //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|||
|
};
|
|||
|
/****************************************************************************/
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void MyMemcpy(void *des, void *src, u32 n<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 *des:Ŀ<EFBFBD>ĵ<EFBFBD>ַ
|
|||
|
* @param2 *src:Դ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param3 n: <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ڴ泤<EFBFBD><EFBFBD>(<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD>λ)
|
|||
|
****************************************************************************/
|
|||
|
void MyMemcpy(void *des, void *src, u32 n)
|
|||
|
{
|
|||
|
u8 *xdes = des ;
|
|||
|
u8 *xsrc = src ;
|
|||
|
while(n--)
|
|||
|
{
|
|||
|
*xdes++ = *xsrc++ ;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void MyMemset(void *s,u8 c,u32 count)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 *s:<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
* @param2 c :Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ֵ
|
|||
|
* @param3 count:<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>С(<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD>λ)
|
|||
|
****************************************************************************/
|
|||
|
void MyMemset(void *s, u8 c, u32 count)
|
|||
|
{
|
|||
|
u8 *xs = s ;
|
|||
|
while(count--)
|
|||
|
{
|
|||
|
*xs++ = c;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void MyMenInit(u8 memx)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
****************************************************************************/
|
|||
|
void MyMenInit(u8 memx)
|
|||
|
{
|
|||
|
MyMemset(sMallco_dev.memmap[memx], 0,memtblsize[memx]*2);//<2F>ڴ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
MyMemset(sMallco_dev.membase[memx], 0,memsize[memx]); //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
sMallco_dev.memrdy[memx]=1; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OK
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>u8 MyMenPerused(u8 memx)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ڴ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(0~100)
|
|||
|
****************************************************************************/
|
|||
|
u8 MyMenPerused(u8 memx)
|
|||
|
{
|
|||
|
u32 used = 0 ;
|
|||
|
u32 i ;
|
|||
|
for(i=0; i<memtblsize[memx]; i++)
|
|||
|
{
|
|||
|
if(sMallco_dev.memmap[memx][i])used++;
|
|||
|
}
|
|||
|
return (used*100)/(memtblsize[memx]) ;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>u8 MyMenMalloc(u8 memx)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 size:Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>С(<EFBFBD>ֽ<EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:0XFFFFFFFF,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD>ڴ<EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
|||
|
****************************************************************************/
|
|||
|
u32 MyMenMalloc(u8 memx,u32 size)
|
|||
|
{
|
|||
|
signed long offset = 0 ;
|
|||
|
u32 nmemb; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
u32 cmemb = 0 ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
u32 i ;
|
|||
|
if(!sMallco_dev.memrdy[memx]) sMallco_dev.init(memx); //δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
if(size==0) return 0XFFFFFFFF ; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
nmemb = size/memblksize[memx] ; //<2F><>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(size%memblksize[memx])nmemb++ ;
|
|||
|
for(offset=memtblsize[memx]-1; offset>=0; offset--) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if(!sMallco_dev.memmap[memx][offset]) cmemb++; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
else cmemb=0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(cmemb == nmemb) //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nmemb<6D><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|||
|
{
|
|||
|
for(i=0; i<nmemb; i++) //<2F><>ע<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ǿ<EFBFBD>
|
|||
|
{
|
|||
|
sMallco_dev.memmap[memx][offset+i] = nmemb ;
|
|||
|
}
|
|||
|
return (offset*memblksize[memx]) ; //<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
|||
|
}
|
|||
|
}
|
|||
|
return 0XFFFFFFFF ; //δ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>u8 MyMemFree(u8 memx,u32 offset)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>(<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 offset:<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַƫ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:0,<EFBFBD>ͷųɹ<EFBFBD>;1,<EFBFBD>ͷ<EFBFBD>ʧ<EFBFBD><EFBFBD>;
|
|||
|
****************************************************************************/
|
|||
|
u8 MyMemFree(u8 memx, u32 offset)
|
|||
|
{
|
|||
|
int i;
|
|||
|
if(!sMallco_dev.memrdy[memx]) //δ<><CEB4>ʼ<EFBFBD><CABC>,<2C><>ִ<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
{
|
|||
|
sMallco_dev.init(memx) ;
|
|||
|
return 1 ; //δ<><CEB4>ʼ<EFBFBD><CABC>
|
|||
|
}
|
|||
|
if(offset<memsize[memx]) //ƫ<><C6AB><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
{
|
|||
|
int index=offset/memblksize[memx] ; //ƫ<><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int nmemb=sMallco_dev.memmap[memx][index] ; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<nmemb;i++) //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
sMallco_dev.memmap[memx][index+i]=0 ;
|
|||
|
}
|
|||
|
return 0 ;
|
|||
|
}else return 2 ; //ƫ<>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void MyFree(u8 memx,void *ptr)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>(<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 ptr:<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
****************************************************************************/
|
|||
|
void MyFree(u8 memx, void *ptr)
|
|||
|
{
|
|||
|
u32 offset ;
|
|||
|
if(ptr==NULL) return ; //<2F><>ַΪ0.
|
|||
|
offset=(u32)ptr-(u32)sMallco_dev.membase[memx] ;
|
|||
|
MyMemFree(memx,offset) ; //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void *MyMalloc(u8 memx,u32 size)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 size:<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>С(<EFBFBD>ֽ<EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ.
|
|||
|
****************************************************************************/
|
|||
|
void *MyMalloc(u8 memx, u32 size)
|
|||
|
{
|
|||
|
u32 offset ;
|
|||
|
offset = MyMenMalloc(memx,size) ;
|
|||
|
if(offset==0XFFFFFFFF) return NULL ;
|
|||
|
else return (void*)((u32)sMallco_dev.membase[memx]+offset) ;
|
|||
|
}
|
|||
|
|
|||
|
/****************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD>void *MyRealloc(u8 memx,void *ptr,u32 size)
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>(<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 memx:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 *ptr:<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
* @param3 size:Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>С(<EFBFBD>ֽ<EFBFBD>)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:<EFBFBD>·<EFBFBD><EFBFBD>䵽<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
****************************************************************************/
|
|||
|
void *MyRealloc(u8 memx, void *ptr, u32 size)
|
|||
|
{
|
|||
|
u32 offset ;
|
|||
|
offset = MyMenMalloc(memx,size) ;
|
|||
|
if(offset==0XFFFFFFFF) return NULL ;
|
|||
|
else
|
|||
|
{
|
|||
|
MyMemcpy((void*)((u32)sMallco_dev.membase[memx]+offset),ptr,size) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|||
|
MyFree(memx,ptr) ; //<2F>ͷž<CDB7><C5BE>ڴ<EFBFBD>
|
|||
|
return (void*)((u32)sMallco_dev.membase[memx]+offset) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|