Error [1253] Hata Mesajı

Başlatan mesmert, 11 Ağustos 2009, 04:06:16

mesmert

Error   [1253] C:\deneme_main.c; 333. could not find space (97 bytes) for auto/param block

hitech c 9.60 pro kullanıyorum böyle bir hata kodu alıyorum mplab'ta altında C program yazıyorum. programdan herhangi bir bölgeyi silince düzeliyor problem nedir acaba kullandığımız kürektenmi acaba?

XX_CİHAN_XX

ram bellek yetmiyor yüksek adetli dizi mi açmaya çalışıyorsun ?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

mesmert

Alıntı yapılan: "FxDev"Pic dolmuş da olabilir...

Programmer hex editöründen bakınca çoğu yer boş görünüyor.

cihan hocam ram sorunu çözümü nedir acaba

XX_CİHAN_XX

Programını bu hata varken derleyemezsin dolayısıyla boş görünmesi normal. Kodlarını (en azından hatanın işaret ettiği kısmı) koyarsan mesele daha net anlaşılır.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Analyzer

Selam,

Bunun çözümü kodu optimize etmekten geçiyor. Kullanılmayan değişkenleri kaldırmak, yapılabiliyorsa çok değişken tanımlamak yerine aynı değişkenleri programın içinde farklı yerlerde kullanmak, mümkünse global değişkenleri kullanıldıkları fonksiyon/prosedür içine almak, ayrılan hafızayı işi bittikten sonra boşaltmak sayılabilir. Kodu iyileştirdikten sonra hala donanımsal olarak hedeften çok uzakta isek donanımı değiştirmek çözüm olabilir.

Analyzer
Üşeniyorum, öyleyse yarın!

mesmert

unsigned char RB0_INT=0;
unsigned char g_CCPR1L=0;

 


/**********************************************************/
//*******************************************************//


void main (void) // Ana program
{
//
unsigned char g_CCPR1L=0;


const unsigned char ekran[10]={	0b10111110,	//display karakter
								0b00000110,
								0b11011010,
								0b11001110,
								0b01100110,
								0b11101100,
								0b11111100,
								0b10000110,
								0b11111110,
								0b11101110
							};

            while (1){
            //normla rutinler

            }


}

void interrupt
	out(void)
	{	
	if(INTF==1){if(RB0_INT==1){CCPR1L=g_CCPR1L;INTF=0;INTEDG=1;RB0_INT=0;}}
	if(INTF==1){if(RB0_INT==0){CCPR1L=0;INTF=0;INTEDG=0;RB0_INT=1;}}		
	}


Programda burayı veya herhangi bir yeri silince hata mesajını veriyor. interrupt yazılımın en sonu koydum bu hata mesajı dikkatimi çeken yukardaki kısmı silince programa  istediğin kadar yazılım ilave et herhan bir problem olmuyor

arslan74

Merhaba,

ekran[] dizini global değişken yap.


Selamlar

serdararikan

ekran[] değişken değilki.  const yazmışsın kaldır onu oradan. eğer const yazarsan  program içinde bi yerlerde  sayi=ekran[5]; yazdın mesela 6.sıradaki binary değeri bir sayi değişkeninin içine derleme sırasında yazacak.derleme işleminden sonra senin oluşturduğun dizinin hiçbir anlamı yok yani programında.

arslan74

Alıntı yapılan: "serdararikan"ekran[] değişken değilki.  const yazmışsın kaldır onu oradan. eğer const yazarsan  program içinde bi yerlerde  sayi=ekran[5]; yazdın mesela 6.sıradaki binary değeri bir sayi değişkeninin içine derleme sırasında yazacak.derleme işleminden sonra senin oluşturduğun dizinin hiçbir anlamı yok yani programında.

Senin burada bir yanlışın var. Zira bu bir const değişkendir. Sadece okuma amaclı kullanılabilir, içinde yazma yapılamaz.

illa bir sabitle kullanma zorunluğu yok örneğin:

sayi = ekran[i];


gibi bir değişkenlede kullanılabilir. Ancak bu diziyi main içinde tanımlarsanız sadece main içinde kullabilirsiniz, başka fonksiyonlar onu kullanamaz. Ama global yaparsanız başka fonksiyonlardan onu kullanma sanşınız olabilir. Bu gibi sabit diziler ekrana bilgi iletmek için kullanılıyor.

Eğer derleyiciniz Pro sürüm değil ise gereceğinden fazla kod üretir. Ona dikkat edin.

mesmert

merhaba

arslan hocam sizin kullandığınız ve başarılı bulduğunuz versiyon hangisi

benim kullandığım 9.60 pro pl5

arslan74

Alıntı yapılan: "Allegro"Bazı versiyonlar çeşitli problemlerle çalışıyor.

Düzgün Çalışan Versiyonlar:
PIC16 için  PICC PRO_9.60PL4
PIC18 için  PICC18 PRO 9.63PL1  (Hayteç2 deki)
Güncel MPLAB için www.microchip.com/mplab


(Resim gizlendi görmek için tıklayın.)


MOD NOTU:
Bu başlıktaki gereksiz mesajlar silinecektir.
Hi-Tech in çalışan ve sağlam linkleri olan faydalı içerikli
mesajlar kalacaktır.

mesmert

başka arkadaşlar böyle bir problemle karşılaşırlar diye sorunun çözümünü aşağıya yazdım arkadaşlar.

const unsigned char ekran[10]={ 0b10111110,	//display karakter
								0b00000110,
								0b11011010,
								0b11001110,
								0b01100110,
								0b11101100,
								0b11111100,
								0b10000110,
								0b11111110,
								0b11101110
							};


unsigned char key=0;		//buton arkı gecikme kontrol registeri

unsigned char set_ok=0;
unsigned char g_PORTB=0;

unsigned char tus_durumu = 0;

void main (void) {	// Ana program

	ADCON1 = 0b10000100;
	TRISB = 0b00000001;
	TRISC = 0b00000000;
	TRISA = 0b00000011;

	PORTB = 0b00000000;
	PORTC = 0b00000000;
	PORTA = 0b00000000;

	OPTION = 0b00000000; // 

	INTEDG=0;	// Kesme 1'den 0' doğru (INTEDG=1 ise Kesme 0'dan 1'doğru)
	INTE=1;	    // RB0 Kesme aktif yap
 
	GIE=1;      // Tüm kesmeler aktif 
	T0IE=0;
	T0IF=0;
	RBIF=0;

while (1){

// normal kendi rutinlerimiz

}

}



void main (void) satırını değişkenlerin altına aldım ve karşılaştığım sorun düzeldi.

C dilinde yeni olduğum için tecrübeli arkadaşlar bu yaptığım hata nasıl bir sorun teşkil ediyor.

XX_CİHAN_XX

Arslan hocam nasıl bir sorun teşkil ettiğini yazmış yerel değişkenler sadece tanımlandığı bloklar içinde kullanılabilir. O blokların dışında kullanılamaz. Kullanmaya çalışırsan derleyici hata verir. Sen bu değişken yada sabiti en tepeye blokların dışına tanımlarsan bu artık yerel değil global niteliktedir ve tüm blokların içersinde geçerlidir.

Kolay gelsin.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.