请教下,使用 mymalloc 这个函数 后返回的 是0x200xxxxxx ???

2019-07-20 17:34发布

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 返回的地址为如图片所示:
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
正点原子
1楼-- · 2019-07-20 20:51
除非代码有问题,否则返回值,肯定是0X6800xxxx的地址
哇哈哈+
2楼-- · 2019-07-20 22:20
是你调试的方法有问题,你把U32 *aMemory 设置为全局试试 不行再试试设置不优化的
ROCK
3楼-- · 2019-07-20 22:39
 精彩回答 2  元偷偷看……
hpdell
4楼-- · 2019-07-21 04:19
 精彩回答 2  元偷偷看……
hpdell
5楼-- · 2019-07-21 05:12
回复【3楼】哇哈哈+:
---------------------------------
设置为全局结果也是一样 的
hpdell
6楼-- · 2019-07-21 05:42
回复【2楼】正点原子:
---------------------------------
你好,程序运行
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,请教下是什么情况啊 ???>

一周热门 更多>