İnterrupta girerken Context Saving

Başlatan fatihvelid, 24 Ağustos 2007, 10:44:01

fatihvelid

Merhaba Arkadaşlar,
C18 ile interrupt girişlerde context saving için hangi registerları kaydetmem gerekiyor, Ben aşağıdaki gibi yaptım. Ama program çalışırken garip davranıyor. Pointer içeren fonksiyonların icraası sırasında sapıtyor.
Yedeklemediğim register var mı?
Alıntı Yap
HighIsrContextSave:
      movff   WREG,SaveHIWREG
      movff   BSR,SaveHIBSR
       movff   STATUS,SaveHISTATUS
       movff   PRODH,SaveHIPRODH
       movff   PRODL,SaveHIPRODL              
       movff   TABLAT,SaveHITABLAT
       movff   TBLPTRL,SaveHITBLPTRL
       movff   TBLPTRH,SaveHITBLPTRH
       movff   TBLPTRU,SaveHITBLPTRU
       movff   FSR0H,SaveHIFSR0H
       movff   FSR0L,SaveHIFSR0L
       movff   FSR1H,SaveHIFSR1H
       movff   FSR1L,SaveHIFSR1L
       movff   FSR2H,SaveHIFSR2H
       movff   FSR2L,SaveHIFSR2L       
       call HighISR


C18'in #pragma interrupt HighISR ve #pragma interrupt LowISR komutlarıyla yaptım ilk önce. Dissambly yapınca gördüm ki, LowISR'de context saving yapmış, HighISR fonksiyonunda direk fonksiyona girmiş. Bu yüzden interrupta giriş ve çıkışları tamamen assembly ile yazıyorum.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

fatihvelid

İnterrupta girerken aşağıdaki registerların dışında yedeğini almam gereken başka register var mı ?

Cevap veren yok mu


WREG,
BSR,
STATUS,
PRODH,
PRODL,
TABLAT,
TBLPTRL,
TBLPTRH,
TBLPTRU,
FSR0H,
FSR0L,
FSR1H,
FSR1L,
FSR2H,
FSR2L,
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

z

Islemcini tanimiyorum. Ancak bu tip soruya verilecek genel cevap su sekilde.

Int rutinine girdiginde isteyerek yada istemeden iceriklerini degistirdigin register ve flaglarin orjinal degerlerini saklamalisin.

Icerigi degismeyen registerleri saklamaya gerek kalmayacagindan hiz kaybindan da kurtulursun.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com