请问一下STM32回调函数和普通函数区别

2019-07-14 15:41发布

使用的是STM32L0系列,发现HAL_UART_RxCpltCallback这类中断中的回调函数和普通函数没什么区别呢,回调函数定义是将函数指针作为别的函数的参数被调用,但是感觉HAL_UART_RxCpltCallback并没有作为其它函数的指针呢?它是个弱定义函数,可以被用户的代码覆盖,这个能理解,回调函数就理解不了。
有谁理解吗,能给解释一下吗,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
gsdafs
1楼-- · 2019-07-14 22:52
谢谢您的答复,解释地挺好。
有没有专门针对STM32回调函数的讲解呢,比如USART接收中断中的回调函数,我就感觉此处的回调函数和普通函数没什么区别,因为它好像针对这个回调函数并没有做特殊的处理。
谢谢您。
lingjianghui
2楼-- · 2019-07-15 01:58
回调函数与普通函数的区别在于调用者不同。普通函数的调用是直接或者间接由main函数发起的。回调函数由系统发起调用,与main函数无关。在STM32的HAL库中,回调函数由中断发起。实际上它们就是中断处理函数。
gsdafs
3楼-- · 2019-07-15 06:24
 精彩回答 2  元偷偷看……
lingjianghui
4楼-- · 2019-07-15 12:04
对于大多数操作系统来说,确实需要注册。这个HAL库是为最简单的单片机写的,它只是借用了回调函数的名字而已,它实际上是中断响应程序。你可以把weak声明看作是注册的另一种形式——一旦声明自己的回调函数之后,它就替换了库原有的回调函数,从而实现在HAL库中的“注册”功能。HAL库的回调函数与真正的回调函数的共同点在于:它们与主程序都是异步的,即这些回调函数的调用与主程序之间没有因果关系。
gsdafs
5楼-- · 2019-07-15 15:26
谢谢楼上的细心回答,顿有拨云见日之感
jhhfhgj
6楼-- · 2019-07-15 21:19
回调函数只能在特定的点才能用吧

一周热门 更多>