Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Hauke am 07. August 2005, 16:12

Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Hauke am 07. August 2005, 16:12
Problem beim Zurückspringen vom Interrupt.

Ich habe für den ProtectMode die GDT und IDT programmiert und eingerichtet. Zusätzlich  habe ich den PIC umprogrammiert (auf 32 bis 47). Jedoch, wenn ein Interrupt aufgerufen wird und zurückgesprungen wird, wird Exception 13 ausgelöst. Mit welchem Befehl wird von einem Interrupt zurückgesprungen, bisher mache ich es mit Irtd benutzt. Was ist daran falsch?:?:

Ps. Ist es richtig, dass der System Timer Interrupt selbstständig vom System(PIC) ausgeführt wird? (Hier Int 32):?:


Aufbau von einem Interrupt (bei mir)
Interrupt_x:
Pushad
Cli
… ;Anweisungen
…
Sti
Popad
Irtd
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Legend am 07. August 2005, 16:19
irtd? hab ich ja noch nie gehört! :)
Bei mir gehts einfach mit iret.
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Hauke am 07. August 2005, 18:48
„Iret“ fuktioniert auch nicht. System Timer Interrupt (int 32) wird ausgelöst. Dann nachdem ich zurückspringen will wird Exception 13 ausgelöst und dann stürzt das System ab. (weil der Fehler ja noch immer da ist.)
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Jidder am 07. August 2005, 20:29
manipulierst du den stack im interrupt handler?
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: SSJ7Gohan am 08. August 2005, 11:51
Du musst bei IRQs noch ein EOI (End of Interrupt) an den Pic senden, bei IRQ 0 wäre das 0x20 an den Port 0x20, wenn ich mich richtig errinnere. Ich habe auch immer iret benutzt.
Iret popt CS, EFLAGS, und die Rücksprungaddresse vom Stack und kehrt dann zur Rücksprungaddresse zurück.
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Legend am 08. August 2005, 13:48
Na ja, ein fehlender EOI sollte ja nur bewirken das danach kein IRQ mehr kommt. Aber es wird halt wohl darauf hinauslaufen das mit dem Stack was nicht stimmt.
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Hauke am 19. August 2005, 14:46
Ich hab jetzt fast alles ausprobiert, Code verändert und sonstiges gemacht, aber es funktioniert immer noch nicht, das merkwürdigste daran ist, dass es bei Bocks funktioniert aber beim Computer selbst nicht. Hat jemand vielleicht noch eine Idee?
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: maumo am 19. August 2005, 15:32
Zitat

manipulierst du den stack im interrupt handler?


tust du das ?
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Hauke am 19. August 2005, 17:33
Ich weiß nicht was unter
Zitat
manipulierst du den stack im interrupt handler?

zu verstehen ist. Bitter erklären.  :?:
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: SSJ7Gohan am 19. August 2005, 17:36
Veränderst du das ESP Register, oder pushest du irgentwelche Sachen, die du dann nicht wieder popst, wärend der Interrupt ausgeführt wird? Eventuell popst du auch zuviel.
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: Hauke am 19. August 2005, 18:19
Ich hab den Fehler gefunden (glaub ich zumindest)
Esp hat den Wert 0x1FFFF und meine Startadresse war 0x10000. Und als ich Esp auf  0x2FFFF gesetzt habe ging es.

Danke für alle Hilfen. :D
Titel: Problem beim Zurückspringen vom Interrupt.
Beitrag von: maumo am 19. August 2005, 18:23
an deiner stelle würd ich den stack viel weiter oben oder unten machen, nicht so direkt beim kernel