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 

problem s podprogramom

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



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.45
Kraj: Krško

PrispevekObjavljeno: Čet Jan 17, 2008 6:26 pm    Naslov sporočila:  problem s podprogramom Odgovori s citatom

Pozdravljeni,


imam probleme s funkcijo, ki jo uporabljam v glavni aplikaciji. Pišem v uVision2, procesor je 89s8253. Funkcija služi za izpis na lcd display.

v glavnem programu imam definiran buff[25], v katerega vpisujem s pomočjo sprintf funkcije, nato pa string prenesem na display.

funkcijo imam definirano kot:

Koda:

void lcd_text ( unsigned char vrsta, unsigned char kolona)
{
 unsigned char x;

 lcd_cursor (vrsta, kolona);   // postavi kurzor na zeljeno pozicijo
 
 
 while (buff[x]!=0)         // izpisi text
   {
    if ((kolona+x)>24) break; // ce je konec vrstice
    lcd_data (buff[x]);            // izpisi znak na lcd
    x++;
   }

 return;
}

in jo klicem npr.: lcd_text(2,3);


zdaj se mi je dogodilo, da v eni drugi funkciji oblikujem text v globalni spremenljivki buff, nato se vrnem v glavni program, kjer pokličem lcd_text. Zadeve noče izpisat.

Če pa deklariram funkcijo kot spodaj, pa zadeva deluje:
Koda:

void lcd_text ( unsigned char vrsta, unsigned char kolona,unsigned char a[25])
{
    if ((kolona+x)>24) break; // ce je konec vrstice
    lcd_data (a[x]);            // izpisi znak na lcd
    x++;
   }

 return;
}

to moram klicat lcd_text(2,3,buff); in zadeva deluje

Zakaj se to dogaja, saj imam v prvem primeru sigurno prave podatke v spremenljivki buff?? To sem preveril tako, da sem "ročno" izpisal z uporabo lcd_data(buff[1]); lcd_data(buff[2]);lcd_data(buff[3]);lcd_data(buff[4]).....

druga verzija se mi ne dopade, saj zasede 2x 25 bytov rama.

Hvala za kak namig!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.64
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Čet Jan 17, 2008 7:31 pm    Naslov sporočila:  Re: problem s podprogramom Odgovori s citatom

Tukaj:
Koda:
unsigned char x;

oz. pod tem nikjer ne inicializiraš spremenljivke -- ko uporabiš ta x (while (buff[x]!=0)), ima x naključno vrednost.

A je v prvem primeru ta buff sploh globalna spremenljivka -- definirana izven vseh funkcij? Hm, zgoraj si napisal, da jo imaš definirano v glavnem programu - main? Pa ti prevajalnik za to nič ne zajamra? Če hočeš, da bo spremenljivka vidna v vseh funkcijah enako, moraš uporabiti globalno spremenljivko - ni dovolj, da ima isto ime.

Aha, malo spodaj si napisal, da je globalna. Potem je problem verjetno v tem, da ne inicializiraš x.

V drugi funkciji pa niti definiraš ne x??

LP!


[/code]
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.45
Kraj: Krško

PrispevekObjavljeno: Čet Jan 17, 2008 7:59 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
oz. pod tem nikjer ne inicializiraš spremenljivke -- ko uporabiš ta x (while (buff[x]!=0)), ima x naključno vrednost.


Bravo! To je blo to. Sem dodal na začetku x=0; in zadeva dela. Zgleda, da sem do zdaj mel srečo, da je delalo....


Citiram:
V drugi funkciji pa niti definiraš ne x??


tule sem ga pa pozabil napisat, ko sem prepisoval kodo.


Hvala za pomoč!
Nazaj na vrh
Skrit 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 -> Programska oprema Č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: 8 dni


Powered by phpBB © 2001, 2005 phpBB Group