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
Hier Auszüge aus dem Code.
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.
BLÖDSINN!! Hab die var natürlich nicht als static sondern als EXTERN !
Ä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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.