新手入门
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2013-5-3
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-5-3 22:04:23
|
显示全部楼层
回复【3楼】正点原子:
---------------------------------
DMA_DeInit(DMA1_Channel6);
就以这个DMA_DeInit函数为例,其中下面是函数 原型,
void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx)
那就说明DMA1_Channel6 是一个指向结构体指针,既然它是指针,那么&DMA1_Channel6 不就是存放这个指针内存地址Y吗?(这个地址Y我们不需要知道是什么)
在前面加(u32*) 意思不是就是把这个 地址强行 转变成指向一个U32值的指针,,
再在前面加* 意思就是 取这个指针Y的指向U32值, 实际就是 DMA1_Channel6 的值。
其中DMA_DeInit里面 现有这样一个检验指针值的 函数 assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
然而IS_DMA_ALL_PERIPH有有这样的宏定义
#define IS_DMA_ALL_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == DMA1_Channel1_BASE) || \
((*(u32*)&(PERIPH)) == DMA1_Channel2_BASE) || \
((*(u32*)&(PERIPH)) == DMA1_Channel3_BASE) || \
((*(u32*)&(PERIPH)) == DMA1_Channel4_BASE) || \
((*(u32*)&(PERIPH)) == DMA1_Channel5_BASE) || \
((*(u32*)&(PERIPH)) == DMA1_Channel6_BASE) || \
((*(u32*)&(PERIPH)) == DMA1_Channel7_BASE) || \
((*(u32*)&(PERIPH)) == DMA2_Channel1_BASE) || \
((*(u32*)&(PERIPH)) == DMA2_Channel2_BASE) || \
((*(u32*)&(PERIPH)) == DMA2_Channel3_BASE) || \
((*(u32*)&(PERIPH)) == DMA2_Channel4_BASE) || \
((*(u32*)&(PERIPH)) == DMA2_Channel5_BASE)) |
|