Janiiix3

Aktives Mitglied
28. Sep. 2013
1.333
10
38
Hannover
Sprachen
  1. ANSI C
  2. C#
Hat jemand von euch noch Anregungen zum Thema "Kommando Interpreter"?
Ich möchte quasie so eine "allgemeingehaltene" Bibliothek schreiben die man mehr oder weniger universell
einsetzen kann.

Diese Funktionen sollen mir quasie Befehle die über eine Schnittstelle kommen auswerten und verarbeiten können. Fehlt noch was im "cmd_struct" ? Würdest du es anders machen?

Habe schon mal ein bisschen was dazu geschrieben. Was kann man besser machen? Was kann man ergänzen?

Bsp.:

Ich empfange über der Seriellen Schnittstelle folgenden String "233281-DAS_IST_EIN_BEFEHL#123!"

Nun kommt meine Funktion "srchCmd" zum tragen. Dort übergebe ich als ersten Parameter den eingehenden String von der Seriellen Schnittstelle, der zweite Parameter ist der zu suchende "Befehl".

Wurde dieser Befehl gefunden, bekomme ich einen Zeiger auf dessen Anfang zurück. Das "besondere" an der Funktion ist, dass sie mir auch die "Rohdaten" zurück geben kann.
Wenn in dem Kommando ein '#' sollte, weiß ich das "Rohdaten" mit übertragen wurden. Diese werden dann zurückgegeben ohne den eigentlichen Befehl. Das ganze Kommando wird mit einem '!' abgeschlossen. So kann ich sicherstellen das dort der "Stream" vorbei ist.

Mit der Funktion "getCmd" suche ich aus meiner "Struktur" nun den Befehl raus. Ist dort ein passender hinterlegt, gebe ich die Adresse von der "Struktur" zurück. Später kann ich dann halt entscheiden was ich damit machen möchte.

Würde mich über Anregungen freuen.
 

Anhänge

  • cmdTab.h
    1,1 KB · Aufrufe: 3
  • cmd.c
    2,3 KB · Aufrufe: 2
  • cmd.h
    1,2 KB · Aufrufe: 2
Zuletzt bearbeitet:
Kennst Du die Funktion strtok?

Programmieren ist für mich übrigens, eine möglichst einfache Lösung zu finden…
 
Zuletzt bearbeitet:
Hi @Mikro23
Habe ich schon mal was von gelesen aber noch nicht mit gearbeitet.
Ja einfach ist ja schön uns gut, wenn man erstmal den richtigen Weg kennt und ihn zu laufen weiß.

Worauf wolltest du mit der Funktion hinaus?
 
Das ist also ein genormtes Befehlsprotokoll..
Und wie würde man am besten die auszuführenden Funktionen dazu schreiben? Man muss, wenn man die Kommandos gefiltert hat mit den dementsprechenden Parametern ja was ausführen bzw. füllen.
 
Sind doch nur einfache Stringoperationen. Kommt auf die Komplexität an. Prinzipiell hast du aber erst die Namen, wie "SYST:COMM:SER:BAUD". Könnte man jetzt unterteilen nach : (wie syst:comm behandelt diese Datei, syst.conf diese, ...), ist aber meiner Meinung nach nicht sonderlich sinnvoll bei Kleinkram. Dann eine Abfrage ob mit ? endet (Wert soll zurück gegeben werden), sonst mit Leerzeichen getrennt die Parameter (Wert soll gesetzt werden).
Jeder Befehl ist eine Zeile, also komplette Daten bis zum CrLf einlesen, dann durchlaufen. Name ermitteln (alles bis zu ? oder Leerzeichen), Abfrage ermitteln (Ist ? oder Leerzeichen) und Parameter ermitteln (alles danach). Und dann passend weiter geben / behandeln.

Würde mich aber nicht wundern wenn es einen SCPI Handler schon als fertigen Code geben würde.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)