Резервировать 2 из 32 регистров микроконтроллера для глупой петли - плохая идея.

у написать прошивку с кодом C для микроконтроллеров Atmel AVR. Я скомпилирую его с помощью GCC. Также я хочу включить оптимизацию компилятора (-Os или же-O2), поскольку я не вижу причин, чтобы не включать их, и они, вероятно, будут генерировать лучший способ сборки быстрее, чем запись сборки вручную.

Но я хочу небольшой кусочек кода не оптимизирован. Я хочу отложить выполнение функции на некоторое время, и поэтому я хотел написать цикл бездействия, чтобы просто потратить некоторое время. Не нужно быть точным, просто подожди немного.

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

Так как доступ к памяти в AVR намного медленнее, я хочуi а такжеj храниться в регистрах процессора.

Обновление: я только что нашелUtil / delay.h а такжеUtil / delay_basic.h изAVR Libc, Хотя в большинстве случаев лучше использовать эти функции, этот вопрос остается актуальным и интересным.

Смежные вопросы:

Как помешать gcc оптимизировать некоторые операторы в C?Есть ли способ сказать GCC не оптимизировать конкретный кусок кода?Как не оптимизировать прочь - механика глупости