Я хочу написать прошивку на C-код для микроконтроллеров Atmel AVR. Я скомпилирую его с помощью GCC. Кроме того, я хочу включить оптимизацию компилятора (-Os
или -O2
), поскольку я не вижу причин не включать их, и они, вероятно, будут генерировать лучший способ сборки быстрее, чем писать сборку вручную.
Но я хочу, чтобы небольшой фрагмент кода не был оптимизирован. Я хочу отложить выполнение функции к некоторому времени, и поэтому я хотел написать цикл do-nothing, чтобы потратить некоторое время. Не нужно быть точным, просто подождите некоторое время.
/* 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. Хотя в большинстве случаев было бы лучше использовать эти функции, этот вопрос остается актуальным и интересным.