MCU死循环,国外工程师为什么喜欢for(;;) ?

💡 原文中文,约2600字,阅读约需7分钟。
📝

内容提要

当编写单片机程序的死循环时,使用for(;;)和while(1)没有本质区别。编译器会将while(1)优化成无条件跳转指令,与for(;;)相同。在现代编译器中,它们的执行性能几乎没有区别。然而,在嵌入式工作中,特别是MCU编程中,一些私有编译器可能会对while(1)进行更多的优化。一些编码规范也建议使用while(1)来表示无限循环。根据测试结果,for(;;)的执行速度略快于while(1),但在现代编译器的O3优化下,二者几乎没有差别。因此,根据个人喜好和编译器的优化能力,选择使用哪种形式。

🎯

关键要点

  • 在编写单片机程序的死循环时,for(;;)和while(1)没有本质区别。
  • 编译器会将while(1)优化成无条件跳转指令,与for(;;)相同。
  • 现代编译器的执行性能几乎没有区别,但一些私有编译器可能对while(1)进行更多优化。
  • 根据测试结果,for(;;)的执行速度略快于while(1),但在现代编译器的O3优化下,二者几乎没有差别。
  • while(1)需要进行比较运算,而for(;;)直接使用无条件转移指令。
  • 在嵌入式工作中,专用编译器可能没有良好的优化,导致while(1)比for(;;)多几个语句。
  • 一些编码规范建议使用while(1)表示无限循环,禁止使用for(;;)。
  • for(;;)被认为是一种过时的编码风格,可能导致代码可读性差。
  • 在现代编译器中,for(;;)和while(1)的性能差异不再显著,选择使用哪种形式可根据个人喜好。
  • 高主频的芯片不在乎一两条机器指令,代码的可读性和维护性更为重要。
🏷️

标签

➡️

继续阅读