- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: Register in ISR sichern

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Register in ISR sichern

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    um eine möglichst schnelle ISR in Bascom zu erreichen, möchte ich möglichst wenig Register sichern.
    Es geht um einen Timer-Interrupt (On Timer1 Tim1_isr Nosave).

    In der ISR soll nur eine Word oder Long-Variable hochgezählt werden (Incr Longvar). Sonst passiert da nichts.

    Welche Register muss ich PUSHen?
    In anderen Progs wird mindestens SREG und r24 gesichert, manchmal auch r25, r26, r27, manche sichern auch noch r10, r11 und r16, obwohl nur einfache Rechenbefehle oder I/O-Befehle in der ISR stehen.

    Was meint ihr, welche Regs ich sichern muss für eine ISR, die nur ...
    Timer1 = Timervorgabe
    Incr Longvar
    ... enthält??

    Gruß Dirk

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    ich habs einfach mal so gemacht,
    erstmal ohne ein Register zu sichern compilieren, die Hexdatei mit AVR-Studio öffnen, und suchen wo die ISR beginnt, und welche Register darin verwendet werden,
    diese baue ich nacher in die ISR unter Bascom wieder ein, compiliere erneut, danach nochmal im AVR-Studio kontrollieren.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo linux_80,

    ... die Hexdatei mit AVR-Studio öffnen, und suchen wo die ISR beginnt, und welche Register darin verwendet werden, ...
    Das habe ich jetzt 'mal gemacht und bin überrascht:

    Bei der Long-Variante werden sage-und-schreibe 8 Register gebraucht: r16, r17, r18, r19, r24, r25, r26, r27.

    Kann das sein? Das haut mich um. [-(

    Gruß Dirk

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hi,

    Long hat nun mal 4 Bytes (32Bit), wenn man damit rechnet mind. das Doppelte !
    Integer hat dann immerhin noch 2 Byte.

    Wenn's Zeitkritisch wird, muss man die Datentypen schon beachten, und evtl. eine nummer kleiner wählen.

    In der Bascom-Hilfe stehen die möglichen Datentypen.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo linux_80,

    Long hat nun mal 4 Bytes (32Bit), ...
    Ja, klar. Ich kenne die Datentypen.

    Jetzt habe ich mir die Word-Variante im Disassembler angesehen:
    Braucht 6 Register: r24..r27, r30, r31.
    Da gibt's aber noch einige etwas unübersichtliche Branches, so dass es auch noch mehr Regs sein könnten.

    Gruß Dirk

Berechtigungen

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

LiTime Speicher und Akkus