INTERRUPT'ta gosub

Başlatan bahri, 12 Ocak 2009, 21:04:07

bahri

arkadaşlar interrupt ın içerisindeyken gosub komutu bende sorun çıkarttı.aynı sorunu yaşıyan arkadaşımız varmı?

Tagli

Nasıl bir sorun çıkarttı? Derleme sırasında mı yoksa programın çalışması sırasında mı hata verdi? PBP'da iç içe fonksiyon (gosub) çağırma sınırı 4 idi yanlış hatırlamıyorsam, belki onunla ilgili birşeydir. Tabi bu sınır PIC16 için. Normalde bu cihazların yığını 8 derinliğinde olur ama PBP 4'ünü kendine ayırıyor sanırım. Bu kendine ayırdığı 4'ün içinde kesmeyle ilgili birşey yoksa belki kesme içinde kullanıcıya 4'ten de az kalıyordur.
Gökçe Tağlıoğlu

bahri

derlerken normal olarak derliyor. ben portb.0 interrupt ını kullandım butona basınca interrupta yazdığım gosub a gelince program olduğu yerde çakılıp kalıyor.ne interrupa devam ediyor ne de programa.biraz araştırdım interrupta gosub kullanamıyoruz galiba gosub ı görünce ınterruptan çık gibi yorumlıyor galiba resume komutunuda göremiyor haliyle çakılıp kalıyor.interrupta gosub ı kullanmamaya karar verdim.çalıştırabile olursa söylesin sevinirim :D.

bymrz

bende bi kaç kez aynı şeyleri tecrübe ettim. o yüzden kesme içerisinde gosub ı kesinlikle kullanmıyorum... yoksa sapıtıyor...  ;)

ibo1973

interrupt içinde gosub kulanılır ancak kesme olduğu zaman kayıt edilen stackın bir sekilde bir önceki staca geri alınması lazım bu problemle bende karşılaşmıştım ancak ben pic 18f serisi pic kulanıyordum taglı arkadaşımızın önerisi ile @pop komutunu kulandım @pop komutu pic 18f lerde bir önceki stacka dönmeyi sağlıyor böylece kayıt edilen stacklar üst üste yığılmayıp picde sapıtmıyordu örnek vemek gerekirse

rog1: ' kesmeden goto ile dallanılan yerde mutlaka stackı sıfırlamak gerekir
intcon.1=0 
@pop  'pop stcka geri donmek için
disable


yanlış hatırlamıyorsam bunun gibi bi şeydi özetle kesmeden goto ile dallanılırsa ve dallanılan yerden kesmenin kaldığı yere geri dönülmiyicekse  stack bir geriye alınır.