Protondaki "Bug"lar

Başlatan Mucit23, 08 Aralık 2011, 12:58:03

Mucit23

Arkadaşlar Epeyidir protonla uğraşıyorumki uğraştıkça protonda ilginç sorunlarla karşılaşıyorum.
Bugün yeni bir durumlar karşılaştım. 16F serisi bir işlemci için bir deneme programı yazıyordum. Programda kesme ile birlikte DS18b20 den sıcaklık bilgisini okuyorum. Kesme Picbasicdeki gibi kullanınca normal olarak çalışıyor. Yani aynı anda kesme çalışıyor ve ısı bilgisini okuyorum. Ama kesme yi hardware kesmesi olarak ayarlayınca kesme çalışıyor ama ana döngüde program ds18b20yi okurken donup kalıyor. Bu sırada kesme sorunsuz bir şekilde çalışmaya devam ediyor. Ben ilk başta bu durumun kesme önceliğinden kayanaklanabileceğini düşündüm ama 16F serisinde öyle birşey yok.

Kesmeyle ilgili daha önce çözümünü bulamadığım birçok olay başıma gelmişti. En çok beni uğraştıran ise GLCD ve yine hardware timer0 kesmesini kullanırken GLCD ye gönderilen dataların bozulması olayı idi . Hatırlarsınız belki Kesmenin çalışmasıyla birlikte ekrandaki görüntüler yavaş yavaş silinmeye başlıyordu. Bu durumda bana çok saç yoldurdu. Doğru dürüst bir çözüm bulamadım. Bende en son GLCD ye veri yazarken kesmeyi kapatıp yazma işi bittikten sonra tekrar açmakla çözümü buldum. Nekadar sağlıklı bir çözüm olduğu düşünülür.

Son olarak karşılaştığım başka bir durum ise Protonda dizi değişkenleri ile ilgili. Diyelim  size 8 tane değişken lazım. Değişkenimizin adı x olsun.
Dim X[7] as byte adında bir dizi bize yeter normalde ama assembler buna izin vermiyor. Şöyleki 8 adet dizinin 8inide kullanmak istersek assembler hata veriyor. Derlenmiyor program. Ama 8 diziden yedisini kullansak problem yok. 8 Dizinden 8'inide kullanmak istersek illa 9 dizilik bir değişken tanımlayacağız. Yani Dım X[8] as byte olacakki doğru düzgün derlensin program.

Bunlar Bug olarak sayılabilirmi?

Kabil ATICI

Bunlar programcılığın cilveleri. Normalde kesme işlemlerini mümkün olduğu kadar kısa tutmak bir çözüm olabilirken ( bayrak kullanmak gibi) , özellikle kritik işlemler için kesmenin engellenmesi de bir çözümdür. Zamanlama açısından kritik işlemlerde (1 wire iletişim uygulamaları gibi) kesinlikle kesmelerin engellenmesi gerekiyor.
ambar7

Mucit23

Benim durumda ikside özel ısıyı multiplex olarak ekranda gösteriyorudum. Display taramsınıda kesmeyle yapıyordum. Yani kesme durursa görüntü bozulur.Bunca millet boşuna c demiyor. Şu elde avuçtaki işlerimi bitireyim C ile ilgili yaptığım çalışmaları arttırayım. Bakalım daha protonun kaçtane kirli çamaşırları çıkacak ortaya

ErsinErce

Bahsettiğin şeyler bug değil programlama yaparken dikkat etmen gereken durumlardır,
Dim x[8] diye ifade edip sonra x[8] e veri yüklemeye çalışmak bütün programlama dillerinin mantığına aykırı, x[0]-x[7] arası 8 registera sahip olursun
kesmede  status, W vb registerların içini değişiyorken giriş ve çıkışlarda gerekli önlemleri almıyorsan ve ya
ana program içinde zamanın önemli olduğu konularda kesmenin gelmesini engellemiyorsan, bunlar senin yani programcı hatalarıdır

5 sene civarı Lisanslı Proton kullandım, zamanın kritik olduğu birden çok kesmenin içiçe geldiği durumlarda da çalıştım,
derleyicinin yapısı tanıman ve ona göre hareket etmen çok önemli hangi dil olursa olsun

Ayrıca lisanslı kullanıcı değilsen şikayet etme hakkın hiç yok  ;)

ete

Dizi değişkenlerindeki tanımlama bir hata değil doğrudur. Dizi değişkeni tanımlanırken kaça adetlik dizi oluşturacaksanız o rakamı dizi değişkeni tanımlama kısmın ayazarsınız. X[8] şeklindeki tanımlama sizin 8 adet dizi değişkeni tanımladığınızı gösterir. Ancak değişkenler 0-7 arasında sıfır dahil toplam 8 adettir. Bu durumda index değişkeni olarak kullanabileceğiniz en büyük rakam 7 olacaktır 8 değil. Karışıklık buradan kaynaklanıyor sanırım.

Ete

edit : ErsinEce ile aynı anda yazmışız benzer açıklamadır.
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

#5
Hocam PBPde öyle bir sorun olmuyor ama
Dediğiniz gibi 8 adetlik bir dizi değişkenimiz olsun
Programın başında Dım X[7] as Byte adında bir değişken tanımlarsan X[0], X[1], X[2], X[3], X[4], X[5], X[6], X[7] şekinde 8 adet diziye sahib oluruz. PicBasicde Bunların 8 ini birden kullanabiliyorum ama protonda yukarıdaki gibi bir dizi tanımlayıp 8. diziye yani X[7] ye değer yükeleyemiyorum. Yükleyebilmem için 9 dizilik bir değişken tanımlamam gerekiyor. Bundan bahsetmiştim.
  Çoğu tecrübe zamanla kazanılıyor