code crosses boundary @ 800h hatası

Başlatan greatgonzo, 08 Temmuz 2012, 04:04:56

greatgonzo

Bu hatanın bellek dolmak üzere yada onun gibi bir uyarı olduğunu biliyorum. İlginç olan çalışan ve 1300 -1500 word uzunluğunda olan programın hiç bir ekleme olmadan ki bazı kod bloklarını çıkarttığım halde ısrarla bu hatayı vermesi ve 2500 wordlara durup dururken sıçraması oldu. Yazdığım bir iki ufak programın isis simülasyonunda saçmalaması ile başladı. Bazı pinleri gri olarak işaretliyordu ve yazılım hiç çalışmıyordu. Hatta 16F88 hep oscon not modelling gibi zararsız bir hata veriyordu. O hatada kayboldu.  Yani ona ait sigorta ayarlarını işlemiyor. Acaba neden kaynaklanıyor bilen varmıdır?

İyi çalışmalar...

ete

"Code Crosses boundary @ xxxx " bir hata değil bir ikazdır. Kullanıcıyı ikaz etmek için verilir.
Önce ikazın sebebini açıklayayım.
Pic işlemcisinin program hafızası bloklar halinde çalışıyor. Bunu şöyle farzedebilirsiniz.
Sanki birden fazla hafıza entegresi var her biri 2048 byte alıyor. Biri bitince işlemci otomatikman diğerine geçiyor böylece 8192 byte lık hafızayı kullanıyor. Her 2048 lik bölüm aşıldığında ise derleyici ikaz veriyor. Birinci bloku aştın, ikinci bloku aştın diye.
Peki neden önemli bu ikaz, şayet bir programda iki blok kullanıyor isen ve bazı bilgilerin 1 blokta yer alıyor ve sen oradan ikinci blokta iken bilgi okumaya kalkarsan 2 ci blokta'kileri okursun. Doğru okuma yapmak için önce 1. bloka geçmeli ve sonra bilgiyi okumalısın.
Aslında BAsic derleyicisi bunu otomatik yapmaktadır. Bu konuyu daha ziyaede asm de program yazanlar düşünmelidir.
Ancak Basic de de tedbir alınması gereken bazı durumlar var elbette. Bunların başında BRANCH (dallanma komutu) komutunu kullanırken dikkat etmek gerekiyor. Zira bu komut koşula bağlı dallanma yapar. Ancak pekde kullanılan bir komut değildir.
Siz en iyisi bu ikaza kulak asmayın.
İsterseniz ikazı kapatabilirsiniz. View menüsünde Editor Options seçeneğini seçin açılan pencerede Genral butonuna tıklayın,
gelen pencerede en altta yer alan kutucuğa (Disable Code Cross Boundary ASM varning) tıklayarak seçili hale getirin.
Bu kadar.
Ete


greatgonzo

Evet o kısımla ilgili problem yok hocam. İlginç olan küçük bir led yak sondur programı yazım. O dahi çalışmadı. Eminimki mcs de bir hata var. Hatta isis simülasyonunda o devrede çoğu pini gri olarak işaretledi. Zannedersem isis ilgili pinleri tanımsız görüyor. Hocam siz bayağı vakit harcıyorsunuz basic ile acaba bu tarz bir sorun yaşadınız mı?

İyi çalışmalar...

ete

Programı koy da bakalım. Bu tarz hatalara bazen bende takılıyorum ama sorun hep benden kaynaklanıyor. Mutlaka Tris ayarlarında sorun vardır. Yada başka bir sorun olması muhtemel. Programı görmeyince bir şey diyemeyeceğim.

Ete

greatgonzo

    Hocam kesinlikle yazdığım programla  ilgisi yok oscon not modelled hatasını bile isis vermeyince iyice şüphelenmiştim. Sistemimle ilgili olabilir diye düşünüyorum. Çünkü hiç bir ayarlada oynadığımıda hatırlamıyorum ki tembellikten çalışan şeyi asla tamir etmem :-) Daha öncede asm derleyici ile ilgili problem vermişti durduk yere formatla halletmiştim. Bu seferde biraz daha basit bir çözümle hallettim. PBP ve MCS yi kaldırdım. Programa ait tüm klasörleri sildim ve bir bakım programı ile tüm registeryi temizledim. Temiz kurulum yapınca halloldu. En azında daha evvel 2500 word ile crosses boundary hatası yok ve aynı program 1350 word gibi görünüyor. Sorun tamamen çözüldü ki PBP nin bu tarz sorunlardaki en temiz çözümü bu herhalde.

     Bir de hocam affınıza sığınarak yeri gelmişken şunuda danışmak isterim size. 16F88 mcu hafızası 7kb fakat kullandığım programlayıcı bremer mi öyle bir şey. İşlemciyi tanımlayınca hafıza olarak 4kb görüyor. Gerçi hiç o kadar yuklemedim ama bilgisayarda kullandığımız kb hesabından biraz farklı herhalde. Ayrıca daha evvel boundary hatasını @1000 olarak aldım ki onda hakikatten yazılımı abartmıştım. Hex dosyasının boyutu 15 kb ı bulmuştu. Peki bu 15 kb dosya nasıl sığacak 7 kb alana :-)  Nettede pekte sağlıklı görünmeyen bir kaç tartışmada da bu tarz hex dosyalarını daha küçük hacimli pic lere yazdıklarını söylediklerine şahit oldum. Bunun arkasında yatan gerçek nedir acaba. Bizi aydınlatırsanız çok mutlu oluruz hocam.

İyi çalışmalar....

ete

İslemci hafızaları word cinsinden tanımlanması gerekir. Sebebide programlarinmbyte degil word olarak hesaplanmasıdır. Bu hesap işlemci komutlarının (asm) 14 bit olmasindan kaynaklanır.
Bu nedenle F88 hafızası 7 kb değil  4096 word şeklinde açıklanmalıdır.
Dosya standart boyutu kb cinsinden verilebilir. Ama dosya yerlesimi word cinsindendir.
Bu tur seylere cok kafayı takmamak gerekir. Herkes gorevini yapip kim kime uyuyor belirliyorlar zaten..senin yapman gereken programı derlediğin zaman kac word tuttuguna bakmak. Hatta bakmanda gerekmiyor zira derleyici sığmıyor diye mesajda veriyor. Buyuk boyutlu program kucuk hafızalı islemciye yazılamaz en azından ben oyle biliyorum.
Ete

unal30

FATTAL ERROR:Out of Memory.
Hatasını düzeltmek için ne yapmalıyım.

greatgonzo

"ÖLÜMCÜL HATA:Bellek doldu" gibi bir anlamı var. Boundary lerden sonra aldıysan hele kesinlikle yazdığın program belleğe sığmıyor demektir. Hangi pici kullandığını bilmiyorum ama 16f628 falan kullanıyorsan 16f88 e atlayabilirsin. Aynı bacak yapısında daha büyük hafıza.628 kullanmadım ama 2 kb gibi birsey olacak. 88 de 7kb ki 2 kattan daha büyük ayrıca daha özellikli bir pic. Kısaca en kolayı daha büyük bir program hafızasına sahip bir pic kullanmak. Hatta 18 serilerinde 32 Kb a kadar hafıza bulunabiliyor.

Daha farklı bir alternatifte hafıza entegresi kullanmak. Muhtelif protokollerle (ETE hocanın harici eeprom uygulaması dersine göz atmanı tavsiye ederim.) bağlantı kurup veri alabiliyorsun fakat tahminime göre program verisi almak bir hayli tecrübe gerektirir.

İyi çalışmalar...

Powered by EzPortal