mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String im Flash speichern


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
mein Mikrocontroller besteht aus 4KByte RAM, ich habe ein Programm 
geschrieben beim compilieren habe ich folgende Große:.data = 
1970,und.bss = 2190
ich versuche jetzt Konstante String und Variable im Stack(FLASH) zu 
speichern.
Im Programm habe ich auch viel sprintf benutzt.
Beispiel:  snprintf (tempstr,BUFFER_SIZE-1,"Receive %d voltage of 
channel 0", Voltages[0]);
mit dem sprintf gebe ich den Inhalt des Array aus, aber das 3 dritte 
Argument bleibt unverändbar.
Bitte was kann ich machen um weniger Speicher zu benutzen.

danke euch

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR?
snprintf_P( tempstr, BUFFER_SIZE-1, PSTR("Receive %d voltage of channel 0"), Voltages[0]);

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke sehr Karl

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich habe wieder ein Problem. Wie ich schon gesagt habe, versuche ich 
mehr Platz im FLASH zu gewinnen. Am Anfang habe ich diese Größe .data =
1970 jetzt bin ich bei 1575.

Wenn ich versuche mehr String im FLASH zu speichern, bekomme ich 
Probleme beim Auslesen, ich bekomme komische Charakter am Anfang der 
Ausgabe.

Danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> hallo,
> ich habe wieder ein Problem. Wie ich schon gesagt habe, versuche ich
> mehr Platz im FLASH zu gewinnen.

Du meinst SRAM

> Wenn ich versuche mehr String im FLASH zu speichern, bekomme ich
> Probleme beim Auslesen, ich bekomme komische Charakter am Anfang der
> Ausgabe.

Der Fehler liegt in Zeile 42

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welche Zeile 42?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> welche Zeile 42?

Ist ganz einfach.
Wenn in Code den nur du sehen kannst, wir aber nicht, ein fehlerhaftes 
Verhalten auftritt, dann ist der Fehler immer in Zeile 42.

Ist ein Naturgesetz :-)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok,
das Programm ist nicht gut aufgeräumt. Aber das Problem entsteht, wenn 
das dritte Argument ein Define-String ist.

snprintf_P( tempstr, BUFFER_SIZE-1, PSTR("Receive %d voltage of channel 
0"), G_ERROR);

#define  G_ERROR   "undefined channel"

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
%d ist der Platzhalter für eine Zahl, nicht für einen String.

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.