中级会员
 
- 积分
- 343
- 金钱
- 343
- 注册时间
- 2013-10-28
- 在线时间
- 0 小时
|
5金钱
//内存管理表
u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部SRAM内存池MAP
u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE))); //外部SRAM内存池MAP
//内存管理参数
const u32 memtblsize[2]={MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE}; //内存表大小 0---1279,0---6143
const u32 memblksize[2]={MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE}; //内存分块大小
const u32 memsize[2]={MEM1_MAX_SIZE,MEM2_MAX_SIZE}; //内存总大小
//设置内存
//*s:内存首地址
//c :要设置的值
//count:需要设置的内存大小(字节为单位)
void mymemset(void *s,u8 c,u32 count)
{
u8 *xs = s; //这里是隐式转换,把void*转换为u8*
while(count--)*xs++=c;
}
//内存管理初始化
//memx:所属内存块
void mem_init(u8 memx)
{
mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零
mymemset(mallco_dev.membase[memx], 0,memsize[memx]); //内存池所有数据清零
mallco_dev.memrdy[memx]=1; //内存管理初始化OK
}
那个memtblsize数组不是32位的吗???还要乘以2,那内存管理表的编号岂不是扩大2倍了???
|
最佳答案
查看完整内容[请看2#楼]
不知道我的这样理解是否是对的??
//内存管理控制器
struct _m_mallco_dev
{
void (*init)(u8); //初始化
u8 (*perused)(u8); //内存使用率
u8 *membase[2]; //内存池 管理2个区域的内存
u16 *memmap[2]; //内存管理状态表
u8 memrdy[2]; //内存管理是否就绪
};
因为u16 *memmap[2];是u16的指针数组,而在mymemset(void *s,u8 c,u32 count)函数中把传入的内存管理表 ...
|