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


von Hannes H. (hansl_)


Angehängte Dateien:

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

von holger (Gast)


Lesenswert?

>    sprintf(WEATHER_GET_STRING,"GET

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

von Hannes H. (hansl_)


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

von Karl H. (kbuchegg)


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

von Hannes H. (hansl_)


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

von Karl H. (kbuchegg)


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.

von Hannes H. (hansl_)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.