打印
[STM32F0]

STM32库函数里众多的Callback()怎么使用

[复制链接]
楼主: wyjie
手机看帖
扫描二维码
随时随地手机跟帖
21
juventus9554| | 2022-10-8 22:22 | 只看该作者 回帖奖励 |倒序浏览
所谓回调的意思就是你事先调用一下事件绑定函数并把你的函数指针告诉它,等到那个事件发生的时候就会回过头调用你的函数。

使用特权

评论回复
22
pengf| | 2022-10-8 22:24 | 只看该作者
这是事件驱动的基本概念,在软件设计里很常见。而mcu的一些基本的中断就是基于这个方法的。

使用特权

评论回复
23
jiajs| | 2022-10-8 22:26 | 只看该作者
你在你定义的函数后面加上interrupt 0 1 2 3这种代码,编译器会认出你这个函数并会固定把你的函放在一个地址上,当事件发生时就会直接跳到那个地址。

使用特权

评论回复
24
supernan| | 2022-10-8 22:28 | 只看该作者
每个人的中断任务是不同的,为了统一标准,就定义了这个中断回调函数。HAL库标准就是不管是谁写的中断函数,都统一调用这个函数,具体某个人要执行什么任务,自己在回调函数中写任务就行了,而不必修改中断函数。

使用特权

评论回复
25
huangchui| | 2022-10-8 22:33 | 只看该作者
这样子库函数就独立出来了。
比如stm32f1xx_hal_adc.c库文件中void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc)中断就调用了HAL_ADC_ConvCpltCallback(hadc)。

使用特权

评论回复
26
dengdc| | 2022-10-8 22:37 | 只看该作者
中断回调,

使用特权

评论回复
27
xxrs| | 2022-10-8 22:42 | 只看该作者
这个版块有个介绍回调函数的贴,你找找。

使用特权

评论回复
28
renyaq| | 2022-10-8 22:44 | 只看该作者
而HAL_ADC_ConvCpltCallback(hadc)函数是在库里定义了的:__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)。为啥库函数里定义的函数要加__weak?这个__weak是弱定义的意思,就是如果用户如果没有定义该函数,中断就调用库函数中的该函数,如果用户定义了一个不含__weak的同名的回调函数void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc),那么中断中就调用用户的函数而忽略库函数中的函数。

使用特权

评论回复
29
llljh| | 2022-10-9 19:26 | 只看该作者
这样做就不需要修改函数库,既保证了函数库的完整性,又增强了用户的灵活性。

使用特权

评论回复
30
dengdc| | 2022-10-9 19:29 | 只看该作者
所以动不动就修改函数库的都是不懂库的强大!

使用特权

评论回复
31
juventus9554| | 2022-10-9 19:34 | 只看该作者
具体使用Callback函数的时候就是先在对应中断库函数中找到__weak定义的Callback函数,复制该函数在自己的.c文件中重新编写没有__weak定义描述的函数处理程序,该程序就是实际中断处理函数。

使用特权

评论回复
32
dengdc| | 2022-10-9 19:36 | 只看该作者
其实把hal库读懂了,对编程理解能更深一个层次

使用特权

评论回复
33
wyjie|  楼主 | 2022-10-9 19:38 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
34
tpgf| | 2022-11-4 08:53 | 只看该作者
callback可以这么理解吧,函数的占位符,就是达到某种条件时才会执行的函数。

使用特权

评论回复
35
nawu| | 2022-11-4 09:09 | 只看该作者
一般而言,函数的形参是指由外往内向函数体传递变量的入口,但此处加了callback后则完全相反,它是指函数体在完成某种使命后调用外部函数的出口!这时候应该明白什么叫"回调"了吧,也就是回头调用外部函数的意思。

使用特权

评论回复
36
aoyi| | 2022-11-4 10:09 | 只看该作者
callback可以这么理解,函数的占位符,就是达到某种条件时才会执行的函数。

使用特权

评论回复
37
zljiu| | 2022-11-4 10:31 | 只看该作者
回调函数分为异步回调和同步回调两种,我们一般来说用的都是用异步的回调

使用特权

评论回复
38
gwsan| | 2022-11-4 10:42 | 只看该作者
回调函数是一个函数,将会在另一个函数完成执行后立即执行。回调函数是一个作为参数传给另一个函数的函数,这个回调函数会在传给的函数内部执行

使用特权

评论回复
39
tfqi| | 2022-11-4 11:20 | 只看该作者
回调函数:在计算机科学中,回调函数是指一段以参数的形式传递给其它代码的可执行代码。回调函数的本质就是“只有我们才知道做些什么,但是我们并不清楚什么时候去做这些,只有其它模块才知道,因此我们必须把我们知道的封装成回调函数告诉其它模块”。

注意,回调函数是一种软件设计上的概念,和某个编程语言没有关系,几乎所有的编程语言都能实现回调函数。回调函数又是异步下不可或缺的一种机制。

使用特权

评论回复
40
LLGTR| | 2022-11-4 16:58 | 只看该作者
基本是设置了中断,然后你注册这个回调函数,执行了指定的中断,就会进入到这个回调函数中了。

使用特权

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

本版积分规则