强制类型转换优先级

强制类型转换优先级

一、运算优先级

强制类型转换优先级_第1张图片

强制类型转换优先级_第2张图片
(图片来源于网络)

二、代码示例

该段代码为GD32库函数中 外部中断寄存器地址取值的运算

/* registers definitions */
#define EXTI_INTEN                   REG32(EXTI + 0x00U)      /*!< interrupt enable register */
#define EXTI_EVEN                    REG32(EXTI + 0x04U)      /*!< event enable register */
#define EXTI_RTEN                    REG32(EXTI + 0x08U)      /*!< rising edge trigger enable register */
#define EXTI_FTEN                    REG32(EXTI + 0x0CU)      /*!< falling trigger enable register */
#define EXTI_SWIEV                   REG32(EXTI + 0x10U)      /*!< software interrupt event register */
#define EXTI_PD                      REG32(EXTI + 0x14U)      /*!< pending register */
#define REG32(addr)                  (*(volatile uint32_t *)(uint32_t)(addr))

强制类型转换优先级_第3张图片
类似的,如果使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义:
#define DATA_ADDR (*(volatile uint32_t *)0x0000111F)
然后就可以用C语言对这个内存地址进行读写操作了
读操作:tmp = DATA_ADDR;
写操作:DATA_ADDR = 0x55;

你可能感兴趣的:(STM32)