初级会员

- 积分
- 195
- 金钱
- 195
- 注册时间
- 2014-3-13
- 在线时间
- 47 小时
|
5金钱
在理解原子的内存管理代码时候

在文件中只是定义了外部SRAM的首地址,但是没有定义内部的SRAM地址,咨询了下 萌主 说是内部SRAM的地址由编译器指定的。
然后我就有点迷惑的是 既然内部的SRAM的地址是有编译器定义的,我们在操作这个内部SRAM时候,内部SRAM的地址是怎么传递出来的?
[mw_shl_code=c,true]//内存分配(内部调用)
//memx:所属内存块
//size:要分配的内存大小(字节)
//返回值:0XFFFFFFFF,代表错误;其他,内存偏移地址
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++;//连续空内存块数增加
else cmemb=0; //连续内存块清零
if(cmemb==nmemb) //找到了连续nmemb个空内存块
{
for(i=0;i<nmemb;i++) //标注内存块非空
{
mallco_dev.memmap[memx][offset+i]=nmemb;
}
return (offset*memblksize[memx]);//返回偏移地址
}
}
return 0XFFFFFFFF;//未找到符合分配条件的内存块
} [/mw_shl_code]
[mw_shl_code=c,true] return (offset*memblksize[memx]);//返回偏移地址
在这里是如何提现出内部SRAM的地址的呢
新手 有些问题抹不过弯来,请大神指条通天大道来 [/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
回复【2楼】随风灬而逝:
---------------------------------
mem1base这个数组就是内部RAM的内存池,然后通过内存申请函数在这个内存池中给应用分配内存,分配好以后就会将确定好的内存段首地址返回给你的应用,你的应用直接使用这个首地址就行了,这个地址就是在内部RAM的范围之内的!
|