www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String Array? oder 2-dim-Array?


Autor: carlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich möchte im Eeprom ein paar Befehle als Strings ablegen.
Allerdings möchte ich nicht, dass ich jeden Befehl über einen 
Variablennamen anspreche, sondern einfach ein Laufindex verwenden, da 
die Strings vergleichen werden. Nun stellt sich mir die Frage, ob es 
überhaupt ein Stringarray gibt und wie man sowas deklariert und 
initialisiert, oder ob ich dafür 2-dimensionale Arrays verwende.
Über eine kleine Hilfe wäre ich sehr dankbar...

MFG Carlau

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du genügend Platz im EEProm hast, mach alle Befehle gleich lang und 
benutze ein 2D-Array dafür.

Wenn du Platz sparen musst, mach dir ein zusätzliches Indexarray, 
welches dir die Startposition des Strings im EEProm angibt.

Autor: carlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die rasche Antwort.

Die Befehle gleich lang machen ist nun nicht mehr möglich, da das 
Protokoll größtenteils steht.
Aber das mit dem 2ten Index klingt interessant und nach einer guten 
Lösung. Bloß wie könnte ich die Startpositionen der Strings in meinem 
EEPROM ermitteln. Was für ein array muss das dann sein? was muss ich da 
genau abspeichern und wie mache ich das? brauche ich da die Adresse 
meines Strings (genauer die Adresse des ersten Elements in dem 
jeweiligen String)?
Muss mein Indexarray dann vom char*-Typ oder irgendwie deferenziert also 
mit &String oder so sein?
Sorry aber strings machen mich verrückt bzw die Pointer, obwohl es ja 
nix anderes als ein nullterminiertes chararray ist.
Vielleicht kann du das näher erläutern. Wäre dir sehr dankbar...
Gruß Carlau

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
carlau schrieb:
> Vielen Dank für die rasche Antwort.
>
> Die Befehle gleich lang machen ist nun nicht mehr möglich, da das
> Protokoll größtenteils steht.

Du hast mich missverstanden (und ich habe mich unklar ausgedrückt).
Bei einem 2D Array sind alle Zeilen gleich lang. Das heißt nicht, dass 
die Strings in dem Array alle gleich lang sein müssen. Du hast dann 
einfach nur ein paar ungenutzte Bytes zwischen den Strings.

> Aber das mit dem 2ten Index klingt interessant und nach einer guten
> Lösung. Bloß wie könnte ich die Startpositionen der Strings in meinem
> EEPROM ermitteln.

Mit dem AdressOf-Operator?

> Was für ein array muss das dann sein?

Ein Array von Pointer auf char?

> was muss ich da
> genau abspeichern

Würd ich gar nicht.
Das Indexarray würde ich beim Programmstart zusammenbauen.
char Text1[] = "Hallo";
char Text2[] = "Welt";

char* Texte[2];

int main()
{
  Texte[0] = Text1;
  Texte[1] = Text2;

  for( i = 0; i < 2; ++i )
    printf( "%s\n", Texte[i] );
}

Du baust jetzt um auf: Texte sind im EEPROM

Wenn du damit durch bist, kannst du dich ja damit versuchen auch das 
Texte Array ins EEPROM zu verfrachten und vom Compiler initialisieren zu 
lassen
char Text1[] = "Hallo";
char Text2[] = "Welt";

char* Texte[] = { Text1, Text2 };

int main()
{
  for( i = 0; i < 2; ++i )
    printf( "%s\n", Texte[i] );
}

Autor: carlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke nochmal für die Erläuterung. Werd mich nun mal dransetzen... genug 
gelesen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.