你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一副图给你讲清回调函数

[复制链接]
guoyuli 发布时间:2023-9-22 10:58
有人对STM32固件库里的回调函数有些好奇甚至纠结,这里简单地介绍下,以供参考。其实从用法及功能上讲他们并没有什么特别的,跟其他函数一样,也是实现特定功能的代码段。一般来讲,所谓回调函数,泛指基于事件触发而被调用执行的函数,简单点说,就是条件满足了就调用的函数,往往会跟函数指针结合起来通过函数指针实现调用。
, `) w  I) g2 R) w
经常会有人基于类似下面的代码介绍回调函数:
微信图片_20230917112231_1.png
在上面代码中,那四个有关加减乘除的函数可以看成回调函数,具体何时被调用,根据函数Compute(float a,float b,float(*Action)(float a,float b))里的函数指针的赋值情况来定,被赋予哪个回调函数的地址就调用哪个回调函数。当然,使用函数指针并不是回调函数的核心特征,因事件驱动而被调用才是其核心特征。
. d* K* q- y7 c. n8 O' b
生活中我们有时会对某人说,回头再谈、回头再聊。潜台词往往就是等时机成熟了、条件满足了再来具体交涉。这里就充满着浓浓的回调意味。

! i6 O! j- C3 i2 o; R0 g% k/ O: C
回调函数可以理解为事件响应函数或者说事件驱动函数。即使相同的事件、基于不同的场景可能会有不同应对处理,从软件代码角度讲就对应不同的回调函数代码。

% Y$ {4 V( j" o* @7 M8 J
我们不妨看个生活中的例子。生活中有人中了六合彩了,针对这一事件,中奖人可能有下面诸多举动之一【这里简化下,多选一】。但这件事发生在不同人身上,右边的选择很可能不尽一样。换言之,中奖了,到底会选择右边哪一项还得结合具体的人来定。
微信图片_20230917112231.png
: Q; a  r  Y6 a0 j
我们再切换到STM32的嵌入式开发中来,以UART接收完成事件为例。针对这一事件,不同的应用场景的应对处理往往也是五花八门、五彩缤纷。

( H, [7 @$ [. N( u: S! E3 Z
微信图片_20230917112232.png
+ g2 T/ P. s) j  K) ]9 G1 [
显然,特定的应用场景对应着特定的回调函数,一般来讲,没法简单地仅仅基于事件就拟定一段既能适用于各种场景而又富有针对性的代码。
& u) a3 i) @2 V" G' l2 g- K# a
结合上面的描述,稍微小结下。回调函数除了具有基于事件的触发而被调用执行的特征外,还具有相同事件因应不同应用场景可能需要不同的回调函数之特征,即基于特定应用场景的回调函数其内容具有特定性。

8 x) A3 y1 v* [9 w
7 `) T9 W7 P4 _3 i' B
转载自STM32公众号
, R6 y1 M% b5 V+ j2 m4 k2 C: ]
7 e( q7 t# z8 N3 u
收藏 评论0 发布时间:2023-9-22 10:58

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版