思考:STM32 回调函数的实质 (***)

--------------------------------------------------------------------

关联参考:

STM32 回调函数 (***)https://blog.csdn.net/ken2232/article/details/135759275
回调函数(callback)是什么?(*****) https://blog.csdn.net/ken2232/article/details/132665409

STM32:回调函数的实质 (***)  https://blog.csdn.net/ken2232/article/details/135812953

--------------------------------------------------------------------

一个完全相同的功能模块,可以有多种不同的函数写法。

不同的函数写法有不同的最佳使用场景:穿着不同函数马甲的相同功能模块

  • 宏函数
  • 通用写法
  • 函数指针
  • 。。。

在不同的设计模式中,通常会采用函数各种写法中的最佳写法;当函数处在不同设计模式中的不同位置,函数就有不同的作用或用途,因而就有了不同的函数叫法。
比如:回调函数,实质上,回调函数,就是一个独立函数,只不过由于它所处的位置的作用不同,因而被称之为回调函数,仅此而已。

STM32的回调函数有 2种写法:

  • weak方式的通用函数写法,
  • 函数指针写法。

采用回调函数的写法,是必须的吗?

是必须的,也不是必须的。

回调(callback)是一种非常重要的机制,主要可以用来实现软件的分层设计,使得不同软件模块的开发者的工作进度可以独立出来,不受时空的限制,需要的时候通过约定好的接口(或者标准)相互契合在一起,也就是C++或者JAVA等现代编程语言声称的所谓面向接口编程。同时回调也是定制化软件的基石,通过回调机制将软件的前端和后端分离,前端提供逻辑策略,后端提供逻辑实现。

这意味着:

如果使用 st官方函数库来编程,就是必须的;
如果软件完全由自己来实现,就不是必须的。

在软件编写中,分工的需要:回调,这是一种“软件编程技术”

使用 st官方函数库来编程时,HAL函数库是 st官方编写的;回调函数的具体化与完善,是由用户来完成的。

如果软件完全由自己来实现,那么,为了模拟回调函数的功能,又可以怎样来做呢?

  • 直接在中断中,调用具有相同功能的普通函数就可以了。无需 weak方式的支持,无需采用函数指针。
  • 或者,直接将函数的实现代码,拷贝到中断函数中也行。
  • 。。。。。。

小结:

1. 回调,这是一种“软件编程技术”,只不过是为了“软件分工”的需要。

因为在基于 st函数库的编程中,HAL库与回调函数的编写,它们的完成者,不是同一个。

回调函数:就是一个独立的函数,只不过是:在特定的软件设计模式中(基于接口编程),处在特定的软件结构位置,穿上了特定的马甲(weak, 函数指针),因而,有了回调函数这个特定的称谓。实质上,还就是一个独立的函数。

2. 类比

“张三”带上拳套,跑到了擂台上,就叫“拳击手”,仅此而已。
“张三”     -------功能模块
拳套       -------马甲,带着马甲的张三,叫函数;带着拳套马甲的,叫函数指针?
擂台       ------特定场景,特定位置
“拳击手” ------特定称谓

实质上,“张三” 是“张三” ,带着拳套马甲的张三,也还是张三;“函数”是“函数”。采用weak 重写, 或函数指针方式等马甲实现的,也还是函数。披着羊皮的狼,它还是狼。

注意:带着拳套的张三(函数),只有在擂台(特定场景)上才叫“拳击手”。假如此时带着拳套的张三走在闹市中,也许就叫怪人吧?

3. “回调”是一个 TMD 稀里糊涂的概念,要想理解它,可能还是使用 callback 容易理解一些。

callback

  • call then back:执行具有返回值的函数。
  • call without back:执行没有返回值的函数。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32中,函数是指在特定事件发生时自动用的函数函数在编程中经常被用于处理异步操作、中断处理以及事件驱动的程序设计中。在STM32中使用HAL库时,可以使用函数来处理定时器中断事件、外部中断事件等。 引用提供了一个关于STM32 HAL库的PWM函数的特性的博客链接,可以进一步了解函数的使用方法。 引用给出了一个主函数的示例代码,其中使用了HAL_TIM_PWM_Start_IT()函数来打开定时器的PWM输出,并设置了相应的参数。 引用提到了STM32定时器的PWM模式,包括边沿对齐模式和中间对齐模式。中间对齐模式又分为三种对齐方式,具体区别可以在相关文档中进一步了解。 综上所述,STM32函数是在特定事件发生时自动用的函数,可用于处理异步操作和中断处理。可以通过HAL库来使用函数,并根据需要配置和用相应的函数来实现PWM输出等功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32三种对齐计数模式及其中断函数——用CubeMX工具](https://blog.csdn.net/m0_50354464/article/details/124545243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值