Wie kann verhindert werden, dass GCC eine ausgelastete Warteschleife optimiert?

Ich will schreiben Sie ein C-code der firmware für Atmel AVR-mikrocontroller. Ich kompiliere es mit GCC. Auch ich möchte zum aktivieren der compiler Optimierungen (-Os oder -O2), sehe ich keinen Grund, nicht aktivieren Sie Sie, und Sie werden wahrscheinlich zu generieren, die eine bessere Montage viel schneller als das schreiben von assembly manuell.

Aber ich will ein kleines Stück code nicht optimiert. Ich will verzögern die Ausführung einer Funktion durch einige Zeit, und so wollte ich schreiben, ein do-nothing-loop einfach zu verschwenden einige Zeit. Keine Notwendigkeit, um genau zu sein, warten Sie einfach einige Zeit.

/* How to NOT optimize this, while optimizing other code? */
unsigned char i, j;
j = 0;
while(--j) {
    i = 0;
    while(--i);
}

Da der Speicher-Zugriff in der AVR ist viel langsamer, ich will i und j gehalten werden, in CPU-Register.


Update: ich habe gerade festgestellt, util/delay.h und util/delay_basic.h von AVR-Libc. Obwohl die meisten Male ist es vielleicht eine bessere Idee für die Verwendung dieser Funktionen, diese Frage bleibt gültig und interessant.

InformationsquelleAutor der Frage Denilson Sá Maia | 2011-08-16

Schreibe einen Kommentar