Starten eines Programms mit Übergabe von Parametern



  • Hallo,

    ich möchte gerne die Daten eines Temperatur- und Feuchtigkeitssensors auf einem LCD Display darstellen. Beide Peripheriegeräte befinden sich an einem Raspberry Pi.

    Ich habe ein C Programm des Sensors, welches ich selber für das starten auf einem Raspberry Pi kompiliert habe. Nun möchte ich dieses C Programm dahingehend erweitern, dass es ein weiteres bereits kompiliertes C Programm des lcd displays, welches im selben Ordner liegt, parallel mit startet.

    Außerdem sollen beim starten des zweiten C Programms (lcd display) 4 Parameter aus dem 1. Sensor Programm mit an das 2. Programm übergeben werden.
    Die Parameter sind 2 chars (Textstring) und 2 floats (Temperatur- und Feuchtigkeitswerte), wobei die 2 floats als Variable aus dem 1. C Programm eingelesen werden sollen.

    Ich hoffe das nicht zu kompliziert beschrieben zu haben. Daher hier nochmal mein Lösungsansatz mit dem es aber nicht klappt:

    system("./lcd" "Temperatur" "var_temp" "Luftfeuchtigkeit" "var_lf");

    Ich bin in C ein kompletter Anfänger und hoffe daher auf eure Hilfe.

    Danke !

    Gruß Andreas



  • 1. Du lernst C. Danach sollte es kein Problem sein, die zwei Programme zu verschmelzen.

    2. Du lernst BaSH oder eine andere Scriptsprache die auf dem RaspberryPi läuft und rufst von dort das Sensor-Programm auf, parst die Ausgabe und ruft das Anzeige-Programm mit den passenden Parametern auf.

    3. Du bezahlst jemanden, der das für dich macht. Aber warum hast du dir dann einen RaspberryPi geholt 😕

    Edit: Hättest du eine konkrete Frage gestellt, gäbe es vielleicht auch eine konkrete Antwort…



  • Mit shell kann ich das ganze selbst programmieren. Da es hier aber um eine C Frage geht können wir das Thema abhaken.

    Die Frage war eigentlich recht konkret gestellt.
    Zumindest hat man mir in anderen Foren netterweise eine vernünftige Antwort geben können.

    Hier die Lösung für alle die es auch interessiert:

    char command[50];
    sprintf(command, "./lcd Temperatur %f Luftfeuchtigkeit %f", var_temp, var_lf);
    system(command);



  • Cross-Posting (über vier verschiedene Foren hinweg) ist extrem unhöflich, bitte lass das in Zukunft bleiben.

    Die Lösung mit system funktioniert natürlich, aber die Frage ist, welche Vorteile du dir davon gegenüber der von lagalopex vorgeschlagenen Shell-Script-Variante erhoffst.

    Ich würde in so einem Fall ein kleines C-Programm schreiben, das die Sensoren ausliest und ein anderes kleines C-Programm, das das LCD-Display ansteuert und die beiden dann mit einem Bash-Script verbinden.



  • würde hier auch eher Shell Skripte verwenden zum Verbinden mehrerer C Programme.
    Damit ist man ziemlich flexibel. Die C Programme erledigen den low level bzw. performance kritischen Teil und die Shellskripte dienen als "Kleber" zwischen den C Programmen.

    Wenn du schon einen Raspberry hast, so nehme ich an dass du auch was lernen möchtest und nicht nur irgendwie schnell irgendwelche Hacks fabrizieren möchtest.
    Schau dir an, wie du auf die GPIO Pins zugreifst, und versuche, selbst von den Geräten zu lesen bzw. zu schreiben.
    Als Draufgabe könntest du das dann auch als Treiber realisieren, gut, das ist dann schon nicht mehr soooo trivial, aber damit würdest du auch ziemlich viel lernen!



  • shtlcd schrieb:

    Die Frage war eigentlich recht konkret gestellt.

    Nein. Du hast nämlich gar keine Frage gestellt. Was übrigens auch unhöflich ist.
    Du schreibst immer nur "ich möchte". Und? Schön dass du das möchtest. Interessiert uns aber nicht so brennend.

    Wenn du etwas wissen willst, stell eine Frage.
    Auch wenn du der Meinung sein solltest dass die implizierte Frage "eh klar" ist: es ist unhöflich sie wegzulassen. Und nur all zu oft ist sie auch gar nicht so klar wie der Frage-nicht-steller annimmt.



  • hustbaer schrieb:

    shtlcd schrieb:

    Die Frage war eigentlich recht konkret gestellt.

    Nein. Du hast nämlich gar keine Frage gestellt. Was übrigens auch unhöflich ist.
    Du schreibst immer nur "ich möchte". Und? Schön dass du das möchtest. Interessiert uns aber nicht so brennend.

    Wenn du etwas wissen willst, stell eine Frage.
    Auch wenn du der Meinung sein solltest dass die implizierte Frage "eh klar" ist: es ist unhöflich sie wegzulassen. Und nur all zu oft ist sie auch gar nicht so klar wie der Frage-nicht-steller annimmt.

    daran erkennt man wenigstens gleich die skript kiddies, die wollen nicht verstehen, sondern die wollen code hingeworfen bekommen, der sofort funktioniert.
    darüber nachdenken, warum system() meist eher schlecht ist, wollen sie nicht.



  • Hi,
    also generell muss man sagen das das eigentlich schon fast zu weit geht da du ja sagst das du gerade erst mit c anfängst.
    nicht Nichtsdestotrotz finde ich hast du eine BRAUCHBARE antwort verdient.

    Da du um sowetwas zu tuhen eine ganze menge Grund kentnisse in sachen c programmierung benötigst (nicht abschrecken lassen klingt schlimmer als es ist), solltest du dich gründlich mit den Befehlen fork() und exec()(mit all seinen varianten) beschäftigen.
    Generell kann man sagen, das mittels des kommandos fork() ein Abbild des aktuellen prozesses gebildet wird und dieser dann als child des Aktuellen Prozesses(dein Programm) weiter läuft. mittels exec() kanst du nun ein Programm starten welches den aktuellen Prozess überschreibt(also besser nur den child Prozess überschreiben).
    Eine recht verständliche erklährung hättest du auch mittes google gefunden. z.B.
    http://de.wikipedia.org/wiki/Fork_(Unix)

    Mfg BabCom

    PS: wenn ich schreibe ich mochte das oder jenes tuhen, dann MÖCHTE ich nicht als antwort höhren "interesiert mich nicht". Sonder evtl einen vorschlag oder anstuppser wie man das machen kann odereben auch nicht machen kann. Wie er sagt ist er Anfänger da kann man wohl verzeihen wenn er nicht weis wie das zu bewerkstelligen ist.


Anmelden zum Antworten