Forum: Compiler & IDEs Stringpointer


von Dirk (Gast)


Lesenswert?

Hi,

ich bin gerade dabei mein GLCD in Betrieb zunehmen. Ich wollte mir ein
universal GLCD Modul bauen. Dieses Modul sollte die Moeglichkeit das
Display per SPI, TWI , RS232/USB anzusteueren.

Ich hab die Peter Fleury USART als Vorbild genommen. Ich bin gerade
dabei die SPI Anbindung vorzunehmen. Ein Ringerbuffer für die SPI Daten
hab ich soweit fertig.

Jetzt kommt der schwierige Part. Die Verwaltung der Commando Code's
bzw Verarbeitung der Display Daten.

Ich hab zum testen ein kleines unsigned Char Array generiert. Ich frage
in diesen Array das erste Feld ab und ordne diesen den Befehlen zu.

Dieses funktioniert auch , vielleicht nicht super professionell , aber
es erfuellt erstmal den Zweck.

Ich haenge jetzt ein bischen bei der Funktion Strings auf Display
zugeben.

Die normale Stringausgabe funktioniert über ein Pointer der auf das
akutelle Element zeigt.
Mein Problem liegt darin mein unsigned Char Array zusplitten.

Beispiel:

unsigned char SPIDATA[20];

// SPI DATA[0] == Command (0x00 = Displaydata, 0x01 == LCD_clear) usw.



Wie kriege ich jetzt den Stringzeiger dazu auf das zweite Element vom
Array zustarten ? Also anstatt von SPIDATA[0] von SPIDATA[1] ?

Ich würde mich über eine Antwort freuen.

Mfg
Dirk

von Hans (Gast)


Lesenswert?

char *pPointer=&SPIDATA[1];

das sollte das tun...wenn ich das richtig verstanden hab was du
willst...

73 de oe6jwf / hans

von Rufus T. Firefly (Gast)


Lesenswert?

char *pPointer=&SPIDATA[1];

ist äquivalent zu

char *pPointer = SPIDATA + 1;

Stilistisch sei anzumerken, daß sich die Konvention eingebürgert hat,
nur Präprozessor-Makros in Großbuchstaben zu schreiben.

SPIDATA sollte also kleingeschrieben werden.


Hilfreich wäre es allerdings, wenn Dirk sich seine Frage (oder was er
dafür hält) nochmal durchliest und etwas überarbeitet ...

von Dirk (Gast)


Lesenswert?

Hi,

vielen Dank. Trotz mehrfachen durchlesen meiner Frage finde ich kein
Fehler in der Fragestellung.

Ich werde es heute abend mal testen.

mfg
Dirk

von Rufus T. Firefly (Gast)


Lesenswert?

Lies Dir diese Sätze nochmal durch:

"Ich frage in diesen Array das erste Feld ab und ordne diesen den
Befehlen zu. "

Was magst Du damit meinen?

"Wie kriege ich jetzt den Stringzeiger dazu auf das zweite Element
vom
Array zustarten ? Also anstatt von SPIDATA[0] von SPIDATA[1] ?"

Was willst Du damit ausdrücken?

(ich will ja gar nicht auf Rechtschreibfehlern oder sowas 'rumreiten,
sondern einfach nur verstehen, was Du versuchst, uns zu fragen)

von Dirk (Gast)


Lesenswert?

Hi,

hm ich hab echt starke Probleme mein Problem in Worte zufassen.

>"Ich frage in diesen Array das erste Feld ab und ordne diesen den
>Befehlen zu. "

>Was magst Du damit meinen?

void zuordnung(void)
{
  switch(spidata[0])
  {
  case 1: LCD_clear();
          break;
  case 2: LCD_home();
          break;
  case 3: // hier muesste der Zeiger auf spidata[1] erhoeht werden
          // damit die Zeichen ausgegeben werden.
          LCD_puts(s);
          break;
  //usw.
  }
}


So hatte ich mir die Zuordnung vorgestellt. Der SPI Master sendet die
Befehlsfolge z.B. 0x1F(startbyte) , 0x03(Command) , 0xFF (Data) , 0xFA
(Data), 0x10 (Data), 0x3F (Endbyte).

Falls jemand einen anderen Loesungansatz hat bin ich nicht abgeneigt
auch diesen zunutzen.

Mfg
Dirk

von Rufus T. Firefly (Gast)


Lesenswert?

Aaaah, damit wird die Sache doch schon verständlicher.

void zuordnung(void)
{
  switch(spidata[0])
  {
  // ... dinge weggelassen
  case 3: // hier muesste der Zeiger auf spidata[1] erhoeht werden
          // damit die Zeichen ausgegeben werden.
          LCD_puts(spidata + 1);
          break;
  //usw.
  }

Das funktioniert, wenn bei spidata[1] ein nullterminierter String
beginnt, also beispielsweise
spidata[0] = 0x3;
spidata[1] = 'A';
spidata[2] = 'h';
spidata[3] = 'a';
spidata[4] = 0;

führt dazu, daß "Aha" aufs LC-Display ausgegeben wird.

Allerdings versinkt das Verstehen bereits wieder im Nebel:
"Der SPI Master sendet die Befehlsfolge z.B. 0x1F(startbyte) ,
0x03(Command) , 0xFF (Data) , 0xFA (Data), 0x10 (Data), 0x3F (Endbyte).
"

Bedeutet das, daß diese Daten in der Reihenfolge in spidata[] abgelegt
sind?

Dann würde der "String" "\xFF\xFA\x10\x3F ..." (ohne
abschließende Null!) an LCD_puts übergeben werden, was mehrere seltsame
Zeichen auf dem Display zur Folge haben dürfte.

von Dirk (Gast)


Lesenswert?

Hi,

>Bedeutet das, daß diese Daten in der Reihenfolge in spidata[]
>abgelegt sind?

Jip. Die Daten sollten in dieser Reihenfolge im SPI Buffer stehen.

>Dann würde der "String" "\xFF\xFA\x10\x3F ..." (ohne
>abschließende Null!) an LCD_puts übergeben werden, was mehrere
>seltsame Zeichen auf dem Display zur Folge haben dürfte.

Ok. Die Daten muesste ich vorher noch in Ascii umwandeln und zum
Schluss terminieren ('0' anhaengen).

Ich hatte mir das wohl doch zu simpel gedacht.

Mfg

Dirk

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.