- 12V Akku mit 280 Ah bauen         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 35 von 35

Thema: Sammel-Interrupt mit avr-gcc

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Anzeige

    Powerstation Test
    Leider geht -mcall-prologues nur für "mormale" Funktionen, auf ISRs hat das keinen Effekt.

    Nebenbei: ich hab eben das Projekt mal mit dieser Option generiert, es schluckt dann 40 Bytes Flash mehr! (1bc9 anstatt 1b74, ohne .data und Konstanten).

    Das liegt daran, daß nur eine Funktion (ausser den ISRs) überhaupt einen nennenswert fetten Prolog hat (von insgesamt 84 Funktionen ohne ISRs). Ich werd die Option aber mal im Auge behalten. GCC scheint zu wissen, ob sich für eine Funktion call-prolog rechnet. Funktionen ohne bzw. mit kleinem Prolog packt er nicht an.

    Der Code, den avr-gcc macht, ist eben ziemlich dicht. Da noch was einsparen ist nicht ganz einfach...

    Mit den ISRs hab ich's so gelöst:
    In einer naked ISR lösch ich ihr enable-Flag (ist bitadressierbar, geht also, ohne ein Register zu brauchen oder SREG zu ändern). Danach spring ich mit rjmp zu der eigentlichen signal-Funktion, die aber nicht in der VecTab steht (weil sie nicht __vector_n heisst).

    Diese Funktion hat nen normalen ISR-Rahmen. In ihr schau ich mir die enable-Bits an. That's it!

    Also ähnlich wie die Lösung mit dem T-Flag oben. Ich weiß, welche IRQs aktiv sind und welche nicht, bzw könnte mir das auch merken. Die IRQs arbeiten als "one shot", und werden sowieso in ihrer eigenen ISR deaktiviert.

    Das alles ist C, bis auf eine Zeile asm für den Sprung, den ich als inline machen muss Dabei ist's wasserdicht und nicht mal hässlich -- zumindest nicht hässlicher als C für µC ohnehin schon ist...

    Funktioniert auch prima, und der Code sieht super aus. Geändert hat sich nix, ausser dem Code-Schrumpf

    Nochmal vielen Dank für eure Mühe und euren Gehirnschmalz!
    Disclaimer: none. Sue me.

  2. #32
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    58
    Beiträge
    1.195
    Bei avrfreaks gab's eine ähnliche Diskussion und Jörg Wunsch hat noch eine Alternative gefunden:

    http://www.avrfreaks.net/index.php?n...wtopic&t=36278

  3. #33
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Das Problem wird dort leider nicht besprochen.
    Zwar werden mehrere IRQs auf die gleiche ISR abgebildet (wie auch immer), aber dort ist es nicht möglich zu unterscheiden, welche IRQ getriggert wurde.
    Disclaimer: none. Sue me.

  4. #34
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    58
    Beiträge
    1.195
    Stimmt, hatte ich übersehen.

  5. #35
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Ist ja net schlimm, das Problem ist ja gelöst inzwischen. Trotzdem nochmal danke.
    Disclaimer: none. Sue me.

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

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

12V Akku bauen