Konstanter String - zu lang!?

Gast #4775003
Lesenswert?
• ▲
▼
Hallo,
in meinem µC möchte ich einen konstanten String ablegen, denn ich dann 
bei Bedarf über's Netzwerk rausschicken kann.

Mein erster Versuch war Folgender (Pseudo-Code):
1
byte MyString = {... 0x65, 0x66, 0x67 ...}; // Einige tausend Bytes!

Das hat der Compiler ohne Murren geschluckt, und das Programm läuft auch 
wie erwartet. Allerdings scheint das Array abgeschnitten zu sein. Denn 
wenn ich die Daten raussende, fehlt am Ende einiges (wie viel genau habe 
ich noch nicht analysiert).

Mein zweiter Versuch: den String aufteilen:
1
byte MyString1 = {... 0x65, 0x66, 0x67 ...}; // Nur 1024 Bytes
2
byte MyString2 = {... 0x65, 0x66, 0x67 ...}; // Nur 1024 Bytes
3
byte MyString3 = {... 0x65, 0x66, 0x67 ...}; // Nur 1024 Bytes
4
byte MyString4 = {... 0x65, 0x66, 0x67 ...}; // Der Rest

Wenn ich nun diese Arrays nacheinander ausgebe, sehe ich tatsächlich wie 
gewünscht den kompletten Inhalt.

Allerdings ist die zweite Lösung etwas hässlich und benötigt mehr 
Wartungsaufwand. Kann mir jemand erklären, warum sich das so verhält? 
Und ob es vielleicht doch einen Trick gibt das schöner hinzubekommen?


PS:
Der µC ist ein NodeMCU mit ESP8266. Programmiert wird er mit PlatformIO 
in C++. Der Compiler ist GCC. Es werden einige Arduino Libraries 
verwendet.
Gast #4775015
Lesenswert?
• ▲
▼
W.A. schrieb:
> Kannst du das "einige" ein bisschen genauer eingrenzen?

Ich habe mit verschiedenen Größen herumexperimentiert, von daher: leider 
nein. Aber meist lagen die Längen zwischen 5k und 10k Bytes.

MaWin. schrieb:
> Bitte den kompletten Code posten.

Hier ein Beispiel (ein Icon):
1
// Generated from favicon.ico, size is 1150 bytes
2
const char R_FAVICON_ICO_0 [] = {0x00,0x00,0x01,0x00,0x01,0x00,0x10,0x10,0x00,0x00,0x01,0x00,0x20,0x00,0x68,0x04,0x00,0x00,0x16,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x6F,0x00,0x00,0x00,0x6F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x8F,0x8F,0x8F,0xFF,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFF,0x84,0x84,0x84,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x68,0x68,0x68,0xFF,0x67,0x67,0x67,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x70,0x70,0x70,0xFF,0x72,0x72,0x72,0xFF,0x72,0x72,0x72,0xFF,0x72,0x72,0x72,0xFF,0x72,0x72,0x72,0xFF,0x72,0x72,0x72,0xFF,0x72,0x72,0x72,0xFF,0x72,0x72,0x72,0xFF,0x6D,0x6D,0x6D,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x87,0x87,0x87,0xFF,0x8A,0x8A,0x8A,0xFF,0x8A,0x8A,0x8A,0xFF,0x8A,0x8A,0x8A,0xFF,0x8A,0x8A,0x8A,0xFF,0x8A,0x8A,0x8A,0xFF,0x8A,0x8A,0x8A,0xFF,0x8A,0x8A,0x8A,0xFF,0x7E,0x7E,0x7E,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x68,0x68,0x68,0x20,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xFF,0x66,0x66,0x66,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xA1,0xA1,0xA1,0x2E,0x79,0x79,0x79,0xF0,0x70,0x70,0x70,0xF3,0x70,0x70,0x70,0xF3,0x71,0x71,0x71,0xF3,0x79,0x79,0x79,0xF0,0x79,0x79,0x79,0xF0,0x78,0x78,0x78,0xF0,0x70,0x70,0x70,0xF3,0x70,0x70,0x70,0xF3,0x73,0x73,0x73,0xF2,0x79,0x79,0x79,0xF0,0x79,0x79,0x79,0xF0,0x82,0x82,0x82,0xE2,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xEF,0xEF,0xEF,0x20,0xF2,0xF2,0xF2,0xFF,0xB4,0xB4,0xB4,0xFF,0x4E,0x4E,0x4E,0xFF,0x4D,0x4D,0x4D,0xFF,0x9B,0x9B,0x9B,0xFF,0xF2,0xF2,0xF2,0xFF,0xF2,0xF2,0xF2,0xFF,0x95,0x95,0x95,0xFF,0x4D,0x4D,0x4D,0xFF,0x50,0x50,0x50,0xFF,0xBA,0xBA,0xBA,0xFF,0xF2,0xF2,0xF2,0xFF,0xF2,0xF2,0xF2,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x82,0x82,0x82,0x6C,0xDB,0xDB,0xDB,0xFF,0xF2,0xF2,0xF2,0xFF,0xB6,0xB6,0xB6,0xFF,0x4F,0x4F,0x4F,0xFF,0x4D,0x4D,0x4D,0xFF,0x9B,0x9B,0x9B,0xFF,0xF2,0xF2,0xF2,0xFF,0xF2,0xF2,0xF2,0xFF,0x95,0x95,0x95,0xFF,0x4D,0x4D,0x4D,0xFF,0x4F,0x4F,0x4F,0xFF,0xB8,0xB8,0xB8,0xFF,0xF2,0xF2,0xF2,0xE0,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x90,0x90,0x90,0x8A,0xD1,0xD1,0xD1,0xD3,0xF3,0xF3,0xF3,0x7B,0xF4,0xF4,0xF4,0x2E,0xB6,0xB6,0xB6,0x0E,0x9F,0x9F,0x9F,0x10,0x9F,0x9F,0x9F,0x10,0xFF,0xFF,0xFF,0x08,0xFF,0xFF,0xFF,0x08,0xFF,0xFF,0xFF,0x08,0x9F,0x9F,0x9F,0x10,0x9F,0x9F,0x9F,0x10,0xB6,0xB6,0xB6,0x0E,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xF1,0xF1,0xF1,0x94,0xF2,0xF2,0xF2,0xFF,0xCC,0xCC,0xCC,0xFF,0x75,0x75,0x75,0xFF,0x64,0x64,0x64,0xF9,0x83,0x83,0x83,0xC7,0xA4,0xA4,0xA4,0x5A,0xFF,0xFF,0xFF,0x02,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xF1,0xF1,0xF1,0x36,0xAA,0xAA,0xAA,0xAF,0x5F,0x5F,0x5F,0xFB,0x4D,0x4D,0x4D,0xFF,0x56,0x56,0x56,0xFF,0xA2,0xA2,0xA2,0xFF,0xEA,0xEA,0xEA,0xFF,0xF2,0xF2,0xF2,0xE8,0xF2,0xF2,0xF2,0x9B,0xA4,0xA4,0xA4,0x70,0x96,0x96,0x96,0x11,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x97,0x97,0x97,0x51,0xDC,0xDC,0xDC,0x84,0xF2,0xF2,0xF2,0xCA,0xF2,0xF2,0xF2,0xFE,0xC6,0xC6,0xC6,0xFF,0x70,0x70,0x70,0xFF,0x4D,0x4D,0x4D,0xFF,0x53,0x53,0x53,0xFF,0x82,0x82,0x82,0xDD,0xE7,0xE7,0xE7,0x61,0xE8,0xE8,0xE8,0x0B,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xC6,0xC6,0xC6,0x24,0x8B,0x8B,0x8B,0xA7,0x70,0x70,0x70,0xEC,0x59,0x59,0x59,0xFF,0xA2,0xA2,0xA2,0xFF,0xEA,0xEA,0xEA,0xFF,0xF2,0xF2,0xF2,0xFE,0xF4,0xF4,0xF4,0x18,0xFF,0xFF,0xFF,0x00,0xFF,0x00};
3
const char R_FAVICON_ICO_1 [] = {0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xED,0xED,0xED,0x0E,0xF3,0xF3,0xF3,0x57,0xF3,0xF3,0xF3,0xA6,0xF3,0xF3,0xF3,0xB8,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x7F,0x00,0x00,0x80,0x0F,0x00,0x00,0xF0,0x01,0x00,0x00,0xFE,0x01,0x00,0x00,0xFF,0xC3,0x00,0x00,0x00};
Gast #4775032
Lesenswert?
• ▲
▼
W.A. schrieb:
> Könnte es sein, dass in C bei der Stringverarbeitung - sofern man davon
> in C sprechen kann - das Zeichen 0x00 ein Stringende markiert.
>
> Was machst du mit dem Zeugs und woran stellst du genau fest, dass etwas
> fehlt.

Dann würde es ja auch nicht funktionieren, wenn ich die Byte Arrays 
aufsplitte. An den Null-Terminitaoren stört sich das Programm definitiv 
nicht.
Die daten werden per HTTP gesendet (eine Webseite, ein Icon usw.).

Michael U. schrieb:
> auch ein ESP8266 hat nicht endlos Ram. Leg die Daten in den Flash.

Dann ist mir aber nicht ganz klar, warum ein langes Datum nicht 
funktioniert, 10 Kleine aber schon. Entweder der RAM hat genug Platz 
oder eben nicht ;-)
#4775127
Lesenswert?
• ▲
▼
> bei Bedarf über's Netzwerk rausschicken kann.

Mit welchem Protokol?

Die Daten passen vermutlich nicht in ein "WLAN-Paket", d.h. Es müßte ein 
Protokol sein, das Daten über mehrere "Netzwerk-Pakete" verteilen kann, 
z.B. Tcp. Wieviel kommt denn pro send() genau an?
Gast #4775168
Lesenswert?
• ▲
▼
Carl D. schrieb:
> Mit welchem Protokol?

Wie oben erwähnt per HTTP (TCP).

Der Code zum Senden sieht in etwa so aus (mit 4 getrennten Byte-Arrays):
1
WiFiClient client;
2
// ...set up client...
3
client.write(R_INDEX_HTML_0);
4
client.write(R_INDEX_HTML_1);
5
client.write(R_INDEX_HTML_2);
6
client.write(R_INDEX_HTML_3);
7
client.flush();
#4775538
Lesenswert?
• ▲
▼
Sproinx schrieb:
> Carl D. schrieb:
>> Mit welchem Protokol?
>
> Wie oben erwähnt per HTTP (TCP).
>
> Der Code zum Senden sieht in etwa so aus (mit 4 getrennten Byte-Arrays):
>
1
> WiFiClient client;
2
> // ...set up client...
3
> client.write(R_INDEX_HTML_0);
4
> client.write(R_INDEX_HTML_1);
5
> client.write(R_INDEX_HTML_2);
6
> client.write(R_INDEX_HTML_3);
7
> client.flush();
8
>
Mit dem Teil hab ich mich noch nicht beschäftigt, aber die Frage wie 
arbeitet client.write() - asyncron? Oder wird die Funktion erst beendet 
wenn der Inhalt versand wurde oder zumindest im Puffer des 
Netzwerkstacks Platz gefunden hat.

Sascha

Antwort schreiben

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.

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.