PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : _delay_ms wird wegoptimiert [solved]



clupus
18.06.2005, 21:54
Hallo allerseits,
ich bin recht neu auf dem Gebiet der Hardware-Programmierung und bin auf ein kleines Problem gestoßen:
Ich muss einen Motor für eine gewisse Zeit (ca. 10 sec) laufen lassen. (Seilwinde!) Ich dache nun, dass ich in einer Haeder-Datei eine Zahl (WAIT_RU_DUWN) festlege, die mir in 100ms angibt, wie lange der Motor laufen soll.
Ich hab jetzt also eine kleine Routine geschrieben, die nachdem der Motor aktiviert wurde WAIT_RU_DOWN mal das Makro _delay_ms(100); aufruft. Anschließend wird abgeschalten.
Soweit OK. Jage ich die ganze Sache jetzt durch den avr-gcc und schaue mir das Ergebnis mir avr-objdump -S software.o an, so finde ich zwar irgendwo die Routine mit der Zeitverzögerung, jedoch ist sie leer! Ich verwende den Aufruf:
avr-gcc -g -Os -mmcu=at90s2313 -c software.c
avr-gcc -g -Os -mmcu=at90s2313 software.o -o software.out
Wenn ich statt -Os -O0 verwende, bleibt die Routine bestehen. Bei jerder anderen Optimierungsstufe außer 0 optimiert er mir so meine Zeitverzögerung weg.
Was kann ich dagegen machen?

Vielen Dank im Voraus
Christian

clupus
18.06.2005, 22:34
Dumm muss man sein...

Ich habe versehentlich einen anderen Fehler gemacht: Ich habe die _delay_ms Aufrufe immer in eine for-Schleife verpackt. Hier habe ich versehentlich geschrieben

for(i=0;i==xxy;i++){...}

statt

for (i=0;i<xxy;i++){...}.

Sorry, das hat sich damit erledigt.
Christian