- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Problem mit RC5 Fernbedienung und M32

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.12.2010
    Beiträge
    55
    Das setzen auf false bei den beiden Parametern ändert leider nichts.

    Desweiteren ist mir noch aufgefallen, dass im Terminal noch
    Toggle Bit:0 | Device Address:0 | Key Code:16
    angezeigt wird, bevor das Programm beendet wird. Das müsste doch heißen, dass der Empfang ansich funktioniert, jedoch danach einen Fehler provoziert!

    Lieben Gruß

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    In so nem Fall kommentierst Du einfach erstmal alles aus bis nur noch ein Minimalprogramm übrig bleibt - also den Ultraschall Code da raus, und in der RC5 routine das komplette switch(rc5data.key_code) ...

    Genauso das msleep in der Hauptschleife.
    Dann nochmal die Ausgaben des Programms checken.

    MfG,
    SlyD

    PS:
    Verwende auch bitte die aktuelle RP6Lib und das aktuelle WinAVR aus dem Netz - nicht die von der CD.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.12.2010
    Beiträge
    55
    hi,
    vielen Dank für deine Hilfe ich konnte den Fehler jetzt soweit eingrenzen.
    Er steckt in dieser Passage:

    Code:
    void I2C_requestedDataReady(uint8_t dataRequestID)
    {
        checkRP6Status(dataRequestID);                            
    
        uint8_t messageBuf[8];
        static uint8_t dist_tmp;
        switch(dataRequestID)
        {
            case MEASURE_US_HIGH: // High data register
                // get received data ...
                I2CTWI_getReceivedData(messageBuf, 2);
                dist_tmp = (messageBuf[0]);
                // ... and request low data byte:
                I2CTWI_transmitByte(SRF_ADR, 3);
                I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_LOW, 1);
    
            break;
            case MEASURE_US_LOW: // low data byte:
                I2CTWI_getReceivedData(messageBuf, 2);
            
            break;
        }
    
    
    }
    Mein Problem ist jetzt allerdings, dass ich nicht weiß wie ich diese Passage so programmiere, das es nicht zum Absturz des Systems führt.

    Vielen Dank für eure Hilfe

    Lieben Gruß

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    Hast Du überhaupt einen Ultraschallsensor an Deinem Roboter angeschlossen?
    Der Code da ist ja aus der Ultraschalldemo.

    Da Du aber nirgendwo eine Messung auslöst vermute ich mal das Du sowieso keine dran hast also lösch das BIS AUF
    checkRP6Status(dataRequestID);

    alles weg.

    MfG,
    SlyD

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.12.2010
    Beiträge
    55
    Hi vielen dank für deine Hilfe.
    Doch ich hab einen angeschlossen, ich wollte nur zum Posten das prog nicht komplett reinstellen, sondern nur die Teile die den Fehler verursachen, damit jemadn der das Prog nicht geschrieben hat keine 3 std braucht um sich einzulesen.

    Ich habe den Fehler jetzt gefunden. Verstehe aber nicht warum es zu einem komplett Abstuz führt vllt kannst du mir das erklären.

    Und zwar darf
    uint8_t messageBuf[8];
    nicht innerhalb der Funktion stehen. Wenn ich das Array außerhalb der Funktion erzeuge funktioniert es...
    ICh weiß nur einfach nicht warum.

    Lieben Gruß

    Ingo

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Ich weis nicht ob es daran liegt aber Variablen in einer Funktion sind ansich dynamisch auf dem Stack im Gegensatz zu statischen vars im Ram. Wenn Dein Programm aus irgendwelchen Gründen zum Stack overflow neigt, knallt es natürlich um so schneller, je mehr Du auf den Stack drauf packst. Entsprechend hat die Var auch nur eine Gültigkeit innerhalb der Funktion da nach der Funktion der Stack abgeräumt ist. Demnach müsste es laufen wenn du ein "static" davor setzt, dann bastelt sich der Compiler die Var in einen extra Speicherbereich statt auf den Stack.
    LG Rolf
    Sind Sie auch ambivalent?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen