原创 直接在中断服务程序中进行延时操作可能会导致一些问题,比如你提到的时序问题和稳定性问题

2023-10-14 20:05 216 5 5 分类: 物联网 文集: 学习分享

和我一个前辈的前辈说前辈。怎么可以在定时器里放延时函数。中断里代码多,影响时序还有不稳定。出问题这不好查。


在嵌入式系统或者底层程序设计中,经常会遇到需要在中断服务程序(Interrupt Service Routine, ISR)中执行延时操作的情况。但是,直接在中断服务程序中进行延时操作可能会导致一些问题,比如你提到的时序问题和稳定性问题。

首先,从时序的角度来看,中断服务程序的执行应该是即时的,也就是说,当一个中断事件发生时,系统应该立即处理这个事件,而不能等待某个延时操作的完成。如果直接在中断服务程序中添加延时操作,可能会影响系统的响应时间和实时性。

其次,从稳定性的角度来看,中断服务程序应该尽可能短小精悍,以避免长时间占用系统资源。如果在中断服务程序中添加了复杂的延时操作,可能会导致系统资源的浪费,甚至可能引发新的中断事件,进而影响系统的稳定性。

那么,如何在中断服务程序中进行延时操作呢?一种常见的做法是使用一个任务队列或者工作线程来进行延时操作。当一个中断事件发生时,中断服务程序可以将需要延时操作的任务添加到任务队列或工作线程中,然后由系统在空闲时间或者定时器周期性触发的时间点来执行这个延时操作。

这样做的好处是,中断服务程序不需要等待延时操作的完成,可以立即返回并处理下一个中断事件;同时,延时操作也可以在系统空闲时间或者定时器触发的时间点执行,不会影响系统的实时性和稳定性。

当然,使用任务队列或工作线程的方式也会有一些额外的开销,比如需要使用锁等同步机制来保护任务队列或工作线程的访问,需要定期唤醒工作线程等。因此,在实际应用中,需要根据具体的需求和系统资源情况来选择最合适的延时操作方式。

总结一下,对于在中断服务程序中进行延时操作的问题,使用任务队列或工作线程的方式是比较常见和可行的解决方案。但需要注意这种方案可能带来的开销和潜在问题,并在实际应用中进行适当的优化和选择。

作者: 丙丁先生, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3996156.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条