Forum: Compiler & IDEs konstante als ganzzahl - z.b. BYTE - definieren


von jr (Gast)


Lesenswert?

im gcc-tutorial gibt es ein beispiel in c zum tasten-entprellen, das die 
funktion _delay_ms(time) benutzt.
der parameter time ist in der definition von _delay_ms (die über delay.h 
eingebunden wird) als double definiert.
compiliere ich das programm für den attiny2313 mit z.b _delay_ms(100), 
so wird 100 als double interpretiert, die double-routinen geladen(?) und 
somit sprengt das kleine programm den speicher des attiny2313.
wie kann ich dem compiler beibringen, dass die konstante "time" z.b. 
byte (oder sonst ein ganzzahltyp) ist? - ich will nicht delay.h 
umändern!
danke für die bisher gewährte hilfe
jr

von Karl H. (kbuchegg)


Lesenswert?

Du musst den Optimizer einschalten.
Der optimiert das alles so zurecht, dass die
double Berechnung rausfällt.

Übrigens: Eine vernünftigere Entprellung findest du zb.
hier. Die ist kurz, einfach zu benutzen und funktioniert
hervorragend:
http://www.mikrocontroller.net/articles/Entprellung
DIe Kosten für einen Timer sind mehr als gut investiert.

von jr (Gast)


Lesenswert?

da ich c erst selbst lerne, aber in meinem unterricht einsetzen will mit 
dem attiny2313, bin ich auch an dieser software-lösung wegen der 
grundsätzlichen bedeutung interessiert.

deshalb die frage: wie kann ich den optimizer einschalten für den 
c-compiler im avr-studio?

von johnny.m (Gast)


Lesenswert?

Project | Configuration Options, dann unten im Feld "Optimization" ein 
anderes Level als -O0 einstellen (-Os ist Codesize-Optimization, -O1 bis 
-O3 sind Optimierungen, die i.d.R. mehr oder weniger Kompromisse 
zwischen Codegröße und Geschwindigkeit machen).

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.