for döngü hatası (yardım ederseniz çook sevinirim)

Başlatan fatihyigit85, 19 Kasım 2014, 00:41:31

fatihyigit85

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



Gökhan BEKEN

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.
Özel mesaj okumuyorum, lütfen göndermeyin.

RaMu

Çı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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mir_as82

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++)

RaMu

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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

kralsam

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.

fatihyigit85

#6
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..






RaMu

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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

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.
Gökçe Tağlıoğlu

RaMu

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ı

neyse buna konu açsam iyi olur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

kayatech

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.

RaMu

@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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

kayatech

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.



RaMu

WDT yi açarsan, zaten amacı senin bahsettiğin gibi davranması.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fatihyigit85

EVET ARKADAŞLAR DEDİĞİNİZ DOĞRU..WDT KAPATTIM SIKINTI YOK..HEPİNİZE TEŞEKKÜR EDERİM

#pragma config WDTE = OFF