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


Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.45 Kraj: Krško
|
Objavljeno: Čet Jan 17, 2008 6:26 pm Naslov sporočila: problem s podprogramom |
|
|
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.64 Kraj: Zagorje ob Savi
|
Objavljeno: Čet Jan 17, 2008 7:31 pm Naslov sporočila: Re: problem s podprogramom |
|
|
Tukaj:
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 |
|
 |
damo Član


Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.45 Kraj: Krško
|
Objavljeno: Čet Jan 17, 2008 7:59 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|