Merhabalar, pic mikrodenetleyiciler ile ilgili çok tuhaf sorunlarla karşılaştım ancak böylesini ilk defa görüyorum .
Bir değişkenim var unsigned int a; şeklinde deklare edildiğinde işlemci 128 MHz hıza çıkıyor. unsigned char a; yaptığımda 64 MHz. Zamanlamayı start delay den anlıyorum tam iki katı oynama var. Söz konusu değişken kesme de kullandığım bir sayaç bu hataya sebep olması mümkün değil. PLL aktif. Dahili 16 MHz osilatör x 4 = 64 MHz de çalışıyorum.
Birşey daha farkettim a= b; şeklinde atama yaptığım bir satır var timer1 kesmesi altında. o satırı yoruma çevirince hız 64MHz , yorumu kaldırınca 128 MHz bu nasıl mümkün olur???
Bazi extrem drumlarda compilerlar hatali
Kod uretebiliyorlar, bir nevi bug. Ccs nin eski bir versiyonunda bina benzer bir bug vardi ve beni cok ugrastirmisti. Yeni versiyonla ayni kodu derledigimde hic hatasiz calismisti. Anliyorsan compilerin urettigi list obj gibi ara dosyalari kiyasla, ne oluyor belki cozebilirsin
çözdüm! ama compiler hatası mı yoksa pic mikrodenetleyiciler için mimari bir hata / benden kaynaklanan bilgisizlik mi bilemiyorum. şimdi kesme içerisinde;
if(xxxbits.TMR1IF)
{
...
xxxbits.TMR1IF = 0;
}
yukarıdaki şekilde kesme altında kontrol ettiğim timer1 bayrağı için yazdığım if bloğunda ... bölgesinde fazladan 1 satır kod yazsam ( kodun ne yaptığı pek önemli değil) pic sapıtıyor. Hem de öyle bir sapıtma ki çalışma frekansı 2 katına çıkıyor (128 MHz). Sildiğimde düzeliyor. Bu durumda sorun kesme fonksiyonunun bellekteki uzunluğundan kaynaklanıyor gibiydi. Denemek için kesmeyi pic in HighPriorityInterrupt adresinden asm koduyla farklı bir adrese dallandırdım (örnek kod veremiyorum). Sorun çözüldü. Yani kesme alt programının uzunluğu ya da global alanda tanımladığım herhangi bir değişkenin boyutu (char:8bit unigned char: 16bit) pic in çalışmasını etkiledi. Mantık yürütebileceğim bir tepki verseydi sorun daha kolay çözülebilirdi ama neden tepkisi osilatör frekansının artması olduğuna dair hiçbir fikrim yok. Neyse ki sonuç olarak sorunu hallettim ama böyle sorunlar beni tedirgin ediyor. Yani ne algoritma hatası ne de matematiksel bir hata. Sebep - tepki - çözüm hepsi sanıyorum ki tamamen pic mimarisi ile alakalı. Belki de c18 compiler lite ile ilgilidir. microchip e yazmayı düşünüyorum daha önce benzer bir problem yaşayan oldu mu?