单片机中为什么中断函数内部不能使用延时函数?

相信大家在学习STM32的过程中有可能听过这样子一句话:不要再中断函数中使用延时。这已经是形成了一种规范,因为这样子做可能会造成程序的死机,也有很多地方会以这个问题来考察面试者的基础知识是否扎实。

但是,为什么会出现这个情况呢,本期我们就来详细的介绍和讨论一下这个情况。

首先我们介绍一下中断函数的特点:

  1. 中断的优先级高:中断服务程序(ISR, Interrupt Service Routine)通常在中断发生时立即执行,打断当前正在执行的主程序或其他低优先级的中断服务程序

  2. 执行时间应尽可能短:为了确保系统能够快速响应其他中断,ISR的执行时间应该尽可能短。长时间的中断处理可能会导致其他中断被延迟处理,甚至丢失。

    

而延时函数,通常依赖于一些硬件资源,例如STM32中的默认系统滴答定时器也就是Systick。

其优先级属于最低级的15级,因此我们在中断函数中调用HAL_Delay时他会等待Systick计数到一定时间而退出延时。

<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值