mikrocontroller.net

Forum: Compiler & IDEs KommunikationsProtokoll


Autor: Daniel Ple (callmed)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Ple (callmed)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

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.