• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wb-code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

回调函数

回调函数
作用:解耦合。模块间通过清晰的API接口进行联系,减少模块间的耦合。
例如:利用UART中断控制LED亮灭,当串口接收到特定数据时对LED进行控制,正常情况下应该是在中断服务函数中编写对LED的控制程序,这样会使得两个模块之间耦合联系过深,不利于移植和通用性的实现。
使用回调函数就可以实现,通过在主程序(mian.c)中封装一个LED“效果函数“后续通过在uart.c中编写对应的回调服务函数,该回调服务函数是一个对外开放的API接口,通过在主函数中调用此接口,其参数是LED效果函数。

以上面例子举例使用回调函数步骤:
1、在uart.h中typedef void (*uart_callback_t)(uint8_t data);定义一种函数指针类型。
2、在uart.c中声明一个函数指针变量static uart_callback_t uart_receive_func。
3、中断服务函数通过调用uart_receive_func这一函数指针变量,对数据进行处理和函数的调用
4、封装一个回调服务函数void UART_Call(uart_callback_t func){uart_receive_func=func;}。使得func这一个能与外部联系的函数指针变量与uart_receive_func产生联系。这一个函数是作为与外部接触的一个API接口。
5、在main.c中编写一个参数与函数指针参数同类型的函数[static void receive_fun(uint8_t data)],UART_Call()通过调用此函数就能使其与中断服务函数形成联系。

posted on 2025-12-19 12:28  心事不在脸上  阅读(0)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3