Forum: Compiler & IDEs KommunikationsProtokoll


von Daniel P. (callmed)


Lesenswert?

Hi,

so hab nun überall gesucht aber nichts vernümpftiges gefunden - darum 
der erste eigene Eintrag:
Problembeschreibung: Über USART kommen an den mega32 Komandos;
snd = send
tim = time
als Schlusszeichen folgenden den Teilen CR und am Ende der Befehlskette 
EOT.
String sieht also folgendermassen aus: snd\rtim\r0x04
soweit funktioniert auch alles, nun will ich aber darauf möglichst 
flexibel regaieren können (Befehlsatz erweiterbar zb. 
clear,set,start,stop).

Habs mit switch / if+strstr() / enums etc. probiert aber stieß immer 
wieder an flexibilitätsprobleme bzw. zu verschachtelt und aufwendig.

Hoffe einer von euch hatte schon mal so ein Problem und kann Logisch und 
Codetechnisch zu seite stehen,

DANKE

von Klugscheisser (Gast)


Lesenswert?

>Habs mit switch / if+strstr() / enums etc. probiert aber stieß immer
>wieder an flexibilitätsprobleme bzw. zu verschachtelt und aufwendig.

Das ist ganz allgemein gesprochen keine Wunder, denn das ist auch ein 
komplexes Thema.

Im Moment sehe ich allerdings nicht wie Du bei 4 oder 5 Befehlen an 
Grenzen stösst, vor allem nicht an welche denn eigentlich genau.

Füge doch einfach, wie schon genannt jeweils einen strstr für jeden 
Befehl hinzu. Was hindert Dich daran?

von Stefan E. (sternst)


Lesenswert?

Du könntest z.B. für jedes Kommando eine Funktion schreiben. Dann 
definierst du eine Struktur, die das Kommando als Text enthält, wie auch 
einen Pointer auf die dazugehörige Funktion. Eine Liste dieser 
Strukturen ist dann die Liste der zur Verfügung stehenden Kommandos. Die 
Funktion, die die per UART eintrudelnden Daten interpretiert, kann 
einfach diese Liste in einer Schleife durchgehen, die Kommando-Namen 
vergleichen und dann die zugehörige Kommando-Funktion aufrufen. Und um 
RAM zu sparen, kannst du diese Kommando-Struktur-Liste komplett ins 
Flash legen.

von Daniel P. (callmed)


Angehängte Dateien:

Lesenswert?

Danke erstmal für die Wirklich schnelle Antwort. Habs sie mir 2mal 
durchgelesen, aber denke ist zu spät für heute :-)

ich hab an meinem Problem weitergebastlt und einen brauchbaren und 
schnell zu erweiternden Weg gefunden. Vielleicht haben ja die C-Gurus 
mals Zeit und Lust verbesserungen vorzuschlagen - ich weiss das es 
SICHER schneller, recoursensparender und "schöner" geht.

usart.h

#define CMD_LENGTH 3  //max. command length
#define CMD_KINDS 3    //Qty of command parts send at once

char cSentString[CMD_KINDS][CMD_LENGTH+1];  //Received String

char* p;  //Pointer to Received String

usart.c im Dateianhang

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.