#define GPIOB_BASE (0x50004040) // GPIOB Control Registers
GPIO_T GPIOB __attribute__((at(GPIOB_BASE), zero_init));
typedef struct
{
GPIO_PMD_T PMD; // GPIO Port Bit Mode Control
GPIO_OFFD_T OFFD; // GPIO Port Bit OFF Digital enable
GPIO_DOUT_T DOUT; // GPIO Port Data Output Value
GPIO_DMASK_T DMASK; // GPIO Port Data Output Write Mask
GPIO_PIN_T PIN; // GPIO Port Pin Value
__I uint32_t RESERVE;
GPIO_IMD_T IMD; // GPIO Port Interrupt Mode Control
GPIO_IEN_T IEN; // GPIO Port Interrupt Enable
GPIO_ISRC_T ISRC; // GPIO Port Interrupt Source Flag
} GPIO_T;
DrvGPIO_EnableQuasiPins(&GPIOB,PORTB_TRGKEY_PINS); // Enable pins which are configured as quasi-mode for PGIOB
void DrvGPIO_EnableQuasiPins(GPIO_T* pGPIO, UINT32 u32Pins)
;===========================================
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
;===================================================
以上有两个问题还请大家帮忙解答一下:
(1)
GPIO_T GPIOB __attribute__((at(GPIOB_BASE), zero_init));
请问这样的定义是什么意思呢?
__attribute__的用法还是第一次见到,不知道它的作用是什么,网上说是设置什么属性的,但是解释的不是很清楚
还请大家帮忙解答一下
(2)
第二个问题是关于结构体与结构体指针做函数参数的疑惑
GPIO_T GPIOB 这个定义应该是GPIOB被定义成GPIO_T型的结构体吧
而
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) 这个是把GPIOB强制转换成GPIO_TypeDef型的结构体指针
而两者在做函数参数的时候前者需要加&符号,后者是不需要的,
这样的原因是不是前者是结构体,而后者是结构体指针的原因?
如果不是的话,还请大家帮忙解答下,谢谢!
①
DrvGPIO_EnableQuasiPins(&GPIOB,PORTB_TRGKEY_PINS); // Enable pins which are configured as quasi-mode for PGIOB
void DrvGPIO_EnableQuasiPins(GPIO_T* pGPIO, UINT32 u32Pins)
②
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
|