OpenEdv-开源电子网

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

c语言宏定义#define可以相加吗

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-6-14
在线时间
22 小时
发表于 2016-6-14 10:27:25 | 显示全部楼层 |阅读模式
1金钱
#define set_first_ADDR  0X08010040                 //宏的起始地址
#define set_name_ADDR  0X08010010         //设置FLASH 宏定义名字的地址长度

STMFLASH_Read((set_first_ADDR+set_name_ADDR),(u16*)data,sizeof(data));

编译出错,
STMFLASH_Read( 0X08010050 ,(u16*)data,sizeof(data));
是正确的,
为什么  宏定义#define不可以相加吗

最佳答案

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

set_first_ADDR+set_name_ADDR不就是等于0X08010040+0X08010010,他的结果是0X10020050 不信你把#define set_name_ADDR 0X08010010改成#define set_name_ADDR 0X10应该就没问题了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-14 10:27:26 | 显示全部楼层
set_first_ADDR+set_name_ADDR不就是等于0X08010040+0X08010010,他的结果是0X10020050
不信你把#define set_name_ADDR  0X08010010改成#define set_name_ADDR  0X10应该就没问题了
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-6-14
在线时间
22 小时
 楼主| 发表于 2016-6-14 10:40:09 | 显示全部楼层
憨厚诚实大叔 发表于 2016-6-14 10:35
set_first_ADDR+set_name_ADDR不就是等于0X08010040+0X08010010,他的结果是0X10020050
不信你把#define ...

我说错了  不是编译错误,是我下载到板子上之后 ,板子不知道死在哪里了,我改成0X80010050后,板子是正常的
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-6-14
在线时间
22 小时
 楼主| 发表于 2016-6-14 10:40:22 | 显示全部楼层
我说错了  不是编译错误,是我下载到板子上之后 ,板子不知道死在哪里了,我改成0X80010050后,板子是正常的
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-6-14
在线时间
22 小时
 楼主| 发表于 2016-6-14 10:48:09 | 显示全部楼层
#define set_first_ADDR  0X08010040                 //宏的起始地址
const u8 namelong=0x10;

STMFLASH_Write((set_first_ADDR+(namelong*1)),(u16*)data,sizeof(data));
如果是这样的话下载到板子上是正常的
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-14 10:51:21 | 显示全部楼层
那你把#define set_name_ADDR  0X08010010改成#define set_name_ADDR  0X10,这样改他正常吗
回复

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5265
金钱
5265
注册时间
2012-8-25
在线时间
1025 小时
发表于 2016-6-14 11:16:24 | 显示全部楼层
糊涂啊糊涂
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-6-14 11:34:32 | 显示全部楼层
LZ访问越界了吧。
0X08010040+0X08010010这个地址已经超出FLASH的范围了吧?
回复

使用道具 举报

4

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
287
金钱
287
注册时间
2016-6-14
在线时间
20 小时
发表于 2016-6-14 11:37:27 | 显示全部楼层
憨厚诚实大叔 发表于 2016-6-14 10:35
set_first_ADDR+set_name_ADDR不就是等于0X08010040+0X08010010,他的结果是0X10020050
不信你把#define ...

自古真理出2楼啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 16:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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