- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Interruptvektor zur Laufzeit mit SPM verändern

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.11.2004
    Ort
    Regensburg
    Alter
    45
    Beiträge
    344

    Interruptvektor zur Laufzeit mit SPM verändern

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    wie der Titel schon sagt würde ich gern den Interruptvektor, also die Routine die zur IRQ bearbeitung aufgerufen wird zur Laufzeit "umschalten", indem ich die Adresse nach dem jmp-Befehl verändere. Weiß jemand, ob das möglich ist?

    Gruß

    Wolfgang

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

    theoretisch schon, aber zum flashen muss man immer eine ganze Seite neu beschreiben, nicht nur die paar Bytes des Sprungbefehles !

    Beim Mega32 ist eine Seite(Page) 64words gross, also 128Bytes.

    Diese muss man erst komplett löschen, damit man die wieder neu beschreiben kann.

    Mir erscheint es deswegen praktischer, das im Code selbst zu lösen welche ISR man verwenden will.
    So wird es auch in Systemen gelöst, die nur einen IRQ haben, hier muss immer erst nachgeschaut werden, wer/was den IRQ ausgelöst hat, um dann die entsprechende Routine aufzurufen.

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Du könntest beim Interrupt auch einen ICALL oder IJMP verwenden, dann mußt du aber schauen, daß das Z-Registerpaar immer mit der richtigen Sprungadresse geladen ist, es fällt also für normale Verwendung mehr oder weniger aus.

    Du kannst auch einen normalen Interrupt Vector verwenden, der dann die aktuelle SPrungadresse irgendwo aus dem Ram holt, wo du sie vorher hingestellt hast.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    53
    Beiträge
    104
    Sehe ich auch so, es ist vielleicht irgendwie hinzubekommen, aber sinnvoll ist es nicht.
    Eventuell hilft Dir ja ein Zwischenschritt, indem der Vektor in der Tabelle fest bleibt, und zu einem IJMP - Befehl springt. Mit diesem Befehl läßt sich der Programmcounter auf den Inhalt des Z-Registers setzen. Es sollte sogar gehen, den IJMP-Befehl direkt in die Interruptvektortabelle zu setzen. (Befehlsläne je nach Device beachten) Damit kannst Du dann wenigstens einen Interrupt variabel machen.

    IJMP ist allerdings nicht in allen Atmels drinne, aber ab mega8 aufwärts schon.

    greetz Rajko

    edit: prima, zu spät

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    'tschuldige, Bax. aber immerhin sind wir uns einig
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.11.2004
    Ort
    Regensburg
    Alter
    45
    Beiträge
    344
    Danke für die schnellen antworten, und vor allem für den hinweis auf den Pagewrite.
    Werde mir wohl oder übel eine andere Lösung einfallen lassen müssen.
    Danke nochmal.

    Wolfgang

Berechtigungen

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

LiFePO4 Speicher Test