[STM32F0] STM32库函数里Callback()怎么使用

[复制链接]
2078|35
wangzsa 发表于 2020-8-27 22:36 | 显示全部楼层
中断之后会调用这个函数啊
wenfen 发表于 2020-8-27 22:43 | 显示全部楼层
其实就是一个函数指针,你定义一个函数然后取得这个函数的指针,在某个事件发生的地方让这个事件去调用你事先定义好的函数去完成你想做的事。
chenho 发表于 2020-8-27 22:48 | 显示全部楼层
所谓回调的意思就是你事先调用一下事件绑定函数并把你的函数指针告诉它,等到那个事件发生的时候就会回过头调用你的函数。
dingy 发表于 2020-8-27 22:53 | 显示全部楼层
这是事件驱动的基本概念,在软件设计里很常见。而mcu的一些基本的中断就是基于这个方法的。
pengf 发表于 2020-8-27 22:57 | 显示全部楼层
你在你定义的函数后面加上interrupt 0 1 2 3这种代码,编译器会认出你这个函数并会固定把你的函放在一个地址上,当事件发生时就会直接跳到那个地址。
pangb 发表于 2020-8-27 23:02 | 显示全部楼层
每个人的中断任务是不同的,为了统一标准,就定义了这个中断回调函数。HAL库标准就是不管是谁写的中断函数,都统一调用这个函数,具体某个人要执行什么任务,自己在回调函数中写任务就行了,而不必修改中断函数。
zyf部长 发表于 2020-8-27 23:09 | 显示全部楼层
这样子库函数就独立出来了。
比如stm32f1xx_hal_adc.c库文件中void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc)中断就调用了HAL_ADC_ConvCpltCallback(hadc)。
jiekou001 发表于 2020-8-27 23:10 | 显示全部楼层
中断回调,
jiekou001 发表于 2020-8-27 23:11 | 显示全部楼层
这个版块有个介绍回调函数的贴,你找找。
wangpe 发表于 2020-8-27 23:14 | 显示全部楼层
而HAL_ADC_ConvCpltCallback(hadc)函数是在库里定义了的:__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)。为啥库函数里定义的函数要加__weak?这个__weak是弱定义的意思,就是如果用户如果没有定义该函数,中断就调用库函数中的该函数,如果用户定义了一个不含__weak的同名的回调函数void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc),那么中断中就调用用户的函数而忽略库函数中的函数。
happy_10 发表于 2020-8-27 23:17 | 显示全部楼层
这样做就不需要修改函数库,既保证了函数库的完整性,又增强了用户的灵活性。
juventus9554 发表于 2020-8-27 23:21 | 显示全部楼层
所以动不动就修改函数库的都是不懂库的强大!
wahahaheihei 发表于 2020-8-27 23:28 | 显示全部楼层
中断函数才有的。
stly 发表于 2020-8-28 22:22 | 显示全部楼层
具体使用Callback函数的时候就是先在对应中断库函数中找到__weak定义的Callback函数,复制该函数在自己的.c文件中重新编写没有__weak定义描述的函数处理程序,该程序就是实际中断处理函数。
hanwe 发表于 2020-8-28 22:27 | 显示全部楼层
其实把hal库读懂了,对编程理解能更深一个层次
 楼主| wyjie 发表于 2020-8-28 22:31 | 显示全部楼层

好的,我明天去单位试一下,多谢各位大侠了哈        
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部