Forum: PC-Programmierung Kommunikation zwischen Linux-GUI und C-Programm für µC-Simulation


von Karlfried (karlfriedm)


Lesenswert?

Guten Tag,

ich habe ein möglicherweise ungewöhnliches Anliegen in Bezug auf die 
Mikrocontroller-Programmierung. Aktuell sitze ich an einem relativ 
umfangreichen Mikrocontroller-Programm, werde oft weg von zu Hause sein 
und möchte die Zeit nutzen, um weiter an meinem Projekt zu arbeiten. 
Mein Laptop ist für die von mir bevorzugte IDE jedoch zu langsam und die 
Schaltung ist auch nicht wirklich portabel, daher werde ich beides 
auswärts nicht nutzen können. Mal abgesehen davon, dass ich im Zug auch 
nicht spontan einen Sensor oder eine LED anbringen kann.

Ich habe jedoch vor langer Zeit unter Windows in C++ ziemlich 
umfangreiche Programme geschrieben, oft mit GUI und mit Kommunikation 
zwischen meinen Anwendungen. Inzwischen bin ich jedoch auf Linux 
umgestiegen und programmiere mehr im Backend-Bereich mit Webservern und 
Datenbanken. Da es so etwas wie einen Simulator in der IDE von STM nicht 
zu geben scheint, kam mir die Idee, dass ich vielleicht unter Linux eine 
minimale GUI programmiere, die meine Peripherie darstellt. Im Grunde 
würden mir ein Textfeld als Display sowie diverse Steuerelemente, 
Eingabefelder und bunte Flächen als LEDs genügen, um meine Peripherie 
und die Sensorik abzubilden. Diese GUI sollte mit einem C-Programm 
kommunizieren, dass die Logik der Steuerung abbildet. Das mag vielleicht 
übertrieben erscheinen, aber ich werde jetzt viel Zeit mit der 
Programmierung grundsätzlicher Abläufe, Funktionen und der Kommunikation 
zwischen Funktionen verbringen und das habe ich als grobes Schema, quasi 
so etwas wie eine StateMachine, bereits ohne Mikrocontroller lauffähig 
als C-Programm in Code::Blocks abbilden können und Code:Blocks läuft auf 
meinem Laptop schnell genug. Mir fehlt im Grunde nur noch die GUI, um 
z.B. mit Buttons Änderungen an Sensoren zu simulieren und die Reaktionen 
der Steuerung zu visualisieren. Wenn ich die GUI z.B. mit PHP/HTML 
programmiere, könnte ich das später sogar für die Visualisierung der 
Steuerung im LAN verwenden.

Ich suche vermutlich also eine Lösung, um unter Linux eine einfache GUI 
zu programmieren, die Messages mit einem klassischen C-Programm 
austauscht. Ich bin mir aber nicht sicher, wie ich das am schnellsten 
umsetzen kann. GUI und C scheint ja nicht so sinnvoll zu sein, da nimmt 
man anscheinend auch unter Linux eher C++ mit entsprechenden Toolkits 
wie QT oder wxWidgets. Aber welches ist der sinnvollste Weg, um Ein- und 
Ausgaben mit dem C-Programm zu kombinieren? Mich interessiert sehr, wie 
ihr das Problem lösen würdet, also ob ihr z.B. QT für die GUI und dann 
NamedPipes für die Kommunikation mit einem C-Konsolen-Programm nehmen 
würdet, oder ob man die GUI doch gleich mit HTML/PHP programmieren 
sollte?

Herzliche Grüße
Karlfried

von Christoph M. (mchris)


Lesenswert?

Für die Arduinowelt gibt es diese Art von Simulatoren:
https://wokwi.com/projects/328451800839488084

von Karlfried (karlfriedm)


Lesenswert?

Christoph M. schrieb:
> Für die Arduinowelt gibt es diese Art von Simulatoren:

Wow, das sieht ja richtig schick aus. Ich programmiere einen STM32 (Arm 
Cortex M4), falls das wichtig ist.

von Εrnst B. (ernst)


Lesenswert?

Ich würde da ganz simpel anfangen, und die Kommunikation mit deinem 
"µC-Simulator" per stdin/stdout machen.
dort mit einfachen Befehlen zum Setzten von Inputs, und einfacher 
Ausgabe wenn sich an den Outputs was ändert.
=> verkompliziert den Code nicht allzusehr, und, großer Vorteil, du 
kannst den Teil erstmal ohne GUI an der Konsole testen. (Also kein 
Binär-Protokoll verwenden, sondern was "tippbares")

Nächster Schritt wäre dann das verheiraten von STDIN/OUT deines 
Prozesses mit einer GUI.

Mein Weg wäre ein kleines, relativ generisches Server-Progrämmchen, was 
den Prozess startet, und einfach input/output auf einen Websocket 
umbiegt. Eigentliche GUI dann in HTML+Javascript zum Zugriff auf den 
Websocket.

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.