- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: Böse Interrupts

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Du meintest sicher EIMSK = (1<<PCIE1); oder EIMSK = (1<<PCIE0);

    sehe Seite 53 Dattenblatt

    Ich hoffe das war der Fehler...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  2. #12
    JAAAAAAAA es tut sich was es tut sich was!!
    Super, dein EIMSK = (1<<PCIE1) war die Tageslösung.

    In der Main() wird permanent von 1 bis 9 gezählt bis ein Interrupt kommt.
    Gehe ich mit der Hand vor den Sensor, bleibt die Zahl auf dem Display stehen, die als letzte auf das LCD gepinnt wurde.

    Und danach bleibt der Butterfly stehen und es passiert nüscht, also es wird nicht das hübsche Wort "wand" angeschrieben, wie in der Interruptfunktion gefordert wird, sondern das Ding bleibt stehen und das wars.

    Aber für die Angabe des Registers schonmal vielen Dank, Izaseba.

  3. #13
    Naja, jetzt habe ich der PinChangeInterrupt() am Ende noch ein return; spendiert und manchmal klappt es, dass "wand" erscheint und er danach brav weiterzählt. Aber meistens bleibt er wieder nur hängen...

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    wie ? einer void ...(void) Funktion hast Du noch ein return spendiert ?
    Normal dürfte sich sowas nicht kompilieren lassen, oder zumindest eine Warnung ausgeben.
    Tue Dir selber ein gefallen, und halte Deine ISR so klein wie möglich,
    setze ein globale volatile variable z.B. volatile uint8_t blabla = 0;
    un der ISR machst Du nur blabla =1; und in Deiner main schleife prüfst Du Sie mit if (blabla){
    tue_was;
    blabla = 0;
    }
    so ist es auf jedemfall sauberer....

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    36
    Beiträge
    194
    Ja, es ist möglich eine "void"-Funktion mit return zu beenden.

    Man schreibt es dann so:
    return;

  6. #16
    Im Endeffekt dürfte sich mein Butterfly gar nicht aufhängen.
    Ein return kann übrigends ohne Wert in c immer gesetzt werden, weil es dann automatisch dem break glecihgesetzt wird.

    Wieso sich der BTFLY aufhängt, muss ich aber noch klären.
    In jedem Fall wurde mir in diesem Forum stark weitergeholfen.

    Wieder vielen Dank,
    Florian.

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Ja, es ist möglich eine "void"-Funktion mit return zu beenden.

    Man schreibt es dann so:
    return;
    Aha, und was bringt das ?
    Kann ich dann die Funktion vorzeitig beenden, ohne sie komplett abzuarbeiten also irgendwie aus einer if Abfrage z.B ?
    Bis jetzt kannte ich ja return nur im Zusammenhang mit Rückgabewerten...
    Man lernt ja nie aus, danke für den Hinweis.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    36
    Beiträge
    194
    Ja du kannst eine Funktion vorzeitig beenden.
    z.B.:
    Code:
    if(lol==1)
    {
        return;
    }

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Wieso sich der BTFLY aufhängt, muss ich aber noch klären.
    Wie ich schon gesagt habe, befrei die ISR von der ganzen Last, Das ist ja eine ziemliche Rumspringerei, was Du da drin hast. SprinterSB hat mal einen Artikel in Wiki geschrieben, was der kompiler aus deinem Code macht, schau mal hier und zwar unter Interrupt und Funktion aufrufen.
    Du springst ja aus der ISR in eine Funktion, damit landet einiges auf dem Stack, in der Funktion werden wiederum Funktionen Aufgerufen, da landet wieder was auf dem Stack, vielleicht läuft der Dir über, keine Ahnung.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zitat Zitat von izaseba
    Kann ich dann die Funktion vorzeitig beenden, ohne sie komplett abzuarbeiten also irgendwie aus einer if Abfrage z.B ?
    Genau so ist es. Das geht natürlich auch für nicht-void-Funktionen, dann natürlich mit return-Wert. Das kann in einem if oder Schleife oder wo auch immer stehen. Overhead ist es nicht (zumindest bei avr-gcc). Zudem ist das ganz normales C/C++.
    Disclaimer: none. Sue me.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen