打印

求助:DMA传输数组设置问题

[复制链接]
1740|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leshak|  楼主 | 2013-5-1 13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA, AD, ADC1, dc, TE
一些函数的声明
__IO u16 ADC1_ConvertedValue[1000];
u16 MII_AD_MAXMIN(volatile u16 *p);
//DMA内存基地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC1_ConvertedValue;

void mian void
{
.........

MII_AD_MAXMIN(ADC1_ConvertedValue);

..........
}


疑问在于DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC1_ConvertedValue;
ADC1_ConvertedValue已经是数组首元素的地址了
再加个&符号,不是又进行了一次取地址?那就是数组首元素地址的地址了。
不知道我这样理解对不对 ,这个&不能加吧



相关帖子

沙发
huangxz| | 2013-5-1 19:58 | 只看该作者
(u32)&ADC1_ConvertedValue就是 (u32)&ADC1_ConvertedValue[0],
在强制转换的时候,不能直接去数组名

使用特权

评论回复
板凳
leshak|  楼主 | 2013-5-2 12:20 | 只看该作者
本帖最后由 leshak 于 2013-5-2 12:25 编辑

楼上的朋友你好,我觉得多了个&符号,应该写成

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC1_ConvertedValue;
因为ADC1_ConvertedValue已经是数组首元素的地址了,&符号多余了吧


使用特权

评论回复
地板
ayb_ice| | 2013-5-2 16:03 | 只看该作者
这个地址运算符此处可以不加,加了提高可读性
标准的应该是
&ADC1_ConvertedValue[0]...

使用特权

评论回复
5
leshak|  楼主 | 2013-5-2 21:18 | 只看该作者
那这样写&ADC1_ConvertedValue就是不标准的写法了,KEIL编译器也能编译过去,而且程序运行出来的结果也比较正常。
难道是KEIL能自动识别这种写法所代表的意思嘛?

使用特权

评论回复
6
leshak|  楼主 | 2013-5-3 14:31 | 只看该作者
顶一下

使用特权

评论回复
7
leshak|  楼主 | 2013-5-6 10:08 | 只看该作者
继续顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

522

帖子

4

粉丝