9.60PL3 ile içinde delay.h olan projeyi derleyememe. çözd

Başlatan MC_Skywalker, 10 Kasım 2009, 19:52:36

MC_Skywalker

HI-TECH C öğrenmek için HI-TECH C PRO for the PIC10/12/16 MCU family (Lite)  V9.60PL3 sürümünü kurdum. hernahgi bir  programa include  delay.h ettiğim de  derleyici

Error #499: ; 0: undefined symbol: 	_DelayMs(prog-1.obj)


mesajı ile derlemeyi kesiyor.

deneme yaptığım kod

#include <htc.h>
#include "delay.h"

void main(void)
{
	TRISB = 0x00;
	PORTB = 0x00;
	while (1)
	    {
	    RB0 = 1;
	    DelayMs(500); 
	    RB0 = 0;
	    DelayMs(500);
	    }
}


delay.h yi proje dizinden alıp derleyicin include dizinine attığımda aynı hatayı veriyor

#include <delay.h>


kodu 7.85 için düzenleyip derlediğimde benzer hata alıyorum

sorunu anlayamadım. fikri olna var mı?

MC_Skywalker

kodu şu şeklide düzeltince sorun düzeldi

#include <htc.h>
#include "delay.c"

void main(void)
{
	TRISB = 0x00;
	PORTB = 0x00;
	while (1)
	    {
	    RB0 = 1;
	    DelayMs(500); 
	    RB0 = 0;
	    DelayMs(500);
	    }
}


verdiğim rahtızlıktan ötürü özür dilerim.

BenC

Alıntı yapılan: "MC_Skywalker"kodu şu şeklide düzeltince sorun düzeldi

#include <htc.h>
#include "delay.c"

void main(void)
{
	TRISB = 0x00;
	PORTB = 0x00;
	while (1)
	    {
	    RB0 = 1;
	    DelayMs(500); 
	    RB0 = 0;
	    DelayMs(500);
	    }
}


verdiğim rahtızlıktan ötürü özür dilerim.

Merhaba Üstad.

peki sebep tam olarak neymiş?

gördüğüm kadarı ile iki kod arasındaki tek fark "delay.c" ve <delay.h>
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!

MC_Skywalker

Sorun delay.h yi kullanmamdan kaynaklanıyordu. delay.c yi kullanmam grekiyordu.

MC_Skywalker

Alıntı yapılan: "FxDev"

delay.c'yi kullanman yanlıştı.
Proje klasörüne sağ tıklayıp, refresh yapman gerekiyor. Her zaman .c uzantılı dosyalar doğru çalışmayabilir.

Refresh yaptım daha sonra kodu 7.85 e yapıştırıp gerekli düzenlemeyi yaptım aynı mesajı aldım.

bu HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.60PL3 deki hata
http://img513.imageshack.us/img513/7319/errorpz.png


MC_Skywalker

evet hatta ofisteki PC yede HI-Tech C kurdum aynı hatayı onda da aldım. gönderdiğim ekran görüntüsü ofisteki PC den

controller

proje dosyalarına "delay.c" ekleyip, kod içinde "delay.h" eklemen gerekiyor.  sen proje dosyalarına "delay.h" eklemişsin.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

MC_Skywalker

DelayMs() çağrısı zaten delay.c den oluyor. delay.c de delay.h den çağrı yapıyor.

MC_Skywalker

delay.c aşağıdaki gibi

/*
 *	Delay functions
 *	See delay.h for details
 *
 *	Make sure this code is compiled with full optimization!!!
 */

#include	"delay.h"

void
DelayMs(unsigned char cnt)
{
#if	XTAL_FREQ <= 2MHZ
	do {
		DelayUs(996);
	} while(--cnt);
#endif

#if    XTAL_FREQ > 2MHZ	
	unsigned char	i;
	do {
		i = 4;
		do {
			DelayUs(250);
		} while(--i);
	} while(--cnt);
#endif
}



Buda delay.h

/*
 *	Delay functions for HI-TECH C on the PIC
 *
 *	Functions available:
 *		DelayUs(x)	Delay specified number of microseconds
 *		DelayMs(x)	Delay specified number of milliseconds
 *
 *	Note that there are range limits: x must not exceed 255 - for xtal
 *	frequencies > 12MHz the range for DelayUs is even smaller.
 *	To use DelayUs it is only necessary to include this file; to use
 *	DelayMs you must include delay.c in your project.
 *
 */

/*	Set the crystal frequency in the CPP predefined symbols list in
	HPDPIC, or on the PICC commmand line, e.g.
	picc -DXTAL_FREQ=4MHZ
	
	or
	picc -DXTAL_FREQ=100KHZ

	Note that this is the crystal frequency, the CPU clock is
	divided by 4.

 *	MAKE SURE this code is compiled with full optimization!!!
	
 */

#ifndef	XTAL_FREQ
#define	XTAL_FREQ	4MHZ		/* Crystal frequency in MHz */
#endif

#define	MHZ	*1000L			/* number of kHz in a MHz */
#define	KHZ	*1			/* number of kHz in a kHz */

#if	XTAL_FREQ >= 12MHZ

#define	DelayUs(x)	{ unsigned char _dcnt; \
			  _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
			  while(--_dcnt != 0) \
				  continue; }
#else

#define	DelayUs(x)	{ unsigned char _dcnt; \
			  _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
			  while(--_dcnt != 0) \
				  continue; }
#endif

extern void DelayMs(unsigned char);


yarıca envarioment path ta tanımlı olan INCLUDE dizinine delay. ve delay.h kopyalayıp cağrıyı <delay.h> oalarak yaptığımda da aynı sorun oldu.

şimdi HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.60PL3 kaldırıp tekrar kuracağım. birde öyele deneyeceğim. bakalım ne olacak

MC_Skywalker

tekrar kurudum ve delay.c ile delay.h yeniden oluşturdum sorun çıkmadan derledi. şuan sorun yok.

önceki durum neden kaynakladı çözemedim.

KAZIMUGUR

#include < > ile #include " "  arasındaki farkı hocalarımız derslerinde anlatmışlardı.
Hi-Tide akıllı çocuk , yolu öğrendi , sormaz bir daha sana.  :)  :roll:

arslan74

Alıntı yapılan: "MC_Skywalker"tekrar kurudum ve delay.c ile delay.h yeniden oluşturdum sorun çıkmadan derledi. şuan sorun yok.

önceki durum neden kaynakladı çözemedim.

Merhaba,

Burada bir yanlışın var. Bu konu daha önceleri tartışılmıştı önce o konuları oku aradığın cevabı bulacaksın.

https://www.picproje.org/index.php/topic,25028&highlight=include+delay+h

Selamlar