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

Pridružen-a: Čet 21 Feb 2008 18:02 Prispevkov: 77 Aktiv.: 0.36 Kraj: Dobropolje
|
Objavljeno: Čet Dec 23, 2010 2:16 pm Naslov sporočila: Moja napaka..ali od compilerja??? |
|
|
Pozdravljeni!
Compilerja v splošnem obtoževati napak je greh
Torej, problem sem rešil, vendar sem zmeden, ker nevem kaj bi bilo lahko narobe!
V programu uporabljam " veliko število" globalnih spremenljivk, ki služijo kot števci ali zastavice za orentacijo v več sekvenčnih avtomatih. Sekvenčni avtomat je napisan funkciji, katero kličem iz prekinitev.
Torej sledeča situacija!
spremenljivka npr: unsigned int kazalec_na_prosto_lokacijo_bufferja;
V začetku je sekvenčni avtomat deloval brez problemov, kasneje sem program nadgradil z še enim avtomatom. Ko sem dodal novo funkcijo sem tudi dodal njej namenjeno spremenljivko -> unsigned char RX_timeout;
Avtomata sta vsak za sebe delovala pravilno, ko pa sem obe funkciji združil v program so se pričele dogajati čudne situacije!
(V naprej sporočam...obe spremenljivki niso imeli nobenega kontakta!!!)
primer napake;
kazalec_na_prosto_lokacijo_bufferja=123;
RX_timeout=1;
if(RX_timeout)
{
RX_timeout=0;
izpisuj(moj_buffer,i,kazalec_na_prosto_lokacijo_bufferja);
}
v tem primeru se mi je zgodilo da je funkcija pričela izpisovat podatke iz indeksa 0, namesto iz 123!!!!!
Ker mi je bila situacija sumljiva sem naslova spremenljivk shranil v 2 različna kazalca (vsako spremenljivko v svoj kazalec).
Pogledal sem asm kodo in ugotovil da mi ne pobriše samo lokacije spremenljivke RX_timeout...vendar tudi spremenljivko kazalec_na_prosto_lokacijo_bufferja!!!!
NASLOVA STA SE PREKRIVALA
preveril sem če mogoče kjer koli operiram z spremenljivko kot kazalec in mogoče tam kopiram naslove... nič....
Ker nisem imel pojma zakaj se to dogaja sem čisto iz obupa spremenil spremenljivko "RX_timeout" iz unsigned char v unsigned int
......
......
IN PROGRAM ČUDEŽNO ZAŽIVI!!!
Naslova se nista več prekrivala.....
Ima kdor koli kakšno logično razlago???
LP
Mare |
|
Nazaj na vrh |
|
 |
TESKAn Član

Pridružen-a: Sob 30 Jan 2010 15:15 Prispevkov: 56 Aktiv.: 0.30 Kraj: Cerkno
|
Objavljeno: Tor Dec 28, 2010 10:56 am Naslov sporočila: |
|
|
Imaš kake optimizacije vklopljene?
Kaj pa, če pred deklaracijo spremenljivke daš še "volatile", torej "volatile unsigned char RX_timeout;"? |
|
Nazaj na vrh |
|
 |
markc Član

Pridružen-a: Čet 21 Feb 2008 18:02 Prispevkov: 77 Aktiv.: 0.36 Kraj: Dobropolje
|
Objavljeno: Sre Dec 29, 2010 1:28 pm Naslov sporočila: |
|
|
Optimizacija ni vklopljena!
Hm.....problem je da če sedaj spremenljivko preimenujem v char se napaka ne ponovi več tako da žal tvojega predloga ne morem preverit.
ok..konec koncev.. kaj bi rešil z "volatile"... spremenljivki ne uporabljam v prekinitvah. |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|