Progmem Probleme http_get von Ulrich Radig

OP #1579377
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
Angehängte Dateien:
#1579462
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.
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
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
#1579534
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
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren