Probleme mit bcm2835.c bcm2835_peri_read paddr

  • Hallo Leute,

    ich habe folgendes Problem:
    ich habe ein (kleines) C-Programm geschrieben, welches auf dem Raspberry läuft und mir die Kommunikation mit einem RFM12B-Funkchip ermöglicht. Es gibt mehrere (3) Thermometer, welche sich alle 30 Sekunden melden, um die aktuelle Temperatur am jeweiligen Ort zu übergeben. Das Programm läuft dauerhaft und wartet auf diese Nachrichten. Empfängt es eine, so wird diese ausgewertet und der jeweilige Temperaturwert in eine Text-Datei gespeichert. Von dort kann man sie dann mit einem Webserver und PHP-Seite auslesen. Das funktioniert auch erstmal prima.

    Das Problem tritt nun nach einigen Stunden Laufzeit auf. Führe ich das Programm mit Ausgabe in der Konsole aus, so taucht nach einigen Stunden nur noch die Meldung im Anhang auf.
    Ich habe schon versucht (Schande auf mein Haupt) in der bcm2835.c die Ausgabe der Nachricht auszukommentieren, in der Hoffnung das Programm würde weiterlaufen, doch leider stürzt es dann trotzdem nach ein paar Stunden ab.
    Im Anhang findet ihr das Programm.

    Übrigens: Betriebssystem ist Raspian Wheezy

    • Offizieller Beitrag

    Geduld, junger Padawan. Der gute Dirk ist nicht mehr der jüngste :fies: Ausserdem ist das ein Forum und kein Live Support ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Na na ... nicht so ungeduldig ;) ... ich bin schon älteren Semesters und brauche da ein wenig Zeit :lol:

    Nein, also auffällig ist erst mal nichts.
    Ausser vielleicht, dass Du dem armen Knirps mal eine kleine Verschnaufpause gönnen solltest. Der Loop lastet ihn ja komplett aus. So ein Delay mit ein paar (hunder) Millisekunden kann nicht schaden.
    Wäre vielleicht auch nicht blöd, mal die eine oder andere Debug-Ausgabe einzubauen um die Stelle, wo er aussteigt näher eingrenzen zu können.
    So vom Gefühl her geht das irgendwie in Richtung Resourcen-Engpass ... aber malloc() sind scheinbar keine drin und das File machst Du auch brav immer wieder zu :s

    Tja, da heisst es wohl mal langsam rantasten ...
    cu,
    -ds-


    ... Der gute Dirk ist nicht mehr der jüngste :fies: ...

    das war klar :) ... unser Mann in grün live wie er leibt und lebt.
    So liebe ich Dich, mein Freund ...
    Ich wäre echt enttäuscht gewesen, wenn da nix von Dir gekommen wäre :) ...

    cu,
    -ds-

  • Was ich noch herausgefunden habe: Wenn ich das Programm via Autostart laufen lasse und es dann irgendwann abstürzt, dann ist es auch total schwierig auf das Raspberry via SSH zuzugreifen. Erst nach einigen Versuchen schaffe ich es, wenn ich ganz schnell bin, "sudo reboot" einzuhacken. Danach ist alles wieder tuti

  • Das würde die Sache mit dem loop bestätigen. Da liegt Deine CPU-Last ohne delay() vermutlich bei 100% ...
    Also ... kurze Pause mit delay (bcm-Lib, musst Du nachschauen) oder usleep() ... einbauen.
    Ist mal der erste Schritt ... kann leicht sein, dass das dann auch den Absturz behebt. Läuft das Programm als root? Vermutlich schon ... ein root-Prozess mit 100% Last ...
    cu,
    -ds-

  • Im Regelfall erzeugt ein loop ohne delay 100% auf der CPU ... kannst Du ja spasshalber mit einem Dreizeiler mal ausprobieren ;)
    Aber ... möglicherweise bremst das Programm ja ein wenig, wenn es Daten verarbeitet und ermöglicht da die eine oder andere Verschnaufpause.
    cu,
    -ds-

  • Hm ... das ist aber auch ein saublöder Fehler ... der Aufruf erfolgt scheinbar in der Library und liest einen Wert von z.B. den GPIO-Registern ein.
    Mir fällt jetzt nur noch ein, ob evtl. die Library nicht mit Deinem Raspi klarkommt (evtl. wegen B+ oder Pi2) ...
    Hast Du mal bei Mike McCauley auf der Homepage nachgeschaut, ob es in dieser Richtung vielleicht einen Hinweis gibt?
    Ist halt, so wie es aussieht, immer dieselbe Adresse ...
    Vielleicht mal eine andere Library nehmen (ich nehme fast ausschliesslich nur noch die pigpio-Lib her).
    Ich hatte mal das Problem, dass eine ISR das gesamte Programm blockierte ... das war ein bug in der bcm-Lib, wie der Author mir bestätigte. War wohl nur auf eine bestimmte Kernelversion beschränkt und wurde deshalb wohl nicht behoben. Seitdem mache ich einen Bogen um diese Lib ...

    cu,
    -ds-

  • Okay, ich werde das mit der anderen Lib mal ausprobieren, sobald ich etwas Zeit zum Programmieren finde.

    Irgendwie kommt es mir auch so vor, als ob der Fehler, nun wo ich die Wartezeit drin habe, schneller auftritt.

    Übrigens ist die als Fehler angezeigte Adresse nach jedem Neustart des Raspberry eine Andere ;)

Jetzt mitmachen!

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