¿Cómo evitar que GCC optimice un ciclo de espera ocupado?

Quiero escribir un firmware de código C para microcontroladores Atmel AVR. Lo compilaré usando GCC. Además, quiero habilitar las optimizaciones del compilador -Os o-O2), ya que no veo ninguna razón para no habilitarlos, y probablemente generarán una mejor forma de ensamblaje más rápido que escribir el ensamblaje manualmente.

Pero quiero un pequeño fragmento de código no optimizado. Quiero retrasar la ejecución de una función por algún tiempo y, por lo tanto, quería escribir un bucle de no hacer nada solo para perder algo de tiempo. No es necesario ser preciso, solo espera un poco.

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

ado que el acceso a la memoria en AVR es mucho más lento, quieroi yj para mantenerse en los registros de la CPU.

Update: acabo de encontrar util / delay.h y util / delay_basic.h desdeAVR Libc. Aunque la mayoría de las veces podría ser una mejor idea usar esas funciones, esta pregunta sigue siendo válida e interesante.

Preguntas relacionadas

¿Cómo evitar que gcc optimice algunas declaraciones en C? ¿Hay alguna forma de decirle a GCC que no optimice un fragmento de código en particular? Cómo no optimizar - mecánica de una función de locura

Respuestas a la pregunta(8)

Su respuesta a la pregunta