www.mikrocontroller.net

Forum: Compiler & IDEs Stackbelastung durch printf()


Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATMEGA128:

Weiß irgendjemand, wieviel Stackspeicher die GCCLib-printf()-Funktionen
verbrauchen (hier in der printflt-lib Version), oder wo diese Info 
steht?
Ich hab hier immer wieder Abstürze, die durch Verwendung von printf() 
bei recht vollem RAM entstehen.....

Wär hilfreich, um solche Fälle besser abschätzen zu können.

Danke allen Gurus, die was dazu wissen ;-)

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte stark von den benutzten Formaten abhängen. Ich glaube nicht, 
daß es für sowas eine einfache Abschätzung gibt, die alle Fälle abdeckt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre auch noch die Frage, welche Version der avr-libc du benutzt.  Die
aktuelle dürfte im Stackverbrauch bei der Gleitkommaversion deutlich
besser liegen als die von Version 1.4.x.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Uhu: Jou, klar, dachte auch mehr an ne Größenordnung. Habe noch knapp 
200 Byte Stack und das reicht für ein simples
sprintf (cString,"init Bluetooth");

scheints nicht aus.

@ Jörg: Ich habe 2 Verzeichnisse für Libs auf dem Rechner:

E:\Programme\WinAVR\lib\gcc\avr\4.1.2        und
E:\Programme\WinAVR\lib\gcc\avr\3.4.6

Sind das die entspr. Library-Versionen (z.B. 3.4.6)?
Und: Woraus kann ich überhaupt die installierte WINAVR-Version ersehen, 
wo finde ich diese Info (wird immer wieder gefragt&gebraucht)?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Paulin wrote:

> E:\Programme\WinAVR\lib\gcc\avr\4.1.2        und
> E:\Programme\WinAVR\lib\gcc\avr\3.4.6
>
> Sind das die entspr. Library-Versionen (z.B. 3.4.6)?

Ja, das klingt so.

> Und: Woraus kann ich überhaupt die installierte WINAVR-Version ersehen,
> wo finde ich diese Info (wird immer wieder gefragt&gebraucht)?

Keine Ahnung, hab kein Windows (und damit kein WinAVR).

Ist natürlich die Frage, welche der obigen Bibliotheken dein Compiler
dann benutzt.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3.4.6 in meinem Fall.

Ja, ich sehe schon: Immer besser 200 Byte unterm Limit bleiben. Habe 
jetzt nochmal 100 Byte freigeschaufelt und es läuft wieder. Das wars 
wohl...

Danke Euch!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm die 4.x, wenn du kannst.  Die Gleitkommawandlung dort hat Dmitry
Xmelkov komplett neu gezimmert, meine vorherige hat einen 80-Byte-
Puffer auf dem Stack reserviert, da der Ergebnisstring erstmal
rückwärts entstanden ist und anschließend gedreht werden musste.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, Jörg, danke für den Tip. Im Moment läufts wieder.
Und sobald ich mit meinem Bluetooth aus den Gröbsten raus bin, werde ich 
die 4.x mal testen.

Gruß

Andi
~~~~

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit
avr-gcc -v
bekommst du GCC und WinAVR Version.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal sprintf_P (cString,PSTR("init Bluetooth"));

Da kann man oft ne Menge RAM mit freischaufeln.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Simoen: Aaaaaaaaaaaaaaaaaaaahja :-D

@Holger: Stimmt. Kenne ich eigentlich, da habe ich vor Monaten schonmal 
enorm Platz geschaffen mit. Schon fast wieder vergessen...sollte ich mal 
wieder checken, da sind schon wieder massig standard-printfs drin 
(ohne_P).

Danke vielmals!

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Simon:

... und geht gleich gut:
gcc version 4.1.2 (WinAVR 20070525)

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.