C 中不允许使用类型名称
type name is not allowed in C
我正在尝试使用 STM32F407 将 ADC 与 DMA 结合使用。我想将 ADCValue
的内存地址设置为 DMA 流 x 内存 0 地址寄存器。但是我得到这个错误:
type name is not allowed
这部分在main
unsigned short ADCValue[1];
DMA2_Stream0->M0AR= uint32_t(&ADCValue);
和寄存器的定义
__IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */
你投错了。应该是:
DMA2_Stream0->M0AR = (uint32_t)&ADCValue;
但是因为是数组,所以&
也没有必要。以这种方式使用时,数组将自动衰减为指针。所以这样做:
DMA2_Stream0->M0AR = (uint32_t)ADCValue;
或者:
unsigned short ADCValue ;
DMA2_Stream0->M0AR= (uint32_t)&ADCValue ;
或
unsigned short ADCValue[1] ;
DMA2_Stream0->M0AR= (uint32_t)ADCValue ;
uint32_t(&ADCValue)
或 uint32_t(ADCValue)
在 C++ 中有效,但在 C 中无效。
我正在尝试使用 STM32F407 将 ADC 与 DMA 结合使用。我想将 ADCValue
的内存地址设置为 DMA 流 x 内存 0 地址寄存器。但是我得到这个错误:
type name is not allowed
这部分在main
unsigned short ADCValue[1];
DMA2_Stream0->M0AR= uint32_t(&ADCValue);
和寄存器的定义
__IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */
你投错了。应该是:
DMA2_Stream0->M0AR = (uint32_t)&ADCValue;
但是因为是数组,所以&
也没有必要。以这种方式使用时,数组将自动衰减为指针。所以这样做:
DMA2_Stream0->M0AR = (uint32_t)ADCValue;
或者:
unsigned short ADCValue ;
DMA2_Stream0->M0AR= (uint32_t)&ADCValue ;
或
unsigned short ADCValue[1] ;
DMA2_Stream0->M0AR= (uint32_t)ADCValue ;
uint32_t(&ADCValue)
或 uint32_t(ADCValue)
在 C++ 中有效,但在 C 中无效。