我有一些遗留代码,其中包含一个时间浪费循环,以留出时间来完成eeprom读取(不好的做法):
for(i = 0; i < 50; i++);
但是,为了提高速度而打开编译器优化时,会发生一些奇怪的事情。它不一定与该语句有关,但是我想知道编译器是否可以优化延时时间
这取决于的类型i
。如果只是循环内没有使用的普通整数类型,则没有副作用,并且编译器可以自由地优化整个过程。
如果您声明i
为volatile
,则编译器被迫在循环的每一圈生成递增变量并读取变量的代码。
这是为什么您不应该在嵌入式系统中使用像这样的“烧掉”循环的众多原因之一。您还会占用100%的CPU并消耗100%的电流。并且您在系统时钟和环路之间建立了紧密的耦合,这不一定是线性的。
专业的解决方案始终是使用片上硬件定时器而不是“烧掉”循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句