OpenEdv-开源电子网

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

内存管理例程理解问题

[复制链接]

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2017-10-19 14:44:40 | 显示全部楼层 |阅读模式
2金钱
//内存管理初始化  
void mem_init(void)  
{  
    mymemset(mallco_dev.memmap, 0,memtblsize*2);//内存状态表数据清零
        mymemset(mallco_dev.membase, 0,memsize);        //内存池所有数据清零  
        mallco_dev.memrdy=1;                                                //内存管理初始化OK  
}
其中 mymemset(mallco_dev.memmap, 0,memtblsize*2);//内存状态表数据清零 memtblsize*2中为啥要乘2?

最佳答案

查看完整内容[请看2#楼]

一个是 U16 一个是 U32,自然要 *2
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-10-19 14:44:41 | 显示全部楼层
一个是 U16  一个是 U32,自然要 *2
我有故事,你有酒吗
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
 楼主| 发表于 2017-10-19 14:58:02 | 显示全部楼层
谁来解答下?
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
 楼主| 发表于 2017-10-19 17:48:02 | 显示全部楼层
来俩不甜的 发表于 2017-10-19 15:13
一个是 U16  一个是 U32,自然要 *2

U16   U32只是表示数据的范围啊,跟这个memtblsize乘不乘2有啥关系?
我觉得应该是mallco_dev.memmap这个量是U16的,占两个字节,而在memset时,这个count表示的是初始化为0的字节数,所以乘2了。
还有下面一句mymemset(mallco_dev.membase, 0,memsize);中mensize就没有乘2,这是因为mallco_dev.membase是U8的,占一个字节,这是我的理解
你觉得呢?
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
 楼主| 发表于 2017-10-19 17:58:04 | 显示全部楼层
来俩不甜的 发表于 2017-10-19 15:13
一个是 U16  一个是 U32,自然要 *2

32单片机中一个地址“占四个字节”,但是只能“存一个字节”。
举个例子:在地址0x40010800处存了一个数据0xff。
这个地址0x40010800要占四个字节来存储,但是这个地址0x40010800位置上只能存储0xff这样的一个字节。
这样子的话:U16在32中占两个字节存放,u32占四个字节存放,u8占一个字节存放。
这样子就理解清楚了
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-10-20 00:38:13 | 显示全部楼层
mallco_dev.memmap是数组首地址,且是u16类型的,memtblsize表示数组的元素个数,而设置函数,是以字节为单位的。自然要乘以2,
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
 楼主| 发表于 2017-10-20 08:37:52 | 显示全部楼层
正点原子 发表于 2017-10-20 00:38
mallco_dev.memmap是数组首地址,且是u16类型的,memtblsize表示数组的元素个数,而设置函数,是以字节为单 ...

想明白了,谢谢
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 10:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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