"unsigned int i" neden while dışında syntax error veriyor?

Başlatan fryrmnd, 20 Aralık 2011, 23:11:02

fryrmnd

Arkadaşlar iyi akşamlar.c ile cebelleşmem devam ediyor. Zaten ünide de 3 kez aldım.

#include<p18f4550.h>
#include<delays.h>

extern void _startup (void);        // See c018i.c in your C18 compiler dir 
#pragma code _RESET_INTERRUPT_VECTOR = 0x1000
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code
#pragma code _HIGH_INTERRUPT_VECTOR = 0x1008
void _high_ISR (void)
{
;
}
#pragma code _LOW_INTERRUPT_VECTOR = 0x1018
void _low_ISR (void)
{
;
}
/* This pragma forces the code below this line to be put into the code */
/* section (memory address >= 0x82A). See linker script for details. */
#pragma code

void main(void)
{

TRISDbits.TRISD1=0;

while(1)
{
unsigned int i=1000000;


LATDbits.LATD1=0;
Delay10KTCYx(i);
LATDbits.LATD1=1;
Delay10KTCYx(i);

}
}


gecikme için verdiğim i değeri güldürebilir. ama şu haliyle bile led gayet hızlı yanıyor.
soru şu. i değişkeni while(1) döngüsünün yukarsına çıkınca neden hata verir. o döngü içinde mi geçerli olmuyor. öyle ise static olarak mı tanımlamak gerekiyor?

Erol YILMAZ

Öncelikle dikkatimi çeken şeyi size bildirmek istiyorum,

unsigned int i= 1Milyon;

diye bir tanımlama yapmışsınız,

C18 derleyisinde "int" ifadesi 16 bit... yani tanım aralığı 0...65535

dolayısı ile sizin i değişkeni 1Milyon olarak tanımlanamaz.

http://ww1.microchip.com/downloads/en/devicedoc/51288f.pdf
sayfa:11

z

unsigned int i=1000000; satirini while in ustune degil de TRISDbits.TRISD1=0; nin ustune tasirsan hata vermez.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fryrmnd

haklısınız hocam. şu haliyle hata vermedi. zaten o hata ve benzerlerini anlamadığım için konuyu açtım. veri tiplerini ve limitlerini öğrenicez artık. peki hocam değişken neden main bloğunda while döngüsü üzerinde tanımlanınca syntax error veriyor.  syntax errer yazım hatası gibi bir hata değil mi?

fryrmnd

evet bunalmış hocam. dediğiniz şekilde hata vermedi. sebep galiba basic ile uğraşıp c ye geçmeye çalışmak.  :(

z

i, ilk haliyle while bloguna ait lokal bir degiskendi. While disina aldiginda main fonksiyonuna ait lokal bir degiskene donustu ancak bu degisken taniminin hemen ustunde komut vardi bu durum hataya neden oldu. i tanimini bu komut satirinin ustune tasiyinca hata yok oldu.

Lokal degiskenleri { dan hemen sonra tanimlarsan sorun kalmaz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com