指针的基本概念很简单,就是一个存放内存地址的变量。
#define IS_GPIO_ALL_PERIPH(PERIPH) (( *(uint32_t *)&(PERIPH) == GPIOA) || \
( *(uint32_t *)&(PERIPH) == GPIOB) || \
( *(uint32_t *)&(PERIPH) == GPIOC) || \
( *(uint32_t *)&(PERIPH) == GPIOD) || \
( *(uint32_t *)&(PERIPH) == GPIOF)
)
单片机程序都是跟内存打交道的,内存只有2个元素:地址和地址中的数据。
首先,PERIPH就是一个变量,用&(PERIPH)就知道了 PERIPH 的内存地址,
接着,用 *)&(PERIPH)知道了该内存地址中的数据;
然后,用 (uint32_t *)&(PERIPH)将这个数据强制转化为32位无符号数据类型;
最后,将这个32位无符号数据类型的数据定义为一个指针去跟GPIOA这个进行地址比较。
其实际意义相当于: *(&PERIPH) = PERIPH,将PERIPH中的数据作为一个32位无符号数据类型的指针。
目的:先确定 PERIPH 该形参的地址,减轻编译系统的负担。
博观而约取,厚积而薄发!