初识回调函数

回调函数:

1.是什么?

回调:利用函数指针进行函数调用的过程。

回调函数:在另一个系统(调用者)运行时被作为参数传递的函数(函数的内容细节由被调用者写好)

2.有什么用?

  1. 在单片机架构中的运用
    分开硬件层和应用层代码后,当需要提供接口而不暴露源代码时,需要用到回调函数,例如在应用程序需要采集硬件层的数据时,可以提高程序移植性
  2. 可以直接调用函数,为什么还要用回调函数呢?
    因为可以把调用者和被调用者分开,调用者不关心谁是被调用者,达到解耦的目的。分开硬件层和应用层代码后,当需要提供接口而不暴露源代码时,需要用到回调函数,例如在应用程序需要采集硬件层的数据时,可以提高程序移植性。
  3. 编写响应式(输入型)函数
    如处理串口、按键、ADC值等信息的采集。
  4. 其他
    利于代码的封装,代码简洁清晰。

3.怎么用?

1.原理
有多种方法可以实现回调函数机制,在C语言中可以通过函数指针来实现

2.异步回调

同步调用
在这里插入图片描述

异步回调
在这里插入图片描述

(中断内调用回调函数)异步回调简例:

注意
简例仅提供思路,这里尝试消息队列的想法,但逻辑没处理完全。

回调函数程序:
	将函数作为参数赋值、运行回调函数

在这里插入图片描述
在这里插入图片描述

被调用函数程序:
	实现具体的函数细节

getCValue函数是对应的函数指针要注册的函数(即被调用者的具体实现)
在这里插入图片描述

初始化赋值程序:
	回调函数被作为参数传入,封装了函数实现的细节

在这里插入图片描述

中断程序:
	运行回调函数

在这里插入图片描述

注意

  1. 发生中断时,设置标志,构造一个尽量简短的ISR(中断太频繁会影响其他低优先级的中断),让其他的工作由对应的线程去执行。
  2. 中断运行回调函数后,主函数可以有相关的对应操作,不必在主程等待数值的获取(同步),值的获取不影响主程的继续运行,可以轮询的方式判断中断中回调函数是否取值(异步)后进行对应操作。

3.回调地狱
为实现异步代码顺序执行采样传统嵌套办法而出现回调函数中嵌套回调函数的情况,导致代码可读性差,后期不好维护。
解决办法一:js中的promise对象,链式编程来解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值