compile sorunu PCLRT40A.OBJ error

Başlatan trigger, 14 Mayıs 2005, 15:51:53

trigger

Merhaba arkadaşlar,
HI-TECH PICC lite ile bir program yazıyorum.
Compile et dediğimde:
undefined symbol (error)
-main (C:PICCLITE\LIB\PCLRT40A.OBJ) (error)
diye 2 tane hata veriyo.Sizce hatam nedir?
Projemde  16f84a kullanıyorum.

SpeedyX

programı görmeden tahmin etmesi zor ama
main() i, void main() şeklinde yazmayı dene bakalım.

trigger

Çok sağol arkadaşım sorun oradaymış,hallettim.

trigger

Şimdi de şu hatayı verdi:
Can't find 0xC words (0xC withtotal) for psect text in segment CODE (error)
Can't find 0x7 words (0x7 withtotal) for psect text1 in segment CODE (error)
Can't find 0x2 words (0x2 withtotal) for psect text0 in segment CODE (error)
Bi kurtulamadım şu hatalardan.Yardımlarınızı bekliyorum arkadaşlar...

SpeedyX

anlaşılan sen bu kodları vermeyeceksin :)
bende ihtimal yazayım;
fuses kısmı boştur (xt,nowdt,noput gibi...)

trigger

İstersen kodu vereyim fakat 140 satırlık bi program.Bir de dediğini anlamadım.fuses kısmı nedir?

SpeedyX

Buraya yazarsan, diğer arkadaşlardan da fikir gelebilir.
millet 1000satırlık yazıyor...

trigger

Yeni program:
#include <pic.h>
#include <lcd.c>
#include <delay.c>
#include <stdio.h>

#define DQ RB4

void delay2(int useconds)		
{						
	int s;				
	for (s=0;s<useconds;s++);
}
unsigned char ow_reset(void)
{
	unsigned char presence;
		DQ=0;		
		delay2(10);	
		DQ=1;		
		delay2(1);	
		presence=DQ;	
		delay2(9);	
		return(presence);	
}					
unsigned char read_bit(void)
{
	unsigned char i;
	DQ=0;			
	DQ=1;			
	for(i=0;i<2;i++);	
	return(DQ);		
}
void write_bit(char bitval)
{
	DQ=0;		
	if(bitval==1) DQ=1;	
	delay2(1);		
	DQ=1;			
}				
unsigned char read_byte(void)
{
	unsigned char i;
	unsigned char value=0;
	for(i=0;i<8;i++)
	{
		if(read_bit()) value|=0x01<<i; 
		delay2(2);			
	}					
	return(value);
}
void write_byte(char val)
{
	unsigned char i;
	unsigned char temp;
	for(i=0;i<8;i++)	
	{			
		temp=val>>i;	
		temp&=0x001;	
		write_bit(temp);	
	}
	delay2(1);
}
void read_temp(void)
{
	char get[10];
	char temp,temp_msb,temp_lsb,temp_msb2,temp_lsb2;
	char temp2[4];
	int i,k,temp3;
	signed int temperature;
	
	ow_reset();
	write_byte(0xCC);	
	write_byte(0x44);	

	delay2(1);
	ow_reset();
	write_byte(0xCC);	
	write_byte(0xBE); 	
	for(k=0;k<9;k++)
	{
		get[k]=read_byte();
	}

	temp_msb=get[1];	
	temp_lsb=get[0];	
	temp_msb2=temp_msb & 0x80;			
		for(i=1;i<5;i++)
		{
			temp_msb=temp_msb<<i;
			temp_lsb2=temp_lsb>>i;
		}
	temp=temp_msb+temp_lsb2;	
	for(i=0;i<4;i++)
	{
		temp2[i]=temp_lsb & 0x01;
		temp_lsb=temp_lsb>>1;

	}
	if(temp_msb2>=0x80)		
	{
		temp_msb=temp_msb & 0x70;	
		temp=temp_msb+temp_lsb2;
		temp=(~temp)+1;		
		temp3=(int)temp2[3]*(1/2)+(int)temp2[2]*(1/4)+(int)temp2[1]*(1/8)+(int)temp2[0]*(1/16);
		temperature=(-1)*temp3+(-1)*(int)temp;		
	}
	if(temp_msb2<=0x80)
	{
		temp3=(int)temp2[3]*(1/2)+(int)temp2[2]*(1/4)+(int)temp2[1]*(1/8)+(int)temp2[0]*(1/16);
		temperature=temp3+(int)temp;		
	}
}
main(void)
{
	unsigned char display[]="Temp= ";	
	unsigned int temperature;
	TRISB=0x10;		
	TRISA=0;		
	delay2(5681);		
	lcd_init();
	lcd_clear();

	for(;;)			
	{
		read_temp();
		sprintf(display+7,"%d",temperature);
		lcd_puts(display);
		delay2(5681);
		lcd_clear();
	}
}

trigger

Şöyle bir şey farkettim programda.Processor olarak 16F877 seçince hata vermiyor.Buradan da şunu çıkarabilir miyiz:16F84A'nın hafızası benim program için az mı geliyor?Bu konuda bilgisi olan var mı arkadaşlar?Acil cevap bekliyorum...

SpeedyX

@Trigger
Programda bir sorun göremedim ama birşeyi denemeni isteyebilirim;
#include <stdio.h>
#include <pic.h>

kısmını
#include <pic.h>
#include <stdio.h>

şeklinde değiştirip denermisin?

f84'ün program hafızasını dolduracağını sanmıyorum.
Eğer dolduruyorsa optimizasyon seviyesi düşük olabilir.
CCS ile f84'e çok daha büyük kodlar yazdım.

trigger

Merhaba SpeedyX,
Denediğini yaptım ama bir şey farketmedi.Başka çözüm öneren var mı?Bir de programı biraz daha düzenleyeyim bakiim.Daha az değişken vs kullanıp bakayım.

trigger

Kodu biraz değiştirdim(yukarıda editledim).
Bu sefer 1 error daha az verdi.
Can't find 0x7 words for psect text1...
Can't find 0x6 words for psect text4...
Programı daha az memory kullanacak şekilde kısaltmam mı lazım sizce?

SpeedyX

16F628 e göre derlemeyi deneyerek sonucu yazar mısın?

trigger

16F628'i bulamadım menüde.16F627A'yı seçtim,onda da hata vermedi.Ama 16F84A'da hata veriyor.Otimizasyon olarak FULL opt. seçiyorum.

SpeedyX

ozaman üzgünüm ama sığmıyor programın.
çok emin değilim, öyle olduğunu düşünüyorum.
CCS PICC tavsiye ediyorum.