假设我有以下定义:
可以的吗?(Is that ok ?)
/* Generic structure of entire SFR area for each UART module */
typedef struct tagUART {
unsigned int uxmode;
unsigned int uxsta;
unsigned int uxtxreg;
unsigned int uxrxreg;
unsigned int uxbrg;
} UART, *PUART;
/* SFR blocks for each UART module */
extern volatile UART UART1 __attribute__((__sfr__));
extern volatile UART UART2 __attribute__((__sfr__));
如果我通过UART1访问寄存器,一切都很好,但是如果我使用指向结构体的指针,我应该如何声明它以指定指向的整个区域是易失性的?
volatile UART * hw = &UART1;
可以的吗?(Is that ok ?)
volatile
变量取地址会返回volatile
指针,但是如果你打算将该地址保存在另一个变量中,则该变量也需要带有volatile
。&UART1
的类型为volatile UART *
,但是UART * hw = &UART1
将调用一个指向非volatile
指针的类型转换 - 在这里,你需要写成volatile UART * hw = &UART1
。 - Sergey L.