该文使用函数指针来实现按键的扫描,以确保代码具有更好的移植性
函数指针
1、直接定义
例如我们按键扫描时会调用HAL_GPIO_ReadPin()函数,具体的函数声明如下:
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
那么定义该函数的函数指针,只需将函数名换成(*p)即可,具体定义如下:
GPIO_PinState (*p)(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) = HAL_GPIO_ReadPin;
这样我们就定义好了一个函数指针,这个指针p指向函数HAL_GPIO_ReadPin()
2、别名定义
上述定义的函数指针太长,可以使用typedef来进行别名,具体别名如下:
typedef GPIO_PinState (*KEY_Type)(GPIO_TypeDef*,uint16_t);
这样别名之后,KEY_Type就替代了typedef GPIO_PinState (*)(GPIO_TypeDef*,uint16_t)这一部分。之后定义指针类型只需使用KEY_Type即可,具体定义如下:
KEY_Type KEY_Fun = HAL_GPIO_ReadPin;
这样我们就定义好了一个函数指针,这个指针KEY_Fun指向函数HAL_GPIO_ReadPin()
3、调用
使用函数指针,并不需要像其他指针一样用*去取值。只需直接使用指针即可。比如要实现HAL_GPIO_ReadPin的功能,具体使用方法如下: