Como impedir que o GCC otimize um ciclo de espera ocupado?
Quero escrever um firmware de código C para os microcontroladores Atmel AVR. Vou compilá-lo usando o GCC. Além disso, desejo habilitar otimizações do compilador -Os
ou-O2
), como não vejo razão para não habilitá-los, e provavelmente eles gerarão uma montagem melhor, mais rapidamente do que escrever a montagem manualment
Mas eu quero um pequeno pedaço de código não otimizado. Eu quero atrasar a execução de uma função por algum tempo e, assim, eu queria escrever um loop de não fazer nada apenas para perder algum tempo. Não precisa ser preciso, aguarde um pouc
/* How to NOT optimize this, while optimizing other code? */
unsigned char i, j;
j = 0;
while(--j) {
i = 0;
while(--i);
}
Como o acesso à memória no AVR é muito mais lento, eu queroi
ej
para ser mantido nos registros da CP
Update: Acabei de encontrar util / delay.h e util / delay_basic.h a partir deAVR Libc. Embora na maioria das vezes seja uma idéia melhor usar essas funções, essa pergunta permanece válida e interessante.
Perguntas relacionadas
Como evitar que o gcc otimize algumas instruções em Existe uma maneira de dizer ao GCC para não otimizar um pedaço de código específicComo não otimizar a distância - mecânica de uma função insensata