Forum: Mikrocontroller und Digitale Elektronik UART String Zerlegen.


von Florian (Gast)


Lesenswert?

Guten Abend,

ich hab nun einen ganzen Tag an einem Problem gesessen und komme nun 
einfach nicht mehr weiter. Ich hoffe einer von euch kann mir einen 
Schubs in die richtige Richtung geben um das Problem zu lösen.

Ich versuche im Moment so was wie einen Command Line Interpreter auf 
einem ATMega 1284p umzusetzen. Die Low Level Funktionalitäten wie Senden 
und Empfangen habe ich alle erfolgreich umgesetzt.

Die Daten liegen nach dem Empfang in einem ANSI C String wie z.B.
"gettemperatur 1 1\0"

Dies bedeutet hole mir die Temperatur von Sensor 1 mit Nachkommastelle.

Mein Problem ist nun das ist nicht weiß wie ich diesen String nun in 
seine Teile zerlegen kann, so das ich zum Beispiel ein Array habe wo die 
3 Teile oder Pointer zu den Teilen hinterlegt sind.

Ich habe es bereits mit STRTOK versucht, hab es aber nicht hinbekommen.

Ich bin für jede Hilfe Dankbar.

MfG

Florian

von Krapao (Gast)


Lesenswert?

> Ich habe es bereits mit STRTOK versucht, hab es aber nicht hinbekommen.

Versuch zeigen oder einen der zahlreichen strtok Beiträge hier im 
Forum suchen und daraus lernen.

von Florian (Gast)


Lesenswert?

Hi,

hab noch etwas rumprobiert ,so funktioniert es ,aber nun stellt sich mir 
die frage ob das so effektiv ist.

Nach dem Durchlauf stehen in token die Pointer zu den Tokens.

1
char *pch;
2
char *token[10];
3
pch = strtok(buffer," ");
4
i=0;
5
while (pch != NULL)
6
{
7
  token[i]=pch;
8
  printf ("TOK %s\n",pch);
9
  pch = strtok(NULL, " ");
10
  i++;
11
}

von Klaus W. (mfgkw)


Lesenswert?

Abgesehen davon, daß es buffer nicht gibt:
Bei mehr als 10 Token wird es ziemlich ineffektiv :-)

von Matthias L. (Gast)


Lesenswert?

>Die Daten liegen nach dem Empfang

Warum erst vollständig empfangen und (zwischen)speichern ?

Warum nicht gleich beim oder besser während des Empfanges auswerten?

von Florian (Gast)


Lesenswert?

Oh sorry hab vergessen den Buffer mit anzugeben.
10 werden es am ende nicht sein, aber ich habe das Array erstmal etwas 
größer gemacht. Ich denke es werden max. 5 Parameter.

Nur aus Interesse: Gebt es eine bessere Methode?

von Klaus W. (mfgkw)


Lesenswert?

"besser" ist immer ein dehnbarer Begriff.

strtok hat Probleme, insbesondere bei Nebenläufigkeit (threads).
Solange dich das nicht trifft, ist es ok.

von Klaus W. (mfgkw)


Lesenswert?

Florian schrieb:
> Ich denke es werden max. ...

Sowas haben schon viele gedacht und die Annahme irgendwann vergessen :-)

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.