OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5661|回复: 9

分配内存求解

[复制链接]

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
发表于 2013-6-24 11:03:48 | 显示全部楼层 |阅读模式

//设置内存
//*s:内存首地址
//c :要设置的值  设置为0表示什么
//count:需要设置的内存大小(字节为单位)
void mymemset(void *s,u8 c,u32 count) 

    u8 *xs = s; 
    while(count--)*xs++=c; 
}                

//内存管理初始化 
//memx:所属内存块
void mem_init(u8 memx) 

    mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零   这个地方为什么×2
 mymemset(mallco_dev.membase[memx], 0,memsize[memx]); //内存池所有数据清零 
 mallco_dev.memrdy[memx]=1;        //内存管理初始化OK 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
发表于 2013-6-24 11:12:14 | 显示全部楼层
回复【楼主位】grant:
---------------------------------
u16=u8*2       因为mymemset(void *s,u8 c,u32 count)每次循环只写入u8大小的数据 ,而 mallco_dev.memmap[memx], 元素的大小是u16
回复 支持 反对

使用道具 举报

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
 楼主| 发表于 2013-6-24 14:07:01 | 显示全部楼层
回复【2楼】liyanchao153:
---------------------------------
这个解释对吗?
回复 支持 反对

使用道具 举报

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
 楼主| 发表于 2013-6-24 15:05:00 | 显示全部楼层
//获取内存使用率
//memx:所属内存块
//返回值:使用率(0~100)
u8 mem_perused(u8 memx) 

    u32 used=0; 
    u32 i; 
    for(i=0;i<memtblsize[memx];i++) 
    { 
        if(mallco_dev.memmap[memx])used++;               结构体对应是一维数组,现在引用怎么是二维 有点晕
    }
    return (used*100)/(memtblsize[memx]); 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-24 16:00:06 | 显示全部楼层
//内存管理控制器
struct _m_mallco_dev
{
void (*init)(u8); //初始化
u8 (*perused)(u8);         //内存使用率
u8  *membase[2]; //内存池 管理2个区域的内存
u16 *memmap[2];  //内存管理状态表
u8  memrdy[2];  //内存管理是否就绪
};
结构体是这个.
指针数组,可以指向二维数组啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-24 16:00:31 | 显示全部楼层
至于楼主位的问题,就是个u16嘛...
memset函数针对的是u8型的,自然要*2了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
 楼主| 发表于 2013-6-24 16:28:21 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
//内存管理控制器
struct _m_mallco_dev mallco_dev=
{
mem_init, //内存初始化
mem_perused, //内存使用率
mem1base,mem2base, //内存池
mem1mapbase,mem2mapbase,//内存管理状态表
0,0,   //内存管理未就绪
};

这个相当于结构体赋值。
mallco_dev.memmap[0]=mem1mapbase的首地址
mallco_dev.memmap[1]=mem2mapbase的首地址

mem1mapbase,mem2mapbase是一维数组
if(mallco_dev.memmap[memx])这不和结构体定义冲突?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-24 16:36:45 | 显示全部楼层
要冲突编译器不报错?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-24 16:37:02 | 显示全部楼层
编译器已经告诉你答案的问题,就不要来问了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
发表于 2013-6-24 17:17:58 | 显示全部楼层
回复【3楼】grant:
---------------------------------
虽然语言不怎么通顺,我就这样理解的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 10:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表