Script reagiert nicht auf Command Line Argumente

  • Guten Tag,

    ich habe ein C-Script geschrieben, dass für die Steuerung von Relays zuständig ist. Man soll damit, das jeweilige Relay, der im Array 'RelayPin' festgelegten GPIO-Pins,
    abhängig von den in der Kommandozeile vorgegebenen Argumenten und Werten, ein- oder ausschalten oder auf Input bzw. Output setzen können.
    Die Relays lassen sich per WiringPi schalten, was ich mit einem Test-Script überprüft habe und das hier beigefügte Script lässt sich starten und
    gibt die beim Start mitangegebenen Argumente per 'printf("");' auch aus. Allerdings springt das Programm nicht in die if-Verzweigung in die es sollte,
    obwohl man den richtigen Befehl angibt. Ich habe es immer mit 'gcc Bewässerung.c -l wiringPi' kompiliert und per './a.out arg1 arg2 arg3' ausgeführt.
    Über WiringPi habe ich mich direkt im Script informiert. https://github.com/WiringPi/Wirin…ngPi/wiringPi.h

    Trotz intensiver Recherche bin ich zu keinem Ergebniss gekommen und hoffe, dass sich hier jemand findet der mir bei diesem Problem helfen kann.
    Sollten weitere Informationen nötig sein, werde ich diese auf Anfrage natürlich baldest gehend liefern.

    Vielen Dank im Voraus für jeden sinnvollen Kommentar
    Peveros910

  • Servus Peveros910,
    String- (Zeichenketten-) Vergleiche mit

    Code
    if (argv[1] == "unset_gpio")


    funktionieren nicht. Dazu gibt es strcmp, strncmp, ...

    //EDIT:
    Die erste Deiner Doppeldefinitionen von RelayPin[8] ist ebenfalls überflüssig ...

    Ausserdem gibt es in dem Sinne keine C-scripte ... das sind Sourcen bzw. nach dem compilieren Programme.

    ciao,
    -ds-

  • Hallo dreamshader,

    Vielen Dank für deine schnelle Antwort!

    Zu der Doppeldefinition: Ich hab da erst nur eine hingeschrieben...das hat aber nich getan.
    Ich hatte erst

    Code
    int RelayPin[8] = {};

    aber das hat nicht getan.

    Peveros

  • Hallo schnasseldag,

    ja, das Programm steckt voller Fehler....die werden alle ausgewetzt. Das mit dem sizeof() hab ich schon gelöst.
    Hattest recht! Sie liefern Größe des Arrays in Bytes, nicht die Anzahl der Elemente. Das hab ich gelöst in dem ich sizeof(array) / sizeof(int) geteilt habe.

    Danke für den Tipp!
    Peveros

  • Code
    int contains(int array[], int value)
    {
       int contains = 0;
    
    
      int i;
      for (i = 0; i < sizeof(array); i++)
      ...


    "int array[]" ist ein int*. Da liefert sizeof(array) vermutlich 4, weil das die Größe des Pointers auf Deinem Zielsystem ist. Der Variablenname "contains" ist auch nicht wirklich glücklich gewählt, weil er den Funktionspointer "contains" überdeckt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!