Forum: Mikrocontroller und Digitale Elektronik AVR Studio GCC Codeteile von der Optimieerug ausschließen?


von René P. (speedy909)


Lesenswert?

Hallo,

habe momentan wieder etwas zeit mich mit meinem atmega8 zu beschäftigen.
ich arbeite gerade ein buch zu dem thema durch.

am anfang ist diese funktion ganz praktisch (beispiel aus dem buch), 
leider wird bei der optimierungseinstellung "0S" die 1. for schleife 
wegoptimiert, wie kann ich das verhindern? ohne die optimierung 
auszuschalten?
1
void wartex10ms(unsigned char faktor)
2
{
3
 for (unsigned char j = 0; j < faktor; j++)
4
 {
5
   for (unsigned int i = TAKT/4000UL; i > 0; i--);
6
 }
7
}

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Du nimmst statt der selbstgewickelten Schleifen (von denen du sowieso
vorab nicht weißt, wie lange sie denn wirklich verzögern) die
Funktionen aus <util/delay.h> bzw. <util/delay_basic.h>.

von Michael Wilhelm (Gast)


Lesenswert?

Evtl. bei faktor ein volatile setzen?

MW

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

p.s.:
1
#define F_CPU 1000000ul
2
#include <util/delay.h>
3
4
void wartex10ms(unsigned char faktor)
5
{
6
  while (faktor-- > 0)
7
    _delay_ms(10);
8
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.