Hallo,
ich habe hier ein Problem und drehe mich irgendwie auf der Stelle. Ich möchte für eine Konfiguration im Flash einige Zeichenketten speichern. Wenn die Konfigurationsdaten mit einer Externen Datei übereinstimmen, möchte ich für die weitere Bestimmung einen Variablentyp übergeben.
Beim lesen der Zeichenkette in den buffer, möchte ich im ersten Zeichen von buffer wieder den Variablentyp z.B. 0x02 feststellen, um dann im Programm entsprechend zu verzweigen.
Kann mir hier bitte jemand helfen? Es ist denke ich eine einfache Definitionssache, da das Zusammenführen noch vom Compiler übernommen werden muss. Ich habe nicht die rchtigen Schlüsselworte gefunden, um danach im Netz nach einer Antwort suchen zu können.
Ich finde in deinem Text auch nicht die richtigen Schlüsselworte um beurteilen zu können, was du mit Variablentyp meinst.
Üblicherweise nenne ich int, long, float usw. Variablentyp.
In einer externen Datei steht der Einfachheit halber gern nur Text.
Auch hier rätsle ich, was du meinst. Beschreibe doch einfach konkreter, was du willst.
ModuleNorm hat 3 Elemente
#0 Type= 0x2 Label= TIST
#1 Type= 0x5 Label= DELAY
#2 Type= 0x6 Label= TOUT
Ein Nachteil ist, dass Sie etwas Flash-Speicher verlieren, da alle Elemente unabhängig vom tatsächlichen Bedarf 20 Bytes für das Label haben (wählen Sie, was sinnvoll ist).
die Varialbentypen haben nichts mit C Variablen zu tun. Ich möchte wie im Beispielprogramm lediglich den Wert 0x02 als ein Sonderzeichen an der ersten Stelle und danach "TIST" haben. Parameter anstatt Variablentype trifft es wohl besser.
const char Par_TIST[] PROGMEM = VarType1, "TIST";
Beim lesen einer externen Datei wird dann nach dem Schlüsselwort "TIST" gesucht. VarType ist für das Programm dann der Hinweis, was mit "TIST" geschehen soll.
in C / C++ könnte man das const char Par_TIST[] PROGMEM = "\x02TIST";
schreiben, aber @J-M-L Jacksons Lösung ist besser: Wenn es kein Text ist, sollte man auch nicht so tun als ob. ( Außerdem gäbe es evtl. Probleme beim Typ 0 )
Jacksons Lösung mit dem cast (__FlashStringHelper*) gefällt mir sehr.
Wenn es auf den Flash-Speicherplatz ankommt, kann man statt fester Längen auch im PROGMEM Zeiger auf Texte im PROGMEM ablegen.
Ich habe das jetzt umgesetzt und bin mit dem Ergebnis noch nicht gaz zufrieden und möchte mochmals um eure Unterstützung bitten. Gibt es hier vielleichtr eine elegantere Lösung als:
Gibt es hier eine bessere Methode, um mit strcpy_P gleich IN die Variable "buf" vom Typ "t_modData" zu kopieren oder wenigstens die Zeichenkette buffer nach buf zu kopieren, ohne alles vorher zerlegen zu müssen?
Das mit struct gefällt mir sehr, und würde es gerne übernehmen.