Merhaba Arkadaşlar,
M30624FGPFP işlemci kullanıyorum.
CONST alanı 131 Byte
FARCONST alanı 976 Byte
HUGECONST alanı 65189 Byte
NEARDATA alanı 18780 Byte
HUGECODE alanı 112551 Byte
Burada const tanımladığım sabit string dizileri 64KByte sınırını geçti ve programım belli bir fonksiyonu çalıştırdığı anda kilitlenme yapıyor.
XCL dosyasında ilgili const tanımlanan ifadeler aşağıdadır.
-D_USER_ROM_BEGIN=c0000
-D_USER_ROM_END=FBFFE
.
.
// =======================
// FAR/DATA20 ROM
// =======================
// Constant and initializer segments (in ROM)
-Z(FARCONST)FAR_ID=_USER_ROM_BEGIN-_USER_ROM_END
-Z(FARCONST)FAR_C
-Z(HUGECONST)DATA20_C,DATA20_ID,CHECKSUM
-Z(FARCONST)DATA16_ID,DATA13_ID,DIFUNCT
Fakat yeni bir segment tanımlayamıyorum.
Bu sorunun çözümünü bilen arkadaşlar yardımcı olursa memnun olacağım...
Sanırım IAR derleyici kullanıyorsunuz.
64K nin üzerinde hata olmasının nedeni blok geçişi.
Mitsubishi'de maksimum blok büyüklüğü 64K'dir.
Const tabloyu 64K'lik iki ayrı tablo olarak yapıp, kod ile gerektiğinde ikinci tabloyu kullanmak ilk aklıma gelen çözüm.
Tatlisukurnazi cevabın için teşekkür ederim.Programda kullandığım tablolar sayfalara dağılmış tablolar.Onun için bölme yapamıyorum.Blok olarak constlar için 64K'nın yanına 32K lık yeni bir const bloğu oluşturabilirmiyim.Eğer oluşturabiliyorsam Linker dosyasına bunu nasıl geçireceğim.?
herkese merhaba ,
Galiba bir yöntem geliştirdim.Dizi tanımlamarından önce ve sonrasına aşağıdaki kodu ekledim.
#pragma memory=constseg(MY_CONST)
char const deneme_dizisi[]="deneme123";
#pragma memory=default
XCL dosyasınada aşağıdaki eklemeyi yaptım..
-Z(FARCONST)CONST,CSTR,MY_CONST
Böylece tanımladığım dizi HUGECONST memory değilde FARCONST memoryde tanımlanmış oldu.