博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cortex-M3开发经验(一):函数指针的应用
阅读量:4354 次
发布时间:2019-06-07

本文共 1035 字,大约阅读时间需要 3 分钟。

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

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

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

模拟IIC与硬件IIC的调用

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

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

这时,我想到了函数指针。我需要用模拟IIC时,就指向模拟IIC的函数。需要硬件IIC时,就指向硬件IIC的函数。这样不就可以了吗?赶紧去试一下!

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主机模式也做成这种方式。

总结

  1. 函数指针可以用在不确定需要调用函数的场合,修改指针指向即可。
  2. 函数指针让代码移植性更方便。在例子中,我们只需要改变函数实现即可,应用层只是调用指针。
  3. 暂时只想到这些,后面用更好的应用会继续更新。

转载于:https://www.cnblogs.com/Oushangrong/p/11014528.html

你可能感兴趣的文章
Ulipad运行源码出错
查看>>
Windows Live Writer 网易博客配置
查看>>
逻辑运算符
查看>>
WPA2无线网络加密协议,部分受到影响产品以及对应补丁
查看>>
jvm
查看>>
安卓学习-界面-ui-ImageView
查看>>
利用键值对来找对应值的信息
查看>>
JNI全局对象,及原生线程JNIENV传递
查看>>
POJ 1159 回文LCS滚动数组优化
查看>>
ASP.Net MVC3 - The easier to run Unit Tests by moq #Reprinted#
查看>>
《Python从入门基础到实践》
查看>>
for循环
查看>>
BZOJ2132: 圈地计划
查看>>
PHP数据库连接mysql与mysqli的区别与用法
查看>>
char * 与char []探究理解
查看>>
QT窗体显示在屏幕中间位置
查看>>
emmet使用技巧
查看>>
RPC-Thrift(二)
查看>>
MSSQL for Linux 安装指南
查看>>
【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试
查看>>