Değişkenin değeri kendiliğinden, tanımlandığı anda ilk verilen haline dönüyor.

Başlatan picmanya, 20 Haziran 2024, 15:09:24

picmanya

Global olarak tanımlanan bir değişkenin değerini, çalışma anında değiştiridiğimde, bir süre bu yeni verdiğim değeriyle çalışıyor,
sonrada hiç bir sebep yokken, kendiliğinden eski ilk tanımlandığı halindeki değerine geri dönüyor.
Saçma bir sorun kabul ediyorum ama durum aynen böyle, sıkıntı nereden kaynaklanıyor olabilir.

power20


picmanya

Evet koddan kaynaklıymış.

if bloğunu break; komutu ile kırmaya çalışmışım. Sıkıntıda tam bundan çıkmış. if döngü değilki break; ile kırılabilsin.
Derleyicinin bu konuda hata vermesi gerekirken vermedi, tamam bunu anlarım. Dikkat etmem gerekirdi.

Peki bu sorun nasıl değişken değerini ilk tanımlandığı halindeki değerine geri döndürebiliyor.
Açıklayabilecek varmı?

power20

Global değişken  volatile olarak tanımlanmış mıdır? Aynı isimde başka bir değişken fonksiyon içinde varsa yanlışlıkla sizin beklediğiniz değer öbürüne ait olabilir mi? Goto vaziyetlerinden kaynaklı da olabilir tabi. Binlerce ihtimal var.


Epsilon

Alıntı yapılan: picmanya - 20 Haziran 2024, 16:03:57Peki bu sorun nasıl değişken değerini ilk tanımlandığı halindeki değerine geri döndürebiliyor.
Açıklayabilecek varmı?

Şimdi yazdığın kodun tanımlama kısmı bile  olsa "Kodu Ekle" deme gafletinde bile bulunamayacağımdan
Dur bakayim açıklayabilecekmiyim?
Acaba diyorum Global ve lokal değişken olarak tanımlanma farkından olabilirmi?
Gerçi sen onuda biliyorsundur kesin daha farklı bir durum vardır.
Neyse

alikeskinkilic

c break nasıl çalışıyor bilmem ama ya stack taşması yaşatıp reset attırıyorsun ya wdt ile reset attırıyorsun istemeden.eğer dediğin gibi if içerisinde kullanılmayacak bir komut ise en basit hali ile goto ile gittiğin yerden return ile dönmek gibi bir hata yapabilir arka planda.
Hep meraktan

picmanya

Alıntı yapılan: alikeskinkilic - 20 Haziran 2024, 16:23:39c break nasıl çalışıyor bilmem ama ya stack taşması yaşatıp reset attırıyorsun ya wdt ile reset attırıyorsun istemeden.eğer dediğin gibi if içerisinde kullanılmayacak bir komut ise en basit hali ile goto ile gittiğin yerden return ile dönmek gibi bir hata yapabilir arka planda.

Siz bildiniz gibi tebrikler.  İşlemci genel reset atıyor. İşlemci ilk elektrik verildiği haldeki gibi tekrardan çalışıyor. Bu stack taşması hatasımı oluyor.? Genel resete gidilmeden kurtarılma yöntemi olabiliyormuydu?

alikeskinkilic

stack taşması yaşıyorsa düzeltmenin tek yolu yanlış yazdığın kodu düzeltmek. varsayalım reseti engellesen ve program da donmasa ve çalışabilse bile stack kayıtçısında tutulan adresin bir karşılığının olmaması zamanla sel gibi büyüyen anlamsız verilere yol açar. WDT ile ilgili bir problem olduğunu sanmıyorum C kendi ayarlıyordur zamanlamayı ama eğer sorun o ise belki WDT yi kapatabilirsin. ama problem stack ve sebebini de biliyorsun sanırım. demişsin kullanmamam gereken bir komutu kullandım diye. üstelik break komutu anladığım kadarı ile bir yerden işlem bitmeden ayrılmayı yani return yada goto gibi bir dallanma kullanmak zorunda olması gerekliliği stack taşmasını işaret ediyor. tebrikler size asıl zaten bulmuştunuz sorununuzu.  ::ok
Hep meraktan

Epsilon

Eski DOS altında çalışan Basic programlarında ,Stack taşmasına GOSUB ile gittiği  altprogramın son satırında Return kullanmamaktan dolayıda oluyordu diye hatırlıyorum GOTO nun syntaxına da bakmak lazım

picmanya

Bendeki hataya açıklamalar;

Derleyici hatalı kod kullanımını yakalayamadı. Farklı derleyicide durum nasıl bakmadım. (birde sadece visual studioda bakabilirimdim.)
WDT ve Goto Label kısmı kesinlikle temize çıktı. Problem fonksiyonda geçmediğinden Return luk bir durum yok diyebilirim.

main() fonksiyonun return0; komutuda XC16 da kullanılsada oluyor kullanılmasada oluyor. Gördüğüm Farketmiyor. Zaten program sanıyorum bu return0; kısmına hiç gelemiyordur bile. Belki bir ihtiyaçdan dolayı main() fonksiyonunun tekrardan çalıştırılması gereken bir uygulama yapılmak istenirse, bu return ile farklı sayılar döndürülebiliyor olabilir. Bilen varsa anlatırsa bizde öğrenmiş oluruz. Kısaca ana main() fonksiyonunun return'u ne halta yarar.

ana while() döngüsü içinde kullandığım bir if bloğununun içinde,
bir if bloğu daha kullanarak bununla şart oluştuğunda break; komutunu kullanmaya kalkmışım.
çok acemice bir hata. kısaca break ile if bloğunu kırmaya çalıştım. sıkıntı burdan kaynaklandı.
sonucda işlemcinin ilk çalışma anındaki gibi reset yediğini tespit etmiş oldum.

hatayı bulup giderdim. sebep olduğu durumun nedenini henüz tam incelemedim. 2 durum olabileceğini öngörebiliyorum.

1-) break; il if bloğu kırılamadığından, en yakın bir üst döngü olan ana while() döngüsü kırıldı ve program tekrardan ilk açıldığı andaki gibi,
    main() fonksiyonu baştan tekrar işletdi.
2-) stack taşması-hatası denen şey oldu. ve bunun neticeside üstde anlattığım tarzda bir çalışma yapabiliyorsa onu yaptı.

ilyas KAYA

Muhtemelen stack sorunu.

Kodlarinizi chatgtp ye yapıştırıp sorunu ve neden kaynaklanıyor olduğunu sormayı denermisiniz.

Birde şunu yapın; sorunu bulduktan sonra kodu düzeltmesini ve sadelestirmesini daha kolay anlaşılır hale getirmesini isteyin.
Bakalim ne sonuçlar verecekler :)

picmanya

Herşeyi her yere yapıştırmamakda fayda olabilir...Gün gelir devran döner pişman olunabilir...

Yakında herhangibir programlama dilide öğrenmeyin, akıllı olduğunu sanan programa derdinizi anlatın yazıversin diyenler olabilecek.
Bu türden programları beslememekde daha fazla fayda olabilir. 3 kuruşluk fayda getirirken, 5 liralık zarar verecek bunlar.
Milligüvenlik problemi bile yapabilirler. Bedavadan reklamlarınıda bu ülkenin insanlarına yaptırıyorlar.
Böyle giderse ülkenin gizlisi saklısı mahremi kalmayacak. Bu ve birkaç farklı tarz uygulamalara yasak getirmek şart.

Dediğiniz yere yapıştırdık gitti sorunu buldu ve hemencecik hazırdan bana söyledi, hiç emek harcamadık diyelim.
Ben karlımı çıktım şimdi bu işten. Belki sadece ogünü kurtardık.

Çine pcb bastırıp uzak doğudan gelen kompanent kullanmaya benzemez bu iş.
Kafa ağrıtacağı günler uzak değildir bu türden yazılımların. Yasaklanmaları gündeme gelirse pek şaşırmam.

AYRICA NOT:
Sorunun nedenini forumdan yardım alıp, uğraşıp, bulan-tespit eden ve düzeltebilen birisi,
sizce sorunun neye sebep olduğunu bulamamışmıdır? Yada bulamaz mı?
Yada bulmasının faydası olmayacağını öngörüp bulmak istememişte olabilirmi? Basit bir insan hatasından kaynaklı sonuçda.
Veya önceliği bu değildir, gerekli notlarını alıp, biraz ileriye sarkıtmış olabilirmi?
Zaten neden olduğu 2 yer olabilir diye belirtmiştim.

windowsunu, aresini, derleyicisini, çipini kullandığım yetmiyor, birde ajan yazılımınımı kullanayım.

power20

google dan şüphelenmek lazım.  Telefonu wi-fi den yedekleme yapıyor. (iyilik)

picmanya

google ve watshap - sosyal medya uygulamaları ana beslenme kaynağı zaten.
İnsanlar elleriyle akıllı yaptı o programı. Ben prensip olarak akıllı telefonu cebime bile sokmuyor, elime bile almıyorum.
Bilgisayar kamerasını, mikrofonu kalın bantlada kapalı tutarım. Askerde S3 yazıcısıyken 2008 yılında bu tarz ajan uygulamaları duyar işitirdim.
Ozamanlar hikaye gibi gelirdi gülerdim.

ilyas KAYA

En iyisi kodları da kağıda yazıp derleyici de kullanmamak...
Derleyici yerine kodları hex i kağıda yazıp hex olarak chip e yüklemek. Böylece garanti olur.  :)