OpenEdv-开源电子网

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

关于结构指针

[复制链接]

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
发表于 2013-6-7 23:33:49 | 显示全部楼层 |阅读模式

我定义了一个结构
typedef struct buf
{
uint16_t  TxCount,TxLen;
uint16_t RxCount,RxLen;
uint8_t  RxBuf[100];
uint8_t  TxBuf[100];
uint8_t  TxData;
uint8_t  RxData;
uint8_t  State;
}ComBuf_TypeDef;
ComBuf_TypeDef* Com1;
ComBuf_TypeDef* Com2;
ComBuf_TypeDef* HID;

编译后发现编译器把COM1、COM2、HID全放在0x000000的地方,为什么呀,为什么不是在RAM里的?

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

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-6-7 23:35:34 | 显示全部楼层
业余程序玩家。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-7 23:42:13 | 显示全部楼层
对啊,你这是指针,而且如果没赋值的话,直接就被编译器优化了都可能.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-7 23:49:56 | 显示全部楼层
见图片watch1监视窗口。而且更奇怪的是进入调试,勾选了run to main,但load后指针时停在691行,单步软件仿真,运行顺序是691-->678->686->691->692->687->693



回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-7 23:56:21 | 显示全部楼层


 
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-8 00:00:30 | 显示全部楼层
执行完691行后,Com1->RxCount的值还是0x235
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-8 00:01:50 | 显示全部楼层
我看uIP里面的结构都是这样定义使用的,为什么就没错呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-8 00:26:30 | 显示全部楼层
com1,com2有分配内存么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-8 08:36:15 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
ComBuf_TypeDef* Com1;
ComBuf_TypeDef* Com2;
ComBuf_TypeDef* HID;
分配内存是不是这3行?有的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-8 10:26:17 | 显示全部楼层
回复【9楼】西部经典:
---------------------------------
这只是指针,初学者常犯错误之一.
你要分配内存才能用里面的成员,否则轻则走火入魔,重则无力回天.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-8 10:26:37 | 显示全部楼层
很多hardfault,就来自你这种用法.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-8 10:55:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
发表于 2013-6-8 13:01:22 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥 你好 像楼上所说的那种情况 我也那样用过指针 页没有分配内存 但是没有出问题 呵呵 真幸运 
 请问 怎么给指针分配内存啊  是不是这样 u8 * p=0x600; 还是别的什么方法  另外 假如是这样的话 哪么怎么知道给指针分配内存在哪里和区域?  这个地址区间是什么哦?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-8 15:28:44 | 显示全部楼层
回复【13楼】langwanglx:
---------------------------------
malloc,或者定义一个数组,把数组首地址付给指针.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
发表于 2013-6-8 16:41:48 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
恩  知道了 还是定义数组比较简单  呵呵 malloc很少用
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-6-8 17:18:32 | 显示全部楼层
没有结构实体,只有指针
//定义实体
ComBuf_TypeDef  _Com1;
ComBuf_TypeDef  _Com2;
ComBuf_TypeDef  _HID;

//定义指针并指向上面定义的实体
ComBuf_TypeDef *Com1=_Com1;
ComBuf_TypeDef *Com2=_Com2;
ComBuf_TypeDef *HID=_HID;
时不我待,Time waits for no man.
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-13 11:58:07 | 显示全部楼层
学习了,谢谢各位
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-14 09:40:06 | 显示全部楼层
还有一个问题,什么时候要动态分配内存?在一个函数里面直接定义一个数组,退出函数后,这个数组占用的内存是否就自动被释放了?与在函数里用malloc动态分配一块内存,退出函数前free,效果有什么不同?比如下面的两段程序
u8 mp3_play_song(u8 *pname)
{  
  FIL* fmp3;
    u16 br;
u8 res,rval;   
u8 *databuf;        
u16 i=0; 
u8 key;       
   
rval=0;     
fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//申请内存
databuf=(u8*)mymalloc(SRAMIN,4096); //开辟4096字节的内存区域
        ......        
myfree(SRAMIN,databuf);             
myfree(SRAMIN,fmp3);
return rval;             
}


u8 mp3_play_song(u8 *pname)
{  
  FIL* fmp3;
    u16 br;
u8 res,rval;   
u8 *databuf;        
u16 i=0; 
u8 key;       
u8 _fmp3(sizeof(FIL));
u8 _databuf(4096);

   
rval=0;     
fmp3=&_fmp3;//申请内存
databuf=&_databuf; //开辟4096字节的内存区域
        ......        


return rval;             
}
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-6-14 12:26:35 | 显示全部楼层
u8 _fmp3(sizeof(FIL)); 
u8 _databuf(4096); 

这2个看不懂……
业余程序玩家。
回复 支持 反对

使用道具 举报

16

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-15
在线时间
7 小时
 楼主| 发表于 2013-6-14 15:44:56 | 显示全部楼层
不好意思,写错了,应该是
u8 _fmp3[sizeof(FIL)];  
u8 _databuf[4096];
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 19:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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