Progmem Probleme http_get von Ulrich Radig

OP #1579377
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
Angehängte Dateien:
#1579462
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.
1
PROGMEM char WEATHER_GET_STRING[] = {"Wetter ist %d" );
2

3

4
  char Buffer[40];
5
  ...
6

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

10
  // Mit Buffer weiterarbeiten
OP #1579483
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
#1579534
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
1
        memcpy_P(&eth_buffer[TCP_DATA_START],WEATHER_GET_STRING,(sizeof(WEATHER_GET_STRING)-1));
2
        tcp_entry[index].status =  ACK_FLAG | PSH_FLAG;
3
        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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.