OpenEdv-开源电子网

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

原子哥,内存管理实验

[复制链接]

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-8-15
在线时间
0 小时
发表于 2013-11-27 09:58:26 | 显示全部楼层 |阅读模式
原子哥,在内存管理实验中,机构体
struct _m_mallco_dev
{
void (*init)(u8);
u8 (*perused)(u8);  
u8 *membase[2];
u16 *memmap[2];
u8  memrdy[2];
};

struct _m_mallco_dev mallco_dev=
{
mem_init,
mem_perused,
mem1base,mem2base,
mem1mapbase,mem2mapbase,
0,0,  
};
这一句 struct  _m_mallco_dev  mallco_dev不就是定义 mallco_dev为结构体了么?那后面为什么还有
{
mem_init,
mem_perused,
mem1base,mem2base,
mem1mapbase,mem2mapbase,
0,0,  
};呢,里面的元素是相当于
{
void (*init)(u8);
u8 (*perused)(u8);   
u8  *membase[2];
u16 *memmap[2]; 
u8  memrdy[2]; 
};这里面类型的元素么?还有void (*init)(u8);和u8 (*perused)(u8); 只是数据类型,也不是定义变量啊?





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

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-11-27 10:09:50 | 显示全部楼层
回复【楼主位】专注:
---------------------------------
好好 补习下 C 知识 ,函数指针 用法
1-1
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-8-15
在线时间
0 小时
 楼主| 发表于 2013-11-27 10:12:02 | 显示全部楼层
回复【楼主位】专注:
---------------------------------
原子哥,我现在有个新理解,就是
struct _m_mallco_dev mallco_dev=
{
mem_init,
mem_perused,
mem1base,mem2base,
mem1mapbase,mem2mapbase,
0,0,  
};是对结构体类型变量的初始化,mem_init相当于void (*init)(u8)类型的了,以后引用结构体变量就直接用mem1base了而不用mallco_dev.memmap[]了;不知道对不对?
一个小问题,void (*init)(u8)到底是什么类型啊最后,前边是强制转换成整型指针,后面怎么又有了void呢?
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-8-15
在线时间
0 小时
 楼主| 发表于 2013-11-27 10:13:05 | 显示全部楼层
回复【2楼】mygod:
---------------------------------
struct _m_mallco_dev mallco_dev= 

mem_init,
mem_perused,
mem1base,mem2base,
mem1mapbase,mem2mapbase, 
0,0,  
};是对结构体类型变量的初始化,mem_init相当于void (*init)(u8)类型的了,以后引用结构体变量就直接用mem1base了而不用mallco_dev.memmap[]了;不知道对不对? 
一个小问题,void (*init)(u8)到底是什么类型啊最后,前边是强制转换成整型指针,后面怎么又有了void呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-27 10:43:57 | 显示全部楼层
回复【4楼】专注:
---------------------------------
void (*init)(u8)  这是个函数指针...
可以指向所有  void  XXXX(u8 yyyy)的函数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2013-12-12 02:00:28 | 显示全部楼层
我是这样理解的:
结构体成员“void (*init)(u8);”是定义了一个指向函数的指针变量,该指针变量名是init;void表示该函数没有返回值;u8是函数的形参。结合本例:
void mem_init(u8 memx)  
{  
    mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零  
    mymemset(mallco_dev.membase[memx], 0,memsize[memx]); //内存池所有数据清零  
    mallco_dev.memrdy[memx]=1;//内存管理初始化OK  
}  
也就是说,本例中是要实现用指向函数的指针变量来表示函数。不知对不对?
感觉要理解本实验的代码和思路有点难度,主要是指针绕来绕去不好懂。c语言必须再回炉了。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 03:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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