昨天公司里讨论到一个问题嵌入式中断是否可以写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将模式定义为“三要素原则,表示了特定的适用场合、问题和解决方案之间的关系”。”