类似uart_irq、timer_irq中断中是否可以加while break?

昨天公司里讨论到一个问题嵌入式中断是否可以写while,答案是:肯定的,但要加类似break的退出。有人说绝对不行,而且代码里面不能出现while(1){while(flag){}},以及不要加delay。。。。

下面我据各大著名项目代码,具体情况可以自己打开文件详细阅读

linux中的uart:

å¾ç

å¾ç

å¾ç

nrf中的uart:

å¾ç

å¾ç

å¾ç

å¾ç

å¾ç

å¾ç

timer定时器:

spi传输

å¾ç

stm32:

打印函数,可以while(1){while(flag){}}和delay

å¾ç

等等等,还有很多这样的例子。while(flags){}在中断中是要尽量不加而不是不能加,而且很多时候加while(flags){}会让代码看起来更清晰,而不是一根筋所有地方都要用异步。编程要学会具体情况具体分析,不要会了一种就把其它的否决掉,万万不可以偏概全。就例如代码大全第123页中说道:“设计是一种启发式的过程。固执于某一种单一方法会损害创新能力,从而损害你的程序。”又如嵌入式神作《时间触发嵌入式系统设计模式》中第18页说道:“alexander将模式定义为“三要素原则,表示了特定的适用场合、问题和解决方案之间的关系”。”

猜你喜欢

转载自blog.csdn.net/u012332571/article/details/81415770