www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Progmem Probleme http_get von Ulrich Radig


Autor: Hannes Höttinger (hansl_)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute :)

Brauche echt Hilfe
Ich verwende die Source von Ulrich Radig mit ein paar Veränderungen :)
ich kann den definierten string senden, das funktioniert einwandfrei.
Mein Problem liegt jetzt daran, dass die WEATHER_GET_STRING Variable als 
PROGMEM definiert ist.
Ich würde aber gerne, an der Stelle wo jetzt die Zahl 23 in dem String 
steht, eine Zufallszahl einfügen und anschließend erst den String 
senden.
Ich kann die Zufallszahl generieren und auch die sprintf funktion geht 
(Zufallszahl einfügen) wenn ich den WEATHER_GET_STRING nur als char 
definiere, leider funktioniert dann aber das senden nichtmehr :(
wie kann ich mein Problem lösen? es liegt hier anscheinend nur daran das 
der String als PROGMEM definiert ist?!?!
kann ich das ganze mit sprintf machen?

Freu mich schon auf Eure Antworten...danke
mfg
Hannes

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    sprintf(WEATHER_GET_STRING,"GET

Wie stellst du dir das vor mit sprintf() etwas ins FLASH zu printen?
Das geht nicht!

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab ja auch geschrieben ich mach das nur wenn ich WEATHER_GET_STRING 
als char definiert habe ;)
ja ich weiß leider geht das nicht ^^
aber hättest du einen vorschlag für mich?

mfg
Hannes

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

Bewertung
0 lesenswert
nicht lesenswert
Hannes Höttinger schrieb:
> ich hab ja auch geschrieben ich mach das nur wenn ich WEATHER_GET_STRING
> als char definiert habe ;)
> ja ich weiß leider geht das nicht ^^
> aber hättest du einen vorschlag für mich?

Es gibt ein sprintf_P, bei dem der Formatstring im Flash residiert.
PROGMEM char WEATHER_GET_STRING[] = {"Wetter ist %d" );


  char Buffer[40];
  ...

  i = .... irgendwie kommst du auf die Zahl
  sprintf_P( Buffer, WEATHER_GET_STRING, i );

  // Mit Buffer weiterarbeiten

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm ok...aber sagen wir jetzt mal ich definiere WEATHER_GET_STRING nur 
als char und füge dann die Zufallszahl ein(funktioniert bei mir) dann 
kann ich den string nicht senden.
Verwende ich jetzt Buffer weiter würde ich eigentlich auf das selbe 
Problem stoßen oder??

mfg
Hannes

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

Bewertung
0 lesenswert
nicht lesenswert
Hannes Höttinger schrieb:
> hmm ok...aber sagen wir jetzt mal ich definiere WEATHER_GET_STRING nur
> als char und füge dann die Zufallszahl ein(funktioniert bei mir) dann
> kann ich den string nicht senden.
> Verwende ich jetzt Buffer weiter würde ich eigentlich auf das selbe
> Problem stoßen oder??

Dann musst du dir eben eine Sendefunktion aus deinem Vorrat suchen, die 
das was sie senden soll nicht aus dem PROGMEM holt, sondern einen ganz 
normalen String akzeptiert.

Edit:
Aber so wie das hier aussieht
        memcpy_P(&eth_buffer[TCP_DATA_START],WEATHER_GET_STRING,(sizeof(WEATHER_GET_STRING)-1));
        tcp_entry[index].status =  ACK_FLAG | PSH_FLAG;
        create_new_tcp_packet((sizeof(WEATHER_GET_STRING)-1),index);
macht das ja nichts anderes, als einen String an eine bestimmte Stelle 
zu kopiern (nämlich nach eth_buffer[TCP_DATA_START]) und danach mittels 
create_new_tcp_packet und der Stringlänge ein Ethernet Paket 
zusammenstellen zu lassen. Passt doch schon perfekt. Ein strcpy, ein 
strlen und du bist im Geschäft.

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
klingt ganz vernünftig danke :)

könntest du mir noch sagen wo ich die ganzen Funktionen wie memcpy und 
so finde. Denn das memcpy_P ist ja für PROGMEM Variablen...
pgmspace oder so??

mfg
Hannes

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.