我想为 Atmel AVR 微控制器编写一个 C 代码固件。我将使用 GCC 编译它。此外,我还想启用编译器优化(-Os
或 -O2
) ,因为我认为没有理由不启用它们,而且它们可能比手动编写程序集更快地生成更好的程序集。
但我想一个小块的代码没有优化。我希望将函数的执行延迟一些时间,因此我想编写一个不执行任何操作的循环来浪费一些时间。不需要精确,只需要等待一段时间。
/* How to NOT optimize this, while optimizing other code? */
unsigned char i, j;
j = 0;
while(--j) {
i = 0;
while(--i);
}
Since memory access in AVR is a lot slower, I want i
and j
to be kept in CPU registers.
更新: 我刚从 AVR Libc中找到了 util/delay.h和 Util/late _ basic. h。尽管在大多数情况下,使用这些函数可能是一个更好的主意,但是这个问题仍然是有效和有趣的。
相关问题: