一、自定义回调
func_cb:别名;uint16_t:函数指针返回数据类型;void:函数指针形参数据类型
typedef uint16_t (*func_cb)(void);
一般写法是
uint16_t(*func_cb)(void)//有几个参数在括号里写几个数据类型,逗号分隔
二、使用
typedef uint16_t (*func_cb)(void);
uint16_t num1() {
if (HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_3) == 0) {
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
printf("\r\n返回:0\r\n");
} else {
printf("\r\n返回:1\r\n");
}
};
void led1(func_cb cb) {
cb();//函数传递调用
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);
}
while (1) {
led1(num1);//将函数名作为参数传递
HAL_Delay(500);
}
或:
uint16_t num1() {
if (HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_3) == 0) {
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
printf("\r\n返回:0\r\n");
} else {
printf("\r\n返回:1\r\n");
}
};
void led1(uint16_t(*func_cb)(void)) {
func_cb();
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_1);
}
while (1) {
led1(num1);
HAL_Delay(500);