OpenEdv-开源电子网

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

求解这行代码的意思,#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))

[复制链接]

14

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-9-8
在线时间
13 小时
发表于 2016-9-20 09:47:38 | 显示全部楼层 |阅读模式
1金钱
如题,这个宏定义到底是定义 MEM_ADDR(addr)为一个数组,还是定义MEM_ADDR(addr)为*((volatile unsigned long  *)(addr))数组里面的值?求大神回答。

最佳答案

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

把addr这个地址进行(volatile unsigned long *)类型转换后,用这个类型取这个地址上的值
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-9-20 09:47:39 | 显示全部楼层
把addr这个地址进行(volatile unsigned long *)类型转换后,用这个类型取这个地址上的值
回复

使用道具 举报

5

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2016-5-7
在线时间
64 小时
发表于 2016-9-20 10:01:35 | 显示全部楼层
宏定义只是替代,只要看*((volatile unsigned long  *)(addr))是什么就行
回复

使用道具 举报

5

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2016-5-7
在线时间
64 小时
发表于 2016-9-20 10:20:24 | 显示全部楼层
应该是读取memory的某地址上的值,二维数组,只不过memory的行地址是unsigned long,因为是高速读取的内容,所以用volatile修饰,不知道这样的理解对不对
回复

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1369
金钱
1369
注册时间
2014-2-13
在线时间
169 小时
发表于 2016-9-20 10:24:16 | 显示全部楼层
楼上说的都没错,要看具体情况。如果addr是数组的起始地址,就乐意当数组用;如果addr是变量的地址,就当变量用。表面意义就是传一个指针(地址)进去,然后取指针指向地址的值。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-8-30
在线时间
13 小时
发表于 2016-9-20 10:57:27 来自手机 | 显示全部楼层
同意二楼
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-8-21
在线时间
5 小时
发表于 2018-12-18 21:20:26 | 显示全部楼层
在《ARM Cotrex-M3权威指南(英文)》中有解释
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 02:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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