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

[复制链接]
 楼主| 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]...
 楼主| leshak 发表于 2013-5-2 21:18 | 显示全部楼层
那这样写&ADC1_ConvertedValue就是不标准的写法了,KEIL编译器也能编译过去,而且程序运行出来的结果也比较正常。
难道是KEIL能自动识别这种写法所代表的意思嘛?
 楼主| leshak 发表于 2013-5-3 14:31 | 显示全部楼层
顶一下
 楼主| leshak 发表于 2013-5-6 10:08 | 显示全部楼层
继续顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

522

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部