Cortex-M3开发经验(一):函数指针的应用

Cortex-M3开发经验(一):函数指针的应用

在学习C语言语法时,学到一个函数指针。就是用指针指向一个函数(实质函数就是一个地址)。而后经过指针来调用该函数。当时学完以后一脸懵逼,不是不明白原理,而是不知道有什么用?直接调用不就能够了吗?何须多费功夫去搞这些花里胡哨的东西。函数

后面发现,这个函数指针也是有应用的场景的!学习

模拟IIC与硬件IIC的调用

在我开发时,遇到这样一个问题。ui

IIC协议既能够用模拟也能够用硬件自带的。这样就有一个问题,有些芯片我以为硬件IIC并很差用,我想用模拟的。但这些切换就比较麻烦。全部IIC设备调用的函数都要修改一遍(C语言不支持同名函数)。这样就比较麻烦了。用宏定义吧,就显得代码臃肿,每一个调用的地方都须要#if...#else...#endif。指针

这时,我想到了函数指针。我须要用模拟IIC时,就指向模拟IIC的函数。须要硬件IIC时,就指向硬件IIC的函数。这样不就能够了吗?赶忙去试一下!code

typedef uint8_t (IIC_SEND)(uint8_t, uint8_t, uint8_t);
typedef uint8_t (IIC_READ)(uint8_t, uint8_t, uint8_t);

uint8_t Simulate_iic_send(uint8_t addr, uint8_t wbuffer, uint8_t length)
{
    //模拟IIC发送时序
}

uint8_t Hardware_iic_send(uint8_t addr, uint8_t wbuffer, uint8_t length)
{
    //硬件IIC发送实现
}


IIC_SEND fiic_send = Simulate_iic_send;
IIC_SEND fiic_send = Hardware_iic_send;

这样的话,我就能够在初始化时,确认使用的是硬件IIC仍是模拟IIC。实际上能够在运行中修改指针,切换不一样模式(然而不必)。开发

延伸:或者咱们能够吧IIC从机模式,IIC主机模式也作成这种方式。class

总结

  1. 函数指针能够用在不肯定须要调用函数的场合,修改指针指向便可。
  2. 函数指针让代码移植性更方便。在例子中,咱们只须要改变函数实现便可,应用层只是调用指针。
  3. 暂时只想到这些,后面用更好的应用会继续更新。
相关文章
相关标签/搜索