Kesmeler birbirine müdahale ederse?

Başlatan zengdai, 05 Mart 2014, 14:40:08

zengdai

4 fırçasız motor, sensör ve gps kesmeleri, kesmelere öncelik verilebildiğini biliyorum.
Peki ya gps verisi geldiğinde kesme servolara giderse diye kafam karıştı. Nasıl yapmam gerekiyor aydınlatırsanız sevinirim
Selametle!

z

Sorun anlaşılır değil. İşmeciden işlemciye de durum değişir.

Genel olarak konuşursak;

İnterruptların ya her birinin ayrı vektör adresi vardır. Ya da interruptlar ortak bir vektöre yönlendirilir.

Her bir interruptın vektör adresi ayrı ise zaten sorun yoktur. Eğer interruptlar ortak bir vektöre yönleniyorsa daha açık ifade ile örneğin, seri porttan data geldiğinde yada external int pini aktive olduğunda yada timer interrupt oluştuğunda hepsi de tek bir adresdeki programı çağırıyorsa bu durumda bu programın hemen başında hangi üniteden interrupt geldiğini yazılımla sorgulayarak tespit edip dallanmaları senin yaptırman gerekir.

Bu amaçla çevre birimlerinin interrupt oluştu anlamına gelen bir flağı vardır ve bu flag bir registerde bulunur.

Bu registerlerin her birisini tek tek okuyup ilgili flag set edilmiş mi edilmemişmi kontrol edeceksin. Eğer edildi ise çoğunlukla bu flağı silmek senin yükümlülüğündedir.

Örnğin interrupt rurinine girildiğinde Timer Interrupt glağını barındıran registeri okursun. Baktın Int flagı set edilmemiş, USART Int flağını barındıran registeri okursun baktın bunda da int flağı set edilmemiş bu kez atıyorum External Int flaglarını barındıran registere bakarsın baktın bunda ilgili falag set edilmiş haaa demekki interrupt rutinine giriş sebebimiz external interrupt oluşmuş yorumunu yaparsın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

skara1214

bir kesmeye girdiğinde  tüm kesmeleri kapat çıkışında aç
Herkes ölür ama herkes gerçekten yaşamaz

z

#3
Böyle yaparsan işi garantiye alırsın ama bunu yaparsan düşük öncelikli bir interrupta hizmet ederken yüksek öncelikli bir interrupt gelirse bu durumda önceliğin anlamı kalmaz.
Yüksek öncelikli interrupt ancak o an işlemi yapılmakta olan düşük öncelikli interrupt rutininin çalışmasının bitmesini beklemesi gerekir.

Hoş fazla stack derinliği olmayan işlemcilerde çok da fazla şansın olmaz.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

skara1214

Alıntı yapılan: z - 05 Mart 2014, 15:27:10
Böyle yaparsan işi garantiye alırsın ama bunu yaparsan düşük öncelikli bir interrupta hizmet ederken yüksek öncelikli bir interrupt gelirse bu durumda önceliğin anlamı kalmaz.
Yüksek öncelikli interrupt ancak o an işlemi yapılmakta olan düşük öncelikli interrupt rutininin çalışmasının bitmesini beklemesi gerekir.
Hoş fazla stack derinliği olmayan işlemcilerde çok da fazla şansın olmaz.
evet hocam haklısınız ama  dediğiniz gibi düşük stacklı işlemcilerde başımızın ağrımaması için bundan daha iyi yöntem yok en azından pic saçmalamaz.
Herkes ölür ama herkes gerçekten yaşamaz

zengdai

Açıklamalar için elerinize sağlık,
Şu anda kesmeler ile 2 adet servo kontrol ediyor ve 5hz lik bir GPS verisi yani  (INT RDA) serri iletişim kesmesi kullanıyorum.Başta şunu belirteyim Serri iletişim kesmesini hiç kaçırmak istemiyorum.Şöyle bir yol izledim.
-INT RDA kesmesine öncelik verdim ve INT RDA kesmesi girşinde servo kesmelerini enable, çıkıştada disable yaptım.
-Aynı şekilde Servo kesmesi girişinde INT RDA kesmesini enable yaptım.
Bu şekilde programım çalışıyor aksi halde hiç Gps verisi alamıyorum. Ama çalışan programda servo motorlar çok küçük titremeler yapıyor. Bana öyle geliyorki sinyalin high süresinde değişme oluyor ve beklediğim bir olaydı.
Bunu yapmanın başka bir yolu varmı acaba. Kesme işlemlerinde daha yeniyim, Aslında şunuda merakta ediyorum bazı işlemcilerde 15-20 adet kesme görüyorum  demek bunun 4-5 tanesini kullansak bile pek bi net sonuç alamıyacaz öylemi?