在嵌入式开发中,我们常常会遇到这样一个问题:(以最简单IO口操作为例)
A为APP开发人员,他需要为客户开发接口给客户调用实现IO控制,但是只做接口层,实际的IO控制需要B来完成。
B为底层开发人员,需要完成A交代的IO口控制函数,以让用户实现IO控制。
B的角色可以为用户本身,也可以为底层开发人员。
那么,此处A就需要给出一个接口类型,需要B去实现对应功能。例如,针对IO口A需给出如下接口类型:
struct io_pin_ops
{
void (*pin_mode)(strutc device *device ,uint16_t pin,uint16_t mode);
void (*pin_write)(strutc device *device ,uint16_t pin,uint16_t value);
int (*pin_read)(strutc device *device ,uint16_t pin);
}hw_pin ;
此处的*pin_mode,*pin_write,*pin_read即为函数指针,分别指向实现对应功能的函数。
调用的API,以pin mode为例如下:
void set_pin_mode(uint16_t pin,uint16_t mode)
{
hw_pin .pin_mode(pin,mode);
}
B接到上述对应的接口后,再编写对应的实现函数功能如下:
static struct io_pin_ops _stm32_pin_ops =
{
stm32_pin_mode,
stm32_pin_write,
stm32_pin_read,
}
此处的stm32_pin_mode()即为B自己实现的函数,用于编写IO口的模式。其实就是见定义好的函数指针指向对应的函数,当调用ops指针的时候,即执行了相关函数。