[STM32F1] 在callback回调函数和中断函数中处理有何区

[复制链接]
2694|41
zhenykun 发表于 2021-12-1 22:44 | 显示全部楼层
感觉这样很安全呀
wyjie 发表于 2021-12-1 22:47 | 显示全部楼层
一针见血呀
 楼主| dengdc 发表于 2021-12-1 22:51 | 显示全部楼层
目的是好的,是怕你不知道中断发生后怎么处理
 楼主| dengdc 发表于 2021-12-1 22:53 | 显示全部楼层
除了执行你的中断任务外还要配合清理中断标志,恢复中断等中断操作的一系列动作
wyjie 发表于 2021-12-1 22:55 | 显示全部楼层
本意思让你不用自己操作这些跟任务无关的动作。
juventus9554 发表于 2021-12-1 22:57 | 显示全部楼层
但是嵌套层太多,其实影响到了系统的性能。
 楼主| dengdc 发表于 2021-12-1 22:58 | 显示全部楼层
是的,确实增加了处理时间,特别是嵌套后,这个跳转严重影响了系统性能。
heweibig 发表于 2021-12-1 23:00 | 显示全部楼层
目的是好的,就是怕有些人不知道中断发生后怎么清理标志,恢复中断等。结果干了坏事。
 楼主| dengdc 发表于 2021-12-1 23:02 | 显示全部楼层
嗯,各有利弊吧,不同角度看,好处 是不同的
shimx 发表于 2021-12-1 23:04 | 显示全部楼层
是的是的 也只能这样理解了
zhaoxqi 发表于 2021-12-1 23:07 | 显示全部楼层
回调函数对于初学者不好理解,因为大家都习惯顺序下来的代码逻辑,用多了就体会到回调函数的好处。
happy_10 发表于 2021-12-1 23:09 | 显示全部楼层
最明显的就是可以“分层”,把主体程序抽象出来,经常变动的通过外部回调函数实现。
dingy 发表于 2021-12-1 23:12 | 显示全部楼层
操作系统驱动就是有点这个意思。
 楼主| dengdc 发表于 2021-12-1 23:14 | 显示全部楼层
是的,让一部分代码不用自己写了。
dingy 发表于 2021-12-1 23:16 | 显示全部楼层
让你只关注应用相关的代码,你还不满意

收到数据该怎么处理,写驱动的人肯定是不知道的,这与具体应用相关,所以把应用相关的做成回调函数,其它的(比如清除相关标志。。。)应用就不用关心了,这不好吗
jiajs 发表于 2021-12-1 23:18 | 显示全部楼层
相当于买个毛坯房,用户只关心怎么装修,难道怎么做房子还要操心吗
jiahy 发表于 2021-12-1 23:20 | 显示全部楼层
回调函数大部分也是在中断里调用的
yszong 发表于 2021-12-1 23:24 | 显示全部楼层
其实就是在中断程序中插入了一个函数,也是调用完了之后再返回。
 楼主| dengdc 发表于 2021-12-1 23:26 | 显示全部楼层

明白了,多谢大家讨论这么多哈
香水城 发表于 2021-12-3 10:17 | 显示全部楼层
本帖最后由 香水城 于 2021-12-3 10:34 编辑

这个回调函数的实质就是基于中断的条件函数。 这里算是中断函数的一个子块。
一般来讲我们开启中断往往具有一定目的,具体是什么看具体应用而定,比方基于定时器更新中断统计脉冲个数啊,基于DMA传输完成中断做相关处理啊等等。

当然,或许有人说我只是基于中断设置些标志位,即使这样最终还是基于标志的变更做相应的处理。

换言之,从这个角度讲,中断回调函数一定存在,差别在于是否需要把它单列出来,给它起个什么样的名字,具体内容由应用场景来定。

现在ST的库这样安排 就让程序结构很清晰,至于相应内容我们只需在已有回调函数里填空即可,内容可以复杂可以简单。当然 也可以不用它的,自己另行组织函数也行。



还有,前面有人提到它的资源占用问题。所以,这个地方还是要灵活运用,如果该回调函数内容多、耗时 长,系统里其它任务或中断实时要求也高,就得注意该回调函数所在中断的优先级。或者说,如果该回调函数要处理的事情不紧急或系统不允许它以中断方式耗时过多,我们可以考虑在中断里设立相关标志,然后在主程序基于标志状态再决定是否运行该回调函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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