www.mikrocontroller.net

Forum: GCC Stackbelastung durch printf()

Autor: Andreas Paulin (Gast)
Datum: 15.05.2008 11:49

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: 15.05.2008 11:51

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: 15.05.2008 11:59

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: 15.05.2008 12:52

@ 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: 15.05.2008 13:06

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: 15.05.2008 13:20

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: 15.05.2008 13:29

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: 15.05.2008 13:39

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: 15.05.2008 13:50

Mit
avr-gcc -v
bekommst du GCC und WinAVR Version.
Autor: holger (Gast)
Datum: 15.05.2008 14:07

Probier mal sprintf_P (cString,PSTR("init Bluetooth"));

Da kann man oft ne Menge RAM mit freischaufeln.
Autor: Andreas Paulin (Gast)
Datum: 15.05.2008 14:47

@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: 15.05.2008 14:50

@ Simon:

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

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net