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 

Napačna vrednost v registrih po prekinitvi na LPC 2368

 
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
ursanio
Neznanec
Neznanec



Pridružen-a: Tor 21 Jul 2009 8:55
Prispevkov: 2
Aktiv.: 0.01
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jul 21, 2009 9:22 am    Naslov sporočila:  Napačna vrednost v registrih po prekinitvi na LPC 2368 Odgovori s citatom

Pozdravljeni,

ubadam se s sledečim problemom.

1. LPC2368 dobi zahtevo za zunanjo prekinitev
2. prekinitev ujame prekinitveni streznik eint3
3. včasih, ne vedno, ko streznik zaključi in se kontekst vrne iz prekinitvenega v uporabniški način, dobim pokvarjen R4 register. S pokvarjen mislim, da je v njem napačna vrednost.

Pregledal sem vse funkcije, ki se kličejo znotraj prekinitvenega streznika in v nobeni ni preplavitve sklada. Prav tako vse klicane funkcije preden spreminjajo register r4 poskrbijo, da se ga porine na sklad in ob koncu tudi vzame s sklada.

Vrednost, ki jo dobim v r4 register je zelo verjetno vrednost skladovnega kazalca uporabniškega načina.

Ali ima kdo kakšno idejo, kako pride do zgornje napake ?

Za ponazoritev
Koda:

void main(void)
{
   /*other code*/
   results_process();    --> void eint3_handler(void)
                                       {
                                           /*some code*/
                                           platform_powerdown();-->application_powerdown();
                                       }
   /*other code - somethimes r4 different then before the eint3 call*/
}


Prekintev se izvaja v ARM načinu, medtem ko se ostali procesi izvajajo v THUMB načinu;
Prevajalnik je RVCT 2.2;


za odgovore se v naprej zahvaljujem,

lp
uroš
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ursanio
Neznanec
Neznanec



Pridružen-a: Tor 21 Jul 2009 8:55
Prispevkov: 2
Aktiv.: 0.01
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jul 22, 2009 8:00 am    Naslov sporočila:   Odgovori s citatom

Pozdrav,

odpravil sem napako... spregledal sem, da se znotraj application_powerdown-a, preko funkcijskega kazalca kliče popolnoma nova veja funkcij.

Ta veja pa prebije sklad IRQ, se prepelje čez vse druge sklade (Abort, Und, SVC) in konča v uborabniškem skladu...

zato dobi register r4 po zaključku rutine napačno vrednost.


lp
uros
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: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group