mikrocontroller.net

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


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier Auszüge aus dem Code.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BLÖDSINN!!

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

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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__...

Autor: Jens (Gast)
Datum:

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

prima

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.