Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

breakpoint w procedurze obsługi przerwania (Turbo C++)

26 Lis 2006 17:08 1345 2
  • Poziom 16  
    Witam

    Mam taki problem: Gdy wstawiam breakpoint w procedurze osbługi przerwania, nie ważne w jakiej linii, debuger się zawiesza. Wiem, że kod jest poprawnie napisany, bo bez breakpointa wszystko działa dobrze. Przerwanie, od którego zastępuje procedurę obsługi to 1Ch, czyli Clock Tick. Prawie na pewno nie chodzi o przepełnienie stosu, bo wstawiłem wewnątrz procedury licznik i debuger sie zawiesza już przy pierwszym wejściu do procedury. Dodatkowo, przy procedurach dla innych przerwań wszystko działa dobrze, moge wykonywać singlestep i nic sie nie psuje.

    Ktoś wie o co chodzi z tym breakpointem? Będę wdzięczny za wszelką pomoc.

    Pozdrawiam
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Pomocny post
    Poziom 31  
    Przerwanie 1Ch jest wywoływane z wnętrza IRQ 0. Ma więc wyższy priorytet niż przerwanie klawiatury - IRQ 1 - i stąd "zawieszenie". Komputer nie reaguje na klawiaturę, dopóki nie zakończy się IRQ 0, a ono nie zakończy się, bo debugger czeka na klawiaturę....

    EDIT: Dla jasności - nie chodzi tu o fakt, że IRQ0 ma wyższy priorytet niż IRQ1. Wystarczy , że 1Ch jest wywoływane z wnętrza przerwania sprzętowego i kontroler przerwań w PC nie przyjmuje kolejnych przerwań aż otrzyma sygnał o zakończeniu obsługi (bajt 20h wysłany na port 20h).
  • Poziom 16  
    Dzięki za pomoc! Teraz już wszystko jasne. Po dodaniu na początku procedury obsługi przerwania instrukcji:
    Code:
     outportb(0x20, 0x20)
    można było podejrzeć co sie tam dzieje.

    Pozdrawiam