大家在学习开发过程中会发现一个问题,就是在使用中断函数时,绝大多数情况下是避免不了在中断函数里调用延时函数的,然而,就是这样导致了一些bug,困扰了我许久,我不知道大家有没有遇到过这种问题,如果有,那恭喜你,我已经帮你踩了坑,让我来给你讲讲吧。
为什么说这样会有问题呢,你不妨在你的代码中试试,你就会发现,当你的代码运行到中断函数中的延时函数时,它就卡死了,即整个程序都正常不了了,也相当于要重置你的程序,不过在重置后运行到刚才所谓的延时函数时,它将再一次卡死,这样是不行的。
我经过探索之后发现了问题所在,就是,那些比如按键触发等需要人为参与的中断,均会存在此问题,原因就是:人为操作时间如果短于延时时间,则程序在触发中断过程中,比如按下按键过程均视为中断触发,计时器在计时,延时时间已过,故程序在等待已超的计时器必然等不到,比如需计到2000,而触发中断过程后就已经记到2500,这样就会卡死。
那这样的中断就不能用延时了吗,可是延时功能又是不可或缺的呀,我将给你方法:定时器。
没错,解决方法就是定时器。既然你要避免人为操作时间导致计时器计过,那么我就再来一个级别更高的定时器中断,让它每隔一段时间计数一次,则你在要延时的地方加一个判断函数即可,即计数在增加,计到多少换算成延时时间。这样一来,是不是解决了。
只有亲身经历过这个问题 才能体会到我方法的巧妙之处,希望对你们有帮助。
下期出代码辅助理解!