Proton hatası

Başlatan ACM, 23 Şubat 2023, 22:20:59

ACM

Arkadaşlar merhaba. Protonda bir hata alıyorum ve çözemedim birtürlü.

Hata veren kodlar

If SevArt>14 Then
  SevArt=0
     If Seviye < Seviye2 Then        
        If Seviye < Seviye2 - (FareW * 30) Then   
          BekLE1=BekLE1 - 300
        ElseIf Seviye < Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 - 200
        ElseIf Seviye < Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 - 100
        EndIf
     EndIf
  
     If Seviye > Seviye2 Then
        If Seviye > Seviye2 - (FareW * 30) Then
          BekLE1=BekLE1 + 300       
        ElseIf Seviye > Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 + 200       
        ElseIf Seviye > Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 + 100            
        EndIf
     EndIf
EndIf

Eğer kodların 2 satırını kapatırsam hata düzeliyor ve resimdeki değerleri veriyor


If SevArt>14 Then
  SevArt=0
     If Seviye < Seviye2 Then        
        If Seviye < Seviye2 - (FareW * 30) Then   
          BekLE1=BekLE1 - 300
        'ElseIf Seviye < Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 - 200
        'ElseIf Seviye < Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 - 100
        EndIf
     EndIf
  
     If Seviye > Seviye2 Then
        If Seviye > Seviye2 - (FareW * 30) Then
          BekLE1=BekLE1 + 300       
        ElseIf Seviye > Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 + 200       
        ElseIf Seviye > Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 + 100            
        EndIf
     EndIf
EndIf

Verdiği hata ise
ERROR : 'Too many System variables. 96 avalable. 99 used."

Hatada çok fazla sistem değişkeni diyor ama alakasız gibi çünki değişken ataması yokki

İşlemcim 18F46K80




ACM

Eğer elseif satırlarını if ile değiştirirsemde düzeliyor

If SevArt>14 Then
  SevArt=0
     If Seviye < Seviye2 Then        
        If Seviye < Seviye2 - (FareW * 30) Then   
          BekLE1=BekLE1 - 300
        EndIf
        If Seviye < Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 - 200
        EndIf
        If Seviye < Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 - 100
        EndIf
     EndIf
  
     If Seviye > Seviye2 Then
        If Seviye > Seviye2 - (FareW * 30) Then
          BekLE1=BekLE1 + 300       
        ElseIf Seviye > Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 + 200       
        ElseIf Seviye > Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 + 100            
        EndIf
     EndIf
EndIf

power20

#2
Burada sistem değişkeni olarak derleyicinin kendi kullandığı bas dosyada görünmeyenler olabilir. Stack limitine takılmış olabilir

ilyas KAYA

#3
İç içe if sayısı limiti vardır. If leri ayırmayı deneyin.
Yada SELECT CASE fonksiyonunu kullanın

ACM

#4
Alıntı yapılan: COM1 - 23 Şubat 2023, 22:52:06Burada sistem değişkeni olarak derleyicinin kendi kullandığı bas dosyada görünmeyenler olabilir. Stack limitine takılmış olabilir
Bu durumların bir çözümü varmı ?


Alıntı yapılan: ilyas KAYA - 23 Şubat 2023, 23:23:59İç içe if sayısı limiti vardır. If leri ayırmayı deneyin.
Yada SELECT CASE fonksiyonunu kullanın

İf satırlarını değilde Elseif satırlarını if ile değiştirirsem düzeliyor İlyas hocam , son verdiğim kodlarda if ile değiştirdiğim kodlar var , çalışıyor onlar.

Select case yi deneyeceğim

yas

#5
Bu bir hata değil uyarıdır. Derleyici derlemeyi tamamlıyor. Fakat iç içe çok fazla dallanma olduğu zaman bunun için ayrılan ram alanları farklı ram banklarına taştığında bu uyarı oluşuyor. Farklı yöntemlerle düzeltme imkanı var. Bunlardan bir tanesi rama kullanılmayacak değişkenler atayarak ofset verilmesi. İkinci yöntem karşılaştırmalarda gereksiz değerlendirmeler kullanılmaktan kaçınılması. Mesela (FareW * 10) gibi işlemleri if karşılaştırması içinde kullanmak yerine bir değişkene alıp o değişkeni karşılaştımaya sokmak gibi. Yada güzel bir prosedür kullanarak hem ram den hem kod alanından tasarruf sağlayıp hemde kodun daha şık görünmesi sağlanabilir.

ACM

#6
Yas hocam , program ERROR veriyor ve derleme yapmıyor , verdiği hatayı yazmıştım yukarda.

Hata veren satır haricindeki tüm kodları silip yalnızca hatalı kodu kullandığımda  hata vermiyor. Hatta kod içerisinde fazladan 3 if koşulu daha ekliyorum yine normal

If SevArt>14 Then
  SevArt=0
     If Seviye < Seviye2 Then        
        If Seviye < Seviye2 - (FareW * 30) Then
            If BekLE1<1000 Then
                 If Seviye>100 Then
                     If Seviye2 < 300 Then
                         BekLE1=BekLE1 - 300
                      EndIf
                  EndIf
            EndIf                      
        ElseIf Seviye < Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 - 200
        ElseIf Seviye < Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 - 100
        EndIf
     EndIf
  
     If Seviye > Seviye2 Then
        If Seviye > Seviye2 - (FareW * 30) Then
          BekLE1=BekLE1 + 300       
        ElseIf Seviye > Seviye2 - (FareW * 20) Then
          BekLE1=BekLE1 + 200       
        ElseIf Seviye > Seviye2 - (FareW * 10) Then
          BekLE1=BekLE1 + 100            
        EndIf
     EndIf
EndIf

Yine enteresan birşey , hatalı kodları kopyalayıp bir üst satıra yapıştır , çalıştır hata var , üst satırı sil ama alttaki kalsın hata gidiyor.

Daha öncede yaşadım benzer hatayı , birşekilde çözüyorum ama uzun yoldan yada fazla kodlarla. Nedeni nedir ve basit bir çözümü var ise uğraşmayalım diye açtım konuyu.


Hattusa

optimiser level işe yaramıyor mu
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

ACM

Alıntı yapılan: Hattusa - 25 Şubat 2023, 12:10:39optimiser level işe yaramıyor mu

Hatayı bulmak için öncederleme yapması lazım , derleme yapmıyorki hiç.

Elseif leri kaldırıp iflerle yoluma devam edeceğim.

Hattusa

Alıntı yapılan: ACM - 25 Şubat 2023, 17:30:27Hatayı bulmak için öncederleme yapması lazım , derleme yapmıyorki hiç.

Elseif leri kaldırıp iflerle yoluma devam edeceğim.

if ler çok iç içe girmiş ya iflerin içine proc ler eklesen anlamlı olurdu
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

yas

Hangi versiyonu kullanıyorsunuz?

ACM

Yas hocam IDE 2.0.1.2 , Compiler 3.5.5.3

Hattusa hocam if leri örnek olsun diye çoğalttım , normalde o kadar iç içe if yok. İç içe if olmasından hata vermiyor , elseif lerden dolayı veriyor. bunu göstermek amaçlı öylesine yazdığım kod onlar.

Hattusa

aslında 5 yıldır proton kullanmıyorum C bana daha kolay geldi. ama eski projelerde ve kullanmam gereke yerlerde mecburen kullanıyorum.
kullandığım versiyon ise şu şekilde

vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

ACM

Alıntı yapılan: Hattusa - 25 Şubat 2023, 20:53:44aslında 5 yıldır proton kullanmıyorum C bana daha kolay geldi. ama eski projelerde ve kullanmam gereke yerlerde mecburen kullanıyorum.
kullandığım versiyon ise şu şekilde


Benim sürüm çalışmıyor Win10 ile XP ile çalıştırıyorum mecburiyetten , bir XP , bir Win10 değiştiriyoruz. Sizin sürüm yüksekmiş , çalışıyormu Win10 ile ?

Hattusa

win 10 ile sıkıntısız çalıştırıyorum, acaba yazdığınız kod ile alakalı bir sorun olabilir mi?
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>