Uyarı Mesajı

Başlatan ahmet5454, 08 Şubat 2023, 21:48:07

ahmet5454

Selamlar
Microcode studio programı   
crossing page boundary-ensure page bits are set

Türkçe çevirisi
Geçiş sayfası sınırı-sayfa bitlerinin ayarlandığından emin olun

uyarısı veriyor programın  çalışmasında bir sorun yok fakat programı daha devam ettirmem gerekiyor acaba sorun olur mu ne yapmalıyım?

alisumer

#1
program hafızasında sayfa aşımı oluyordur aynı ram bölgelerindeki "bank" lar gibi program belleği de sayfalara ayrılmış işlemci belleğinin miktarına göre adresler değiştiği için kullandığın işlemcinin bilgi sayfasında "PROGRAM MEMORY MAP" diye ara. hata vermez derken aynı ram bölgesinde ikinci banka geçip bsf porta,0 yaptığında port a da bir değişiklik olmayıp 2. bankta aynı satırda olan tris a ya 1 yazacağın gibi bir hata olur,hatta ana kodun üstüne yanlışlıkla yazıp bozarsın ilk sayfadan ikinci sayfaya dallanma yaptığında program adresi karşılığı pcl ve pch yüklenir o da benim kullandığım işlemcide 13 bit yani max 0x800 yani 2048 byte ama program hafızası 4096 byte 13 bit adreslemeye yetmediği için sayfa yapısı oluşturulmuş sayfa değişip devam edebilelim diye.
pagesel "lebel adı" komutu bunun için var dallanmadan önce sayfa değiştirmen gerekiyor ayrı sayfalarda çalışıyorsan dene
Hep meraktan

ete

Amatörün anlayacağı şekilde anlatayım. İşlemcilerde program hafızası hafızanın büyüklüğüne göre birden fazla bank lardan oluşur. Her bir bank'ı ayrı bir hafıa entegresi gibi düşünün. Elinizde diyelimki 4 entegreden oluşan bir hafıza bloğu var ve siz rastgele bu hafızalara yazıyorsunuz. Her bir entegrenin adres haritası 0-255 olursa 3 nolu entegreye yine 0-255 adres vererek ulaşamazsınız. Ulaşılması için önce o 3 nolu entegrenin set (aktif) edilmesi ardından adres verilerek ulaşılması gerekir.
İşte bu örnektekine benzer şekilde işlemciye program yazılırken bloklar arası atlama olduğunda derleyici sizi uyarıyor. Sayfa bitlerine dikkat edin diye.

Bu uyarıların senin açından ne gibi önemi var onuda açıklayayım.
Öncelikle hemen belirteyim Basic derleyicisi bloklar arası geçiş işlemini otomatik kendisi yapıyor.
Bu uyarılar büyük ölçüde ASM de program yazanlar için önem taşıyor. Çünki ASM de bu işi kendin yapman gerekiyor. Bazı basic komutları dışında her şey otomatik basic derleyicisi tarafından ayarlanmaktadır. Ancak ve ancak bir bank'a sığmayacak kadar çok fazla değişken kullanırsanız işlemci bunların bir kısmını bir başka bank'a yazabilir. Ama bildiğim kadarı ile buralarıda kendisi ayarlayabiliyor. Yanlzıca çok fazla hafıza gerektiren 16 bit çalışan bazı lookup komutlarının banklar arası geçişde dikkat edilmesi gerektiğini hatırlıyorum. Çünki kullanım klavuzunda bu konuya hiç değinilmemiş. Bir ara merak edip internette epeyce eşelendikten sonra bu bilgilere ulaşabilmiştim. Ben fazla dikkate almıyorum bu ikazları bir sorun olursa alırım mantığını yürütüyorum ve şimdiye kadar bir sorun yaşamadım. 16F876 gibi kısıtlı hafızası olan işlemcilerde program hafızası kısa sürede dolabiliyor ve bir değil bir kaç cross boundary ikazı da çıkabiliyor. Bu ikazın verilmemesi için komut da var üstelik.
Program başına aşağıdakileri yerleştirirsen bu ikazı almazsın.
#header
  errorlevel -306  ; Crossing page boundry
#ENDHEADER

Ete
 

ahmet5454

Çok çok teşekkürler ali sümer ve ete hocam çok sağolun varolun 🖐

alisumer

burada nasıl ve neden kullanılacağı kısa ve anlaşılır anlatılmış ben bir daha üstünden geçeyim örneğin program başlangıcınız org 0  adresinden başladı ve 100 adresine kadar yazdınız ardından bir başka sayfada örneğin org 0x800 diyerek ayrı bir program çalıştırabilirsiniz hatta yeni nesil bazı işlemcilerde reset ve kesme adresleri bile ayrı sayfalar için ayrı ayrı  var hem uzun kodlarda sayfa değişmeden kesme yapabilmeniz hemde iki ayrı  programı aynı çipte programlayabilmeniz için vb gibi.
Hep meraktan

Powered by EzPortal