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 

Kazalec na funkcijo - vprašanje za C guruje

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



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Tor Feb 19, 2008 8:50 am    Naslov sporočila:  Kazalec na funkcijo - vprašanje za C guruje Odgovori s citatom

Spodaj napisana koda s kazalcem na funkcijo se mi z GCC prevajalnikom prevede brez težav in dela OK:

Koda:
   
typedef void (*IntVector)(void);
IntVector vect = VICVectAddr;

(*vect)();          /* call the IRQ handler via the pointer to function */


Pri tem je:
Koda:

#define VICVectAddr      (*((volatile unsigned long *) 0xFFFFF030))


ARM-ov prevajalnik (KEIL in uVision) pa mi javi ne samo warning, ampak celo error in sicer:
Citiram:

isr.c(12): error: #144: a value of type "unsigned long" cannot be used to initialize an entity of type "IntVector"


Namen kode je dobiti naslov prekinitvene funkcije iz registra VICVectAddr in to funkcijo poklicati.

A bi moral še kaj explicitno cast-at ali kaj takega?

Hvala,
Aleš
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Tor Feb 19, 2008 9:37 am    Naslov sporočila:   Odgovori s citatom

Seveda po tem, ko sem tukaj spraševal, sem našel delujočo varianto tudi z ARM-ovim prevajalnikom.

Predelana koda je:
Koda:
   
typedef void (*IntVector)(void);

int vect;
vect = VICVectAddr;

(*(IntVector)vect)();          /* call the IRQ handler via the pointer to function */
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.04
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jul 28, 2009 12:45 pm    Naslov sporočila:   Odgovori s citatom

šlo bi verjetno tudi tako:

typedef void (*IntVector)(void);
IntVector vect = (IntVector)VICVectAddr;

(*vect)(); /* call the IRQ handler via the pointer to function */
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 -> Programiranje embedded sistemov Č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: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group