interrupt içinden goto vermek

Başlatan illgnsyyz, 02 Mayıs 2013, 17:17:44

illgnsyyz

Yapmak istediğim programın interrupt rutinini tamamlandığında kaldığı yere değilde goto ile programın benim istediğim konumuna gitmesi. goto verdiğimde istediğim yere gidiyor ve çalışıyor fakat önceki kesme uygun şekilde bitirilmediği için proteus overflow uyarısı veriyo ki sanırım bu devre donanım olarak kurulduğunda problem doğuracaktır. böyle bir tecrübesi olan var mı? overflow u engellemenin bir yolu var mı?


camby

Pic16 ile yolu yok , Pic18 ile yolu var. 18f lerde stack adresleri stack sayısı değiştirilebiliyor. Tabi Pic'in register'ları ile boğuşmanız lazım.

Pic basic ile nasıl olur bilemiyorum.

illgnsyyz

bu kötü oldu. peki başka bi dilde mümkün mü bu söylediğim

Kabil ATICI

programın çok uzun ve karmaşık değilse, yani çok sık şekilde ana betik içinde dolanıyorsa;
kesme içinde bir bayrak ataması yaparsın.
Ana betiklerde bu bayarağı kontrol edersin. Kesme tarafından değiştirilmişse, bayrağını başka bir değer atar istediğin yere dallandırırsın.

örneği::
bayrak=0 ;başlangıç değeri diyelim.

kesme içinde
bayrak=1 yaparsın

ana betikte
bayrak=1 ise
bayrak=0 yapıp
goto istediğin yer
ambar7

mehmet

Basic de interrupt rutininden sonra
kullanılan -sanıyorum- resume
komutu var. Bu komut label kabul
ediyor...
Ancak bayrak kullanmak çok daha
emniyetli olur diye düşünmekteyim...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

Tagli

PIC18 varsa tek asm komutuyla iş çözülür. Komut "pop". Her dilde asm kodu ekleme desteği var zaten. Bu komut donanım yığınının son elemanını çöpe atıyor.

Ancak, derleyiciler kesme sırasında bazı sistem değişkenlerini yedekliyor ve çıkarken onları eski yerlerine yerleştiriyor olabilir. Bu şekilde bir çıkış, düzeni ve dolayısıyla programı bozar. Yani donanım yığını olayın sadece bir boyutu.

Arkadaşların bahsetmiş olduğu bayrak çözümü en mantıklısı.
Gökçe Tağlıoğlu

RaMu

  Böyle birşey neden gerekli onu yazsan başka çözümlerde bulunabilir, örneğin kesmeleri kurarsın ama aktif etmezsin, mesela tımer kesmesi kurdun, ama kesme aktif olmadığı için overflow gerçekleşsede kesme rutininene girilmez, sen sadece ılgılı tımerın kesme bayrağı set olmusmu dıye kontrol edersin programında ve olmussa ıstedığin yere dallanırsın. Aslında bu kesmeye gırıp bayrak kurma ıle aynı kapıya cıkar ama ekstra bayrak kurmak ıcın regıster harcamamıs olursun, kesme veren herseyın zaten kendı bayrağı var.


  Aslında boyle bırsey neden gerekir gerçekten merak ettim!
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

RaMu, bildiğim kadarıyla PicBasic zaten böyle çalışıyor. Yani gerçekte kesme falan olmuyor. Derleyici her komuttan sonra bayrak kontrol eden bir kod yerleştiriyor ve ona göre (güya) kesme rutinine dallanıyor.
Gökçe Tağlıoğlu

vatandas30

kesme içinde GOTO yerine RESUME etiketi var. ben bir kaç programımda kullandım. bir sıkıntı olmadı ama ETE usta bu komutun pek düzgün çalışmadığını söyledi.

RaMu

Ben picbasic biilmiyorum, çok az ccs biliyorum, yalnız picbasic kesmeye güya girme işlemini, belki, (gerçekte örneğin asm de 16f877 için 04h adresinden girilen) kesme rutininin uzun olması dolayısıyla çıkacak sıkıntıları engellemek için kullanıyordur, malum yüksek seviyeli dillerle yazılan programlarda kesme rutini hemen şişebiliyor.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html