 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
zcetrt Član


Pridružen-a: Tor 13 Dec 2005 11:29 Prispevkov: 275 Aktiv.: 1.16 Kraj: Ljubljana
|
Objavljeno: Sob Apr 12, 2008 2:47 pm Naslov sporočila: Klic funkcij v C18 |
|
|
Malo preizkušam C18 compiler. Naletel pa sem na sledečo "težavo":
Taka je funkcija, ki je tudi prej pravilno definirana.
Koda: |
void delay(unsigned int i)
{
for(; i>0; i--)
{
nop();
}
}
|
Takšen klic pa povzroči, da je vrednost spremenljivke "i" v "delay" funkciji 0x0a00 namesto 0x000a.
To se mi ne zdi ravno standardno. Ali sem kje spregledal kakšne nastavitve compilerja ali si le C razlagam narobe?
Klic delay(1000); deluje pravilno oz. po pričakovanjih.
Hvala za odgovore. _________________ 4. |
|
Nazaj na vrh |
|
 |
zcetrt Član


Pridružen-a: Tor 13 Dec 2005 11:29 Prispevkov: 275 Aktiv.: 1.16 Kraj: Ljubljana
|
Objavljeno: Sob Apr 12, 2008 5:36 pm Naslov sporočila: |
|
|
To je main.c datoteka, ki je v source mapi.
Koda: |
#include <p18f4620.h>
#pragma config WDT = OFF, LVP = OFF, OSC=HS, IESO = OFF, FCMEN = OFF
void main (void)
{
TRISC = 0;
do
{
PORTC = 0;
delay_ms(128);
PORTC = 0xff;
delay_ms(128);
}
while (1);
}
|
To je pa datoteka delay.c, ki je tudi med source fajli.
Koda: |
const char clock_speed_MHz=20;
void delay_ms(unsigned int);
void delay_ms(unsigned int i)
{
unsigned char j;
j=(clock_speed_MHz/4);
for(; i>0; i--)
{
Delay1KTCYx(j);
}
}
|
To je celoten program. Če dam delay_ms(parameter) parameter manjši od 128, je štala. Sicer dela tako, kot mora. Ne pomaga niti, če parameter zapišem kot 0x000a. Spremenljivka "i" v tem primeru postane 0x0aXX, kjer je XX po vsej verjetnosti vrednost celic od prej...
Kaj počnem narobe? _________________ 4. |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.37 Kraj: Lovrenc na P.
|
Objavljeno: Sob Apr 12, 2008 8:33 pm Naslov sporočila: |
|
|
Warninge, ki jih vrne kompajler niso zato, da jih izključiš.
Znebi se jih pa bo pravilno delalo. Res je, da se čudno obnaša kompajler, takšen warning bi moral znati požreti. Sicer pa to ni edina napaka C18 kompajlerja. |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Pon Apr 14, 2008 4:20 pm Naslov sporočila: |
|
|
Ja, res čudna stvar, da ne dela. Zgleda, kot da za spremenljivko i zameša upper in lower byte. Sicer pri definiciji tipa int se vrednost vpiše v spomin tako, da se zapiše najprej lower byte in na naslednjo lokacijo upper byte.
Poskusi drugače:
Koda: |
void delay(unsigned int j)
{
for(i=0; i<j; i++)
{
nop();
}
} |
Poglej vrednosti i in j po korakih.... _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|