CPU Last 100% wegen Programm

  • Hallo,

    ich bin ziemlich neu was C-Programmierung angeht. Ich habe bis jetzt eigtl immer nur was mit GPIO Outputs programmiert und das hat soweit auch immer funktioniert...

    Jetzt geht es darum einen Input auszulesen und je nach Pegel einen Befehl auszuführen. Soweit funktioniert das auch, aber die CPU Auslastung steigt jedes mal auf 100% sobald ich das Programm starte.

    Hier ist der Code:

    Jedes Mal wenn der Pegel low ist soll der curl-Befehl aufgerufen werden.

    Es handelt sich um das Klingel-Signal und hinter dem curl-Ziel befindet sich ein weiterer RasPi, der dann immer ein akustisches und optisches Signal ausgibt.

    Ich bin für jeden Tipp dankbar.

    Gruß Phil

  • Versuch's mal mit einem delay(x) in der while-schleife (außerhalb dem if{})

    Deine url sieht auch komisch aus. Da fehlt doch "//".


    ps: ich finde die starre url in c sehr unglücklich gewählt.
    Das solltest du lieber mit "char* argv[]" lösen. Oder vllt das ganze doch eher script schreiben zb i python

    Einmal editiert, zuletzt von cwmg (11. Mai 2014 um 15:16)

  • Vielen Dank! Der Tipp mit dem delay() hat geholfen.

    Ja die "//" hab ich beim abschreiben vergessen... in dem Programm auf dem RasPi sind die drin.

    Auf "char* argv[]" hat mich auch schon ein Kollege hingewiesen, aber wie gesagt ich bin ziemlich frisch in dem Thema und bin glücklich dass es jetzt erstmal funktioniert.
    Und das werde ich mir noch genauer anschauen.

  • Hi,

    wenn ich mich nicht irre, dann wird der dealy() nur ausgeführt, wenn der Pegel low ist.
    In den anderen Fällen rast das Programm - mit 100% - durch die Schleife.
    Mal 0.5 Sekunden sleep() ausserhalb der Abfrage und alles ist gut ;)

    // urks ... da war mal wieder einer schneller ;) ... Na macht nix, doppelt gemoppelt hält besser.

    cu,
    -ds-


  • Mal 0.5 Sekunden sleep() ausserhalb der Abfrage und alles ist gut ;)

    hmmm, wie das ? ist sleep nicht ein int ? in gcc geany geht nur sleep(1); // min. 1s

    für kürzeres musste ich auf delay ausweichen

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (11. Mai 2014 um 19:19)

  • Hallöle,


    Moin, wäre es mittels Interruptabfrage nicht eleganter?

    das hast Du vollkommen recht. Das wäre nicht nur die eleganteste, sondern auch die resourcen-schonendste Variante.
    Ach ja ... mit dem sleep() ... also zumindest in meinem Verständnis gibt es mehrere sleep()-Variante bis runter zu, ich bin nicht sicher, nano- oder auf alle Fälle micro-sekunden

    bye,
    -ds-

  • Dieses Rätsel lüftet ein "man 3 sleep"
    man solltenalle kennen -> manual und 3 ist hier nötig, weil sleep auf mehreren Systemebenen genutzt wird. Ein "man sleep" führt zum Bash-Kommando sleep.

    Und nun das Ergebnis:
    sleep ist nur für sekunden, wenn einem das nicht reicht, gibt es nanosleep (man nanosleep)

  • hmm, was soll ich mit nanosleep welches 100-200 µs braucht ?

    http://raspberrypiguide.de/howtos/raspberry-pi-gpio-how-to/

    System.Threading.Thread.Sleep(100); mit 100ms scheint mir sinnvoller

    http://www.google.de/url?sa=t&rct=j….66330100,d.bGQ

    "....found that calling nanosleep() takes at least 100-200 us" ???

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • hmm, was soll ich mit nanosleep welches 100-200 µs braucht ?

    Mit einem realtime Kernel würde es vermutlich wesentlich genauer funktionieren.
    Aber generell darf man auf so einem langsamen Prozessor nicht zuviel erwarten - je nachdem, was sonst noch so alles im Hintergrund an Prozessen läuft.


  • Mit einem realtime Kernel würde es vermutlich wesentlich genauer funktionieren.
    Aber generell darf man auf so einem langsamen Prozessor nicht zuviel erwarten - je nachdem, was sonst noch so alles im Hintergrund an Prozessen läuft.

    erwarte ich ich auch nicht, nur dann hätte ich ein millisleep oder maximal mircosleep erwartet und kein nanosleep :lol: der Name sollte Programm sein :fies:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (13. Mai 2014 um 11:06)


  • erwarte ich ich auch nicht, nur dann hätte ich ein millisleep oder maximal mircosleep erwartet und kein nanosleep :lol: der Name sollte Programm sein :fies:

    Der Name ist Programm, erfordert aber als Grundvoraussetzung eine dem Stand der Technik entsprechende Hardware sowie ggf. ein RT-fähiges Betriebssystem. Wir erwarten absolute Kompatibilität zum x86-Standard (PC), die wird es im Falle sehr hardwarenaher Ansprüche in der "ARM Welt" wohl nie geben, da sind dann workarounds gefragt. =(

Jetzt mitmachen!

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