context saving meselesi nedir?

Başlatan canbulut, 03 Haziran 2015, 23:37:13

canbulut

arkadaşlar merhaba,
pic işlemcilerdeki context save ve yeni pic işlemcilerde automatic context saving özelliği var. biraz araştırdım. ama yetmedi. hangisini seçmeliyim? neye göre kaydetme yapacağım hiç bir fikrim yok. auto özellikli olan her şeyi auto mu yapıyor da uğraşmaya gerek yok mu?bla bla bla.

muhittin_kaplan

soruyu biraz daha açarmısın ?
context save proton daki mi ?

canbulut

#2
Alıntı yapılan: muhittin_kaplan - 03 Haziran 2015, 23:39:37
soruyu biraz daha açarmısın ?
context save proton daki mi ?
değil hocam. genel olarak piclerdeki bu hardware olarak interrupta bağlanması ve kaldığı yerden devam edebilmesi ile alakalı.bir normal cotext birde auto context konusu var. onunla ilgili bilgi arıyorum.hangi registerlerin değiştiğini (datasheette bilgisi var) ama kaydedilenler yetersiz mi bilemiyorum. eğer auto context bunları kendisi yapıyorsa hiç bu işe girmem auto context dahil bir işlemci ile çalışırım. nedir bunlar?

z

Otomatik context save işlemi ile donanım özelliğinden mi bahsediyorsun?

Eğer öyle ise bazı işlemciler oluşan interruptı cevaplamaya hazır olduğunda flagları tutan registeri ve bazen de ilave olarak accumulatorü aynen return adresi saklar gibi saklar.
Bunu yapamayan işlemcilerde bu iş yazılımla yapılır.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

canbulut

Alıntı yapılan: z - 03 Haziran 2015, 23:45:06
Otomatik context save işlemi ile donanım özelliğinden mi bahsediyorsun?

Eğer öyle ise bazı işlemciler oluşan interruptı cevaplamaya hazır olduğunda flagları tutan registeri ve bazen de ilave olarak accumulatorü aynen return adresi saklar gibi saklar.
Bunu yapamayan işlemcilerde bu iş yazılımla yapılır.
donanım kesmesi ile alakalı evet...((Int0 kesmesi ile giriyor.örnek 5kerede  timer0 kesmesi için giriyorsonra tekrar Int0 kesmesi.))uğraştığım kodlarda bir şeyler yolunda gitmiyor. o yüzden auto context saving bir işlemci kullanırsam gerekli kaydedicileri kaydetmeme gerek kalmayıpta hiç uğraşmayacaksam ne ala. datasheette bu konunun altında örnek bile vermiş fakat yinede kaydetmem gereken bir bilgi varmı diye düşünmüyor değilim. Demekki auto context saving işlemci kullansam hiç bir şey yapmayacağım. interrupta dallanacak kodlarımı yazacağım. akabinde hiç bişey yapmadan çıkıp ana rutinde koşturacak. bende asm'de bişey kaydetmemiş olabilirmiyim diye düşünmeyeceğim.

z

Dokümanda hangi registerlerin saklandığı yazıyordur. Bunların dışında bir register ile işlem yapacaksan onları sen gene klasik usulle saklayacaksın ve iş bitiminde geri yükleyeceksin.

16F serisinde yoktu.

Herhalde üst modellerden bahsediyorsun.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

#6
  Asm ile yazmıyorsan senin için değişen bir şey olmaz,
hangisini kullandığın farketmez.
  Asm kullanıyorsan ve picin auto context save özelliği yoksa
linkdeki konunun sonundaki örnekde olduğu gibi
interrupt rutini girişinde W,status,fsr, pclath gibi registerları okuyup,
interrupt çıkışında geri eski değerlerini yazman gerekir.
Buda 15-20 komut çevrimi süre kaybı demek ama
özel bir program yazmıyorsan genelde farketmez.
Konu: https://www.picproje.org/index.php/topic,58682.0.html

  Yeni 16F lerdede varmış automatic context save,
16F1826/27 de var.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

Yeni çıkan bazı PIC16'larda var bu özellik. Kodu ASM ile yazıyorsan z'nin dediği gibi, otomatik saklanan register'lar dışındakileri yine elle yedeklemen gerekir. Derleyici kullanıyorsan, derleyici bu işi kendisi yapar ve tahminimce mümkün olduğunda donanım desteğinden faydalanacak şekilde kod üretir.

PIC18'lerde iç içe iki kesme gelebileceği için donanım desteği yetersiz kalıyor. Donanımsal yedekleme tek boyutlu, bu sebeple kesme içinde kesme gelirse sorun yaşarsın. Katmanlardan en azından birini elle yedeklemen gerekir.

16 bit PIC'lerde ASM ile hiç kod yazmadığım için durumu bilmiyorum ama onlarda ikiden de fazla kesme aynı anda gelebiliyor.
Gökçe Tağlıoğlu

canbulut

Alıntı yapılan: RaMu - 04 Haziran 2015, 00:02:19
  Asm ile yazmıyorsan senin için değişen bir şey olmaz,
hangisini kullandığın farketmez.
  Asm kullanıyorsan ve picin auto context save
linkdeki konunun sonundaki örnekde olduğu gibi
interrupt rutini girişinde W,status,fsripclath gibi registerları okuyup,
interrupt çıkışında geri eski değerlerini yazman gerekir.
Buda 15-20 komut çevrimi süre kaybı demek ama
özel bir program yazmıyorsan genelde farketmez.
Konu: https://www.picproje.org/index.php/topic,58682.0.html
pbpda asm ile kaydedip "Insert interrupt code here ;" aşağıda dediği yerde asmyi kapatıp kodlarımı yazıp tekrar asmyi açıp kapatıp kaldığı yere geri gönderiyorum. esinlendiğim yer şurası
' Define interrupt handler
define INTHAND myint

' Assembly language interrupt handler
Asm    
; Save W, STATUS and PCLATH registers, if not done previously
myint
   movwf   wsave
   swapf   STATUS, W
   clrf    STATUS
   movwf   ssave
   movf    PCLATH, W
   movwf   psave
Endasm
; Insert interrupt code here
; Save and restore FSR and any other registers used

  high     _led            ; If interrupt, turn off LED
asm
   bcf     INTCON, 1       ; Clear interrupt flag

; Restore saved registers
   movf    psave, W
   movwf   PCLATH
   swapf   ssave, W
   movwf   STATUS
   swapf   wsave, F
   swapf   wsave, W
   retfie                  ; Return from interrupt
Endasm
başka kaydetmem gereken registerlerda mesela değişkenlerim midir? nedir? nerden bilecem?

z

16Flerin hangisinde otomatik context save özelliği var?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

#10
Alıntı yapılan: RaMu - 04 Haziran 2015, 00:02:19
  Yeni 16F lerdede varmış automatic context save,
16F1826/27 de var.
Başka hangilerinde var bilmiyorum,
rastlantı eseri buldum,
datasheete baktım doğruladım.

mesaj birleştirme:: 04 Haziran 2015, 01:23:12

Alıntı yapılan: canbulut - 04 Haziran 2015, 00:16:12
pbpda asm
.
.
.
başka kaydetmem gereken registerlerda mesela değişkenlerim midir? nedir? nerden bilecem?
Önceki mesajımda var kaydetmen gerekenler.
FSR yi kaydedebilirsin bunlara ek olarak.

  Kullandığın değişkenleri zaten bir yere kaydedemezsin,
kaydedeceğin yer yine değişken olur,
değişkenden kastın
duty VAR WORD

olsa gerek.
  Değişkenlerinde dikkat edeceğin husus,
interrupt içinde bu değişkenlere bir işlem yapıyorsan
burada bir mantık hatası olmamasıdır.
Misal ana programda
count_8 diye bir değişkenin olsun
bu değişkenle ana programda bir şeyi sayıp işlem yapıyorsan
ve
interrupt içinde başka bir şeyi saymak için
(misal interrupt a kaç defa girildi diye sayıyor ol)
yine aynı count_8 değişkenini kullanırsan
mantık hatası olur.

  Pbp kullanmıyorum ama automatic context saving özelliği derleyicide var sanırım,
senin ekstradan bir şey yapman gerektiğini düşünmüyorum,
sadece derleyicide bu özellik açılıp kapatılabiliyorsa buna dikkat etmen gerekebilir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Tamam canım ben 16F8xx serisinde yok biliyorum. Daha sonraki serilerlerle hiç ilgilenmedim. Şu bölme falan yapabilen çipler galiba.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

canbulut

pbpda auto context yok .herşeyi asm ile yapmak zorundayım gibi hissediyorum.(ki gerçekten öyle gibi.)ana rutinde pulsin komutunu kullanıyorum. 10sn. gecikme koyuyorum  programda interrupt güzel çalışıyor.ama pulsin (pals süresi ölçme) komutunu kullanıyorum sorun oluyor. bende bu araştırmaya girmek durumunda kalıyorum. şimdilik sonuçsuz kaldı. daha sonra auto context içeren bir işlemci ile deneyeceğim.

Maxim

kullandığınız program pbp mı ? (picbasic plus)

canbulut