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
>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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.