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 

Moja napaka..ali od compilerja???

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



Pridružen-a: Čet 21 Feb 2008 18:02
Prispevkov: 77
Aktiv.: 0.36
Kraj: Dobropolje

PrispevekObjavljeno: Čet Dec 23, 2010 2:16 pm    Naslov sporočila:  Moja napaka..ali od compilerja??? Odgovori s citatom

Pozdravljeni!

Compilerja v splošnem obtoževati napak je greh Laughing

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
Shocked

preveril sem če mogoče kjer koli operiram z spremenljivko kot kazalec in mogoče tam kopiram naslove... nič.... Brick wall

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!!! Think
Naslova se nista več prekrivala.....

Ima kdor koli kakšno logično razlago??? Anxious

LP
Mare
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
TESKAn
Član
Član



Pridružen-a: Sob 30 Jan 2010 15:15
Prispevkov: 56
Aktiv.: 0.30
Kraj: Cerkno

PrispevekObjavljeno: Tor Dec 28, 2010 10:56 am    Naslov sporočila:   Odgovori s citatom

Imaš kake optimizacije vklopljene?
Kaj pa, če pred deklaracijo spremenljivke daš še "volatile", torej "volatile unsigned char RX_timeout;"?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
markc
Član
Član



Pridružen-a: Čet 21 Feb 2008 18:02
Prispevkov: 77
Aktiv.: 0.36
Kraj: Dobropolje

PrispevekObjavljeno: Sre Dec 29, 2010 1:28 pm    Naslov sporočila:   Odgovori s citatom

Optimizacija ni vklopljena!

Hm.....problem je da če sedaj spremenljivko preimenujem v char se napaka ne ponovi več Very Happy 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
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 -> ARM arhitektura Č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: 6 dni


Powered by phpBB © 2001, 2005 phpBB Group