Forum: Compiler & IDEs Static Variable in Aufruf delay_ms(Variable) frisst 3,5 Kb Speicher !


von Jens (Gast)


Lesenswert?

Hallo,

habe in der main datei und in der lcd.c datei eine Variable(var) als 
static und global deklariert und in lcd.c definiert.
Ich verwende var um in der Ausgaberoutine für ein LCD im Scoll_Modus 
nicht nur was vorbeifliegen zu sehen sondern was zu lesen.

_delay_ms(writetime);

Nun erzeugt der Compiler bei verwendung der var einen riesen Code der 
mir den Programmspeicher mit 3,5 Kbyte vollstopft.
Verwende ich statt der var eine Zahl ist der Code nur noch 1/5 so groß.

Wie kommt das?
Kann man Variablen in _delay_ms() verwenden?

Jens

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hier Auszüge aus dem Code.

von (prx) A. K. (prx)


Lesenswert?

Wie hinlänglich bekannt und dokumentiert funktionieren die 
delay-Funktionen nur mit Konstanten. Andernfalls hat man die 
Fliesskommalib mit an der Backe und darf die angegebene Verzögerung als 
grosszügigst überschreitbaren Mindestwert betrachten.

von Jens (Gast)


Lesenswert?

BLÖDSINN!!

Hab die var natürlich nicht als static sondern als EXTERN !

von g457 (Gast)


Lesenswert?

Ändert auch nix an A.s korrekter Problemanalyse/-Lösung, hier noch ein 
hypscher Link dazu [1].
Entweder Compilezeit-Konstanten(!) angeben oder - wenn sichs zur 
Laufzeit ändern kann(muss) - sowas wie _delay_ms(1) in einer Schleife 
mit variabler Iterationslänge aufrufen.

HTH und HF

[1] http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

von Jens (Gast)


Lesenswert?

Danke für Antworten und Link.
Mit einer 1ms-Schleife läuftes und füllt den speicher mit ca. 1%.

prima

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.