C Kommando Interpreter

Dieses Thema im Forum "Software" wurde erstellt von Janiiix3, 29. Juli 2018.

  1. Janiiix3

    Janiiix3 Aktives Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    1.282
    Zustimmungen:
    8
    Punkte für Erfolge:
    38
    Sprachen:
    C, 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
      Dateigröße:
      1,1 KB
      Aufrufe:
      3
    • cmd.c
      Dateigröße:
      2,3 KB
      Aufrufe:
      2
    • cmd.h
      Dateigröße:
      1,2 KB
      Aufrufe:
      2
    #1 Janiiix3, 29. Juli 2018
    Zuletzt bearbeitet: 29. Juli 2018
  2. Mikro23

    Mikro23 Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    274
    Zustimmungen:
    21
    Punkte für Erfolge:
    18
    Sprachen:
    C, Assembler
    Kennst Du die Funktion strtok?

    Programmieren ist für mich übrigens, eine möglichst einfache Lösung zu finden…
     
    #2 Mikro23, 30. Juli 2018
    Zuletzt bearbeitet: 30. Juli 2018
  3. Janiiix3

    Janiiix3 Aktives Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    1.282
    Zustimmungen:
    8
    Punkte für Erfolge:
    38
    Sprachen:
    C, C#
    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?
     
  4. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.725
    Zustimmungen:
    58
    Punkte für Erfolge:
    48
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#
  5. Janiiix3

    Janiiix3 Aktives Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    1.282
    Zustimmungen:
    8
    Punkte für Erfolge:
    38
    Sprachen:
    C, C#
    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.
     
  6. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.725
    Zustimmungen:
    58
    Punkte für Erfolge:
    48
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#
    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

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden