之前用hal库中断那里用到过回调函数,但是自己不是很理解。但是今天看代码的时候看到这个串口中断的回调函数,和普通函数到底有啥区别啊,在随便在哪用都行吗?都有哪些使用场景呢?
中断的回调函数与标准库的中断函数其实使用方法是类似的。
引用之前我在论坛看到的一段话:【转自 硬石社区】
函数调用多肯定会影响运行速度回调函数可以说类似这个中断服务函数,在发生中断时候它会触发运行中断服务函数,如果我们“触发”到回调函数运行条件它就会运行回调函数再举例来说,我们一个定时器有多个中断源、比如更新中断、通道捕获中断、刹车中断等等,我们期望发生更新中断可以执行指定的A函数,发生通道捕获中断可以执行指定的B函数,发生刹车中断可以执行指定的C函数,然后实际上这个A、B、C函数是可以我们自己编程的(标准库就是需要自己写的)但是HAL库就帮你把A、B、C函数都定义好,命好名了,每次发生中断时候,它会自动去运行这些函数附带一个网站: https://www.zhihu.com/question/19801131
个人认为这是HAL库为了方便用户代码做的一个措施,在中断函数中已经调用了这个回调函数,运行到中断的位置时,再回来找到这个回调函数并运行,这样,就保证了中断函数库的完整性。
实际上,按照HAL库的逻辑,我们使用时是去调用这个HAL库里的函数,这个是正常的使用方式。对于中断来讲,需要另一种方式:程序运行到中断入口,由HAL库函数来调用客户自己定义的函数,这中行为方式就称为回调函数了。