我在c中定义了一个宏函数为
#define PortA_Clk_En() RCC->AHB1ENR |= (1 << 0)
但是当我在程序内调用宏函数时,出现以下错误
“->”的类型参数无效(具有无符号整数)
RCC 型式铸造为
#define base_addr 0x20097654
#define RCC (Reg_t*)base_addr
Reg_t
在哪里
typedef struct{
uint32_t AHB1ENR;
}Reg_t;
我不明白问题出在哪里。
这个:
RCC->AHB1ENR
将扩展到此:
(Reg_t*)base_addr->AHB1ENR
并且由于
->
运算符的优先级高于类型转换运算符,因此它解析为:
(Reg_t*)(base_addr->AHB1ENR)
并且由于
base_addr
不是指向结构或联合的指针,因此您会收到错误。
您需要在
#define
中添加括号,以便按照您想要的方式对内容进行分组:
#define RCC ((Reg_t*)base_addr)