标准库与HAL库的中断处理有何不同?

一、标准库

在标准库中是在中断处理函数中,完成对接收数据的处理,当产生串口接收中断,程序会终止运行主函数,自动跳转到对应的中断函数。

优点:简单直接

缺点:如果程序停留在中断处理函数的时间太久,会耽误主函数的时间。也会让其他中断受阻,其他中断需要等待当前中断处理完成后,才能进行下一个中断处理。

二、HAL库

为了解决中断的问题,HAL库函数改用中断回调函数的方式处理中断事件。

在HAL库程序中,当产生中断事件,程序依然会跳转到中断处理函数,但中断处理函数中只简单标注了中断来源,然后就快速退出中断,回到主函数。回到主函数后并不是继续执行之前的中止的程序,而是自动调用中断回调函数,对中断事件的处理都放在了回调函数里。由于程序已经退出了中断状态,回归主函数,所以其他中断不会受阻。

关于中断回调函数还有一个弱函数定义的概念

__weak 前缀的作用是定义一个弱函数,弱函数相当于后补球员,如果正式球员在场,候补球员不能上场。如果正式球员缺席,候补球员补位,保证比赛正常进行。

当在usart.c文件中定义了中断回调的正式函数,弱函数不会被编译,假如我们的程序中不需要串口中断功能,删除了usart.c文件,中断函数被删除了,此时将会编译中断回调的弱函数,如果程序中没有若函数当候补,删除正式函数后,就会因为编译器找不到中断回调函数而报错。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值