U32 *aMemory = mymalloc(SRAMEX, GUI_NUMBYTES); //从外部SRAM中分配GUI_NUMBYTES字节的内存
GUI_ALLOC_AssignMemory((void*)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少
外部地址定义:__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0x68000000))); //外部SRAM内存池
函数如上,但是这个 aMemory 返回的地址为如图片所示:
---------------------------------
设置为全局结果也是一样 的
---------------------------------
你好,程序运行
u32 mem_malloc(u8 memx,u32 size)
{
signed long offset=0;
u16 nmemb; //需要的内存块数
u16 cmemb=0;//连续空内存块数
u32 i;
if(!mallco_dev.memrdy[memx])
mallco_dev.init(memx); //未初始化,先执行初始化
if(size == 0)
return 0XFFFFFFFF; //不需要分配
nmemb=size/memblksize[memx]; //获取需要分配的连续内存块数
if(size % memblksize[memx])
nmemb++;
for(offset = memtblsize[memx]-1; offset>=0; offset--)//搜索整个内存控制区
{
if(!mallco_dev.memmap[memx][offset])
cmemb++; //连续空内存块数增加 (1)
else
cmemb=0; //连续内存块清零 (2)
if(cmemb == nmemb) //找到了连续nmemb个空内存块
{
for(i=0;i<nmemb;i++) //标注内存块非空
{
mallco_dev.memmap[memx][offset+i]=nmemb;
}
return (offset*memblksize[memx]); //返回偏移地址
}
}
return 0XFFFFFFFF;//未找到符合分配条件的内存块
}
上面的程序运行仿真时,始终都不会运行到括号 1 处执行程序,每次都运行到括号 2,请教下是什么情况啊 ???>
一周热门 更多>