www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Klic funkcij v C18

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
zcetrt
Član
Član



Pridružen-a: Tor 13 Dec 2005 11:29
Prispevkov: 275
Aktiv.: 1.16
Kraj: Ljubljana

PrispevekObjavljeno: Sob Apr 12, 2008 2:47 pm    Naslov sporočila:  Klic funkcij v C18 Odgovori s citatom

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.

Koda:

delay(10);



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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
zcetrt
Član
Član



Pridružen-a: Tor 13 Dec 2005 11:29
Prispevkov: 275
Aktiv.: 1.16
Kraj: Ljubljana

PrispevekObjavljeno: Sob Apr 12, 2008 5:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.37
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sob Apr 12, 2008 8:33 pm    Naslov sporočila:   Odgovori s citatom

Warninge, ki jih vrne kompajler niso zato, da jih izključiš. Very Happy

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.33

PrispevekObjavljeno: Pon Apr 14, 2008 4:20 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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