打印
[技术讨论]

回调函数和直接调用函数有什么区别?

[复制链接]
1296|6
手机看帖
扫描二维码
随时随地手机跟帖
楼主
本帖最后由 csdnpurple 于 2022-3-26 11:30 编辑

要体会回调函数,必须将其放到具有动态装配软件模块的系统中才可以显现出来,比如windows linnux等,不同的软件模块是分别编译的,由于软件的维护方便将软件的调用搞成回掉函数后是软件的调用地址可以通过管道、总线、内存等相对固定的通讯方式传递,试想两个独立编译的软件模块中的函数AB相互调用,A并不知道B的编译链接系统加载后的内存地址位置,如果B软件模块将B函数的地址在软件启动时放在指定的内存位置A就可以获得B的地址可以调用了,当然B的地址可以通过很多其他方法传递,但都必须将B作为数据传递才行。如果看不懂上面的描述,要进一步了解计算机体系结构、操作系统(包括软件模块的动态加载的系统,软件模块在内存中结构)、编译原理(obj文件格式exe文件格式)。

使用特权

评论回复
沙发
csdnpurple| | 2022-3-26 21:22 | 显示全部楼层
昊430 发表于 2022-3-26 14:28
感谢解答,但是单片机上也经常有这种应用,不太懂他的好处

1、根据你的描述,我猜是因为开源的代码移植时带过来的,这样改动最小,或者是跨平台代码由于要照顾需要软件二进制模块适配需要软件结构要设计成你看到的样子。好处代码建造效率高
2、在最优运行速度、最优功耗场景下,在有些mcu平台下,回掉函数要比直接调用快。
3、如果AB两个工程师共同完成一个mcu的软件编写任务,但相互不能查看源代码,并各自分配了一块mcu存储器地址,要求各自编译成hex并直接烧录就可以正常运行,使用回掉函数是一个解决方案。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则