Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Konuyu başlatan: fatihyigit85 - 19 Kasım 2014, 00:41:31

Başlık: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: fatihyigit85 - 19 Kasım 2014, 00:41:31
merhaba arkadaşlar xc8 1,32 pro versiyonu kullanmaya başladım ..aşağıda for sonsuz döngüye giriyor ve çıkamıyor..hatam nedir sizce..şimdiden teşekkürler

(http://s16.postimg.cc/vefruf17l/image.jpg) (http://postimg.cc/image/vefruf17l/)
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: Gökhan BEKEN - 19 Kasım 2014, 01:43:28
for'dan sonra bir sonsuz while koyun bakalım ne olacak.
Ayrıca başka şekillerle denediniz mi? mesela <1 yerine <2 felan deneyin, for'daki b değişkenini for'un içinde değil, for'dan önce deneyin. Yeni versiyonun bir bug'ı olabilir.
Daha önceki sürümlerde programın bir yerinde iki kere üst üste sonsuz while koyduğum zaman derleme yaparken mplabx çöküyordu, işlemci 100%'lere yaklaşıyordu.

Ayrıca isis'temi denediniz, gerçek devrede mi?
Hangi PIC ile deniyorsunuz?

Ayrıca böyle bir şeyi neden denediniz ki? Burda for ile yapılacak bir iş yok, zaten 1 kere çalışması gerekiyor normalde.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 02:09:36
Çıkıyorda çıktığını nereden anlayacaksın,
çıkıp tekrar for döngüsüne giriyor,
çıktıktan sonra yapacağı birşey, gidebileceği başka biryer yok.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: mir_as82 - 19 Kasım 2014, 07:51:18
meftun hocamın dediğini yapar mısınız.
main in hemen altına int b ; deyin
for içini ise
for(b = 0; b < 1; b++)
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 08:20:46
Ben denedim,
main içinde int b; şeklinde tanımladığımdada,
main içinde tanımlamayıp
for(int b = 0; b < 1; b++)
şeklinde for içinde b yi tanımladığımdada
derleme işlemini problemsiz yaptı Mplabx.
Ama çalışırken bir sıkıntı çıkarıyor mu diye bakmadım,
aslında bakmak lazım, hatta asm çıktılarınada bakmak lazım.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: kralsam - 19 Kasım 2014, 08:46:16
Alıntı yapılan: RaMu - 19 Kasım 2014, 02:09:36
Çıkıyorda çıktığını nereden anlayacaksın,
çıkıp tekrar for döngüsüne giriyor,
çıktıktan sonra yapacağı birşey, gidebileceği başka biryer yok.
Hocam normal olanı for bittiğinde programın durması değilmi? Komut kalmadığından hiç birşey yapmadan durması lazım. Yada WDT yada benzeri bir interrupt resetliyor olabilir.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: fatihyigit85 - 19 Kasım 2014, 09:02:27
Arkadaşlar..değerli cevaplarınız için çok teşekkür ediyorum...

Pic in sürekli kendi içerisinde döngü yaptığını bilmiyordum..





Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 09:09:57
Aslında bir debug yapıp bakmak lazım,
ama benim başıboş bıraktığım programlar genelde
mclr reset atmışız gibi programın başına dönüyor,
bunun hakkında birkaç fikrim var ama deneyip evet şundan ötürü böyle oluyor
diyebilecek kadar kesin olmadığından saçmalamak istemiyorum.

Kısaca programı hiçbirzaman başıboş bırakmayacaksın,
for bittiğinde programın kendiliğinden durması mümkün değil,
o yüzden main döngüsünün hemen altına while(TRUE) gibi bir sonsuz döngü yazıyoruz,
bütün işimizi burada yapıyoruz,
buradaki program yazılırkende
for döngüsü bir while(1) içene yazılmalıydı,
eğer for dan sonra hiçbirşey işlenmesin isteniyorsa
@meftun un da söylediği gibi bir
while(1);
hemen for un sonuna eklenmeliydi.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: Tagli - 19 Kasım 2014, 09:22:01
Normalde PIC, işleyeceği komutun ne olduğuna bakmaz, sıradan devam eder program belleğinin sonuna kadar. Durma diye bir durum olmaz. Sonuna gelince de 0'dan devam eder yeniden.

Bildiğim kadarıyla XC8, main sonlandığında programı başa sarıyor. Bir çeşit yazılımsal reset gibi yani.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 10:13:59
Bende asm sine baktım başa sarıyor gibi,
birde debug yapayım dedim ama
ben,m ide derleyicide mi sorun var
debug yaparken hangi satırda olduğunu göstermiyor,
yukarıdaki program için debugda PC adresini takip ediyorum bir döngüye girmiş gözüküyor,
debug simulator ı çalıştıramadım doğru düzgün
şu fotodaki gibi debug olan satır yeşillenmeli bende olmadı
(http://microchip.wdfiles.com/local--files/tls0101:lab2/GreenLineAtMain.png)
neyse buna konu açsam iyi olur.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: kayatech - 19 Kasım 2014, 11:52:16
Benim bildiğim sonsuz döngüye giren ve herhangi bir bekleme yapmayan pic kendi kendini resetliyor çünkü WDT devreye giriyor.
Çok kez denediğimde de aynı sorun olmuştu.


geri:

goto geri

böyle bir komut icra ederseniz pic resetliyor.

Ancak

geri:

delay_ms(50);

goto geri

yaptığımızda herhangi bir resetleme yapmıyor.

for döngüsü aradan çıkartıldığında zaten main döngüsünde dönmeye başlıyor. Hiç bir komut icra edilmediği için de WDT resetliyor büyük ihtimal.

Döngü içerisine 50ms lik bir bekleme verip tekrar deneyin isterseniz.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 12:25:44
@kayatech
Öyle bir problem yok,
sıkıntı başka birşeyden kaynaklanıyordur.
Bir ihtimal kullandığın bekleme fonksiyonu
wdt yi kullanarak bekleme yapıyordur,
sende
geri:   "arasına delay_ms(50)"  goto geri    ;
yazdığında
geri:    clrwdt;                           goto geri    ;
yazmış oluyorsun,
hata aldığın programda wdt yi kapatıp denesen
veya bu tür program paylaşırsan inceleyebiliriz,
problem bambaşka birşeydende kaynaklanıyor olabilir.

Ben birçok programda sonsuz döngü kullandım, problem yaşamadım.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: kayatech - 19 Kasım 2014, 15:12:16
WDT yi kapatınca zaten düzeliyor. Ama ben açık tutmayı tercih ediyorum.
Yapmam gereken zaten sadece ana döngüde küçük bir bekleme vermek :)

Denemekte fayda. Arkadaş dener ise belki çözüm olur diye söyledim.


Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 15:23:04
WDT yi açarsan, zaten amacı senin bahsettiğin gibi davranması.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: fatihyigit85 - 19 Kasım 2014, 16:04:06
EVET ARKADAŞLAR DEDİĞİNİZ DOĞRU..WDT KAPATTIM SIKINTI YOK..HEPİNİZE TEŞEKKÜR EDERİM

#pragma config WDTE = OFF 
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: Gökhan BEKEN - 19 Kasım 2014, 16:06:41
Zaten kapalıydı sizin kodda, resimden onu gördüm. O yüzden hiç girmedim WDT olayına.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: fatihyigit85 - 19 Kasım 2014, 16:40:48
doğru soyledin meftun kardeş..kodu oraya sonradan ekledim. hakkını helal et
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: RaMu - 19 Kasım 2014, 16:42:21
Sorun yok dediğin kodu birebir kopyalayıp
buraya [*code]  arasına [*/code] *yıldızlar olmadan yapıştır
bakalım ne değişiklik yapmışsın.

@Meftun un dediği gibi gönderdiğin ilk fotoda zaten WDT kapalı.
Başlık: Ynt: for döngü hatası (yardım ederseniz çook sevinirim)
Gönderen: Gökhan BEKEN - 19 Kasım 2014, 19:37:03
Alıntı yapılan: fatihyigit85 - 19 Kasım 2014, 16:40:48
doğru soyledin meftun kardeş..kodu oraya sonradan ekledim. hakkını helal et
Sorun yok, hocam. Kolay gelsin.