BCM2835: bcm2835_read_paddr Fehler?

OP #4078579
Lesenswert?
• ▲
▼
Hallo Leute,
ich weiß ich habe diese Frage bereits gestern im Forum "GCC" gestellt, 
aber da mir dort irgendwie keiner antwortet, vermute ich mal, dass die 
Frage dort nicht hingehört. Wenn ich nach Fragen zum Raspberry Pi suche, 
dann finde ich sie auch eher hier. Von mir aus kann der Beitrag also 
dort gelöscht werden. Nun zu meinem Anliegen:

Ich betreibe zurzeit ein Raspberry Pi im Dauerbetrieb mit einer
Funkkommunikation mittels 433MHz. Dazu habe ich einen kleinen Adapter
mit einem RFM12B entwickelt, welcher auf die GPIOs des Raspberry
gesteckt werden kann. Auf dem Raspberry wird ein C-Programm ausgeführt,
welches einfach nur lausch ob Daten in einem vorgesehenen Format
verfügbar sind, diese empfängt, auf Richtigkeit prüft und ggf. in eine
Textdatei speichert und ausgibt. Die Daten kommen von 3
Temperatursensoren, welche etwa alle 30 Sekunden neue Werte senden.

Soweit so gut. Alles funktioniert eigentlich ganz gut. Nun habe ich
allerdings das erste Mal ein paar Dauertest gemacht und musste
feststellen, dass ich nach ein paar Stunden betrieb die im Anhang zu
sehende Fehlermeldungen bekomme. Habt ihr eine Ahnung woran das liegen
könnte? Ich habe mir bereits die bcm2835.c angeschaut und habe
festgestellt, dass das Debug-Flag wohl irgendwie eingeschaltet werden
müsste, doch ich habe wirklich keine Ahnung wo das passiert und warum
erst so spät.

Hier mal der Codeabschnitt, in welchem ich auf die Bibliothek zugreife:
1
// Function to write a command to the RFM12
2
uint16_t RF12_WRT_CMD(uint16_t cmd)
3
{
4
  char buffer[2];
5
    uint16_t reply;
6

7
    buffer[0] = cmd >> 8;
8
    buffer[1] = cmd;
9

10
    bcm2835_spi_transfern(buffer,2);
11

12
    reply = buffer[0] << 8;
13
    reply |= buffer[1];
14

15
    return reply;
16
}
Angehängte Dateien:
#4078859
Lesenswert?
• ▲
▼
Jens K. schrieb:
> Genau dort hatte ich ich schon geschaut, aber wie gesagr, ich
> verstehe
> nicht wo der Debug-Modus eingeschaltet wird.
> kleiner Tipp vielleicht

Wenn du schon erkannt hast, dass es der Debugmode ist, dann versuche 
herauszufinden, wovon dieser abhängt. Dann erkennst du auch, wo dieser 
dann ein/aus geschaltet wird. Das ist so offensichtlich....

Das solltest du selber hinbekommen.

Also wovon hängt es ab, ob der Debugmode ein/aus ist?
#4078909
Lesenswert?
• ▲
▼
bcm2835_set_debug(1);

schau in deinem code nach diesem bcm2835_set_debug() call.
bei den "examples" ist er auf 1, somit wird die debug meldung auch 
ausgegeben.

bcm2835.c:
<code>
 //
 43 // Low level register access functions
 44 //
 45
 46 void  bcm2835_set_debug(uint8_t d)
 47 {
 48     debug = d;
 49 }
 50
 51 // safe read from peripheral
 52 uint32_t bcm2835_peri_read(volatile uint32_t* paddr)
 53 {
 54     if (debug)
 55     {
 56         printf("bcm2835_peri_read  paddr %08X\n", (unsigned) paddr);
 57         return 0;
 58     }
 59     else
 60     {
 61         // Make sure we dont return the last read which might get 
lost
 62         // if subsequent code changes to a different peripheral
 63         uint32_t ret = *paddr;
 64         uint32_t dummy = *paddr;
 65         return ret;
 66     }
 67 }
</code>
OP #4078926
Lesenswert?
• ▲
▼
Gesetzt wir das Debug-Flagge ja mit der bcm2835_set_debug ()-Funktion. 
Diese wird ja nur in der Main aufgerufen, aber diese wird wiederum nur 
ausgeführt, wenn BCM2835_TEST definiert ist. Dies ist aber 
auskommentiert. Vorallem verstehe ich nicht, warum das erst noch einigen 
Stunden auftritt.
#4079259
Lesenswert?
• ▲
▼
Wenn das sicher erst nach einigen Stunden auftritt, dann ist es wohl ein 
Programmfehler, der dir die Variable "debug" setzt.


Zum ausprobieren, ob es so ist könntest du, nachdem der Fehler auftritt, 
mal

bcm2835_set_debug(0);

aufrufen. Wenn es dann weg ist, dann hast du einen Programmfehler oder 
es gibt irgendwo nach Stunden doch jemand, der

bcm2835_set_debug(1);

aufruft.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.