/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
parametre...
Fra : holst


Dato : 12-05-02 00:08

Hej NG

Jeg har følgende funktion, som tager to parametre....

void IntVecAddrSet(int IntSrcNo, void (* IntSvcFunc)())
{
int *IntAddr = (int *)IRQVecAddr;
//Interrupt vector setup at...
//Interrupt vector address + Interrupt source number (word boundary)...
*(IntAddr + IntSrcNo) = (int)IntSvcFunc;
//Enable specified interrupt source....
EnableInt(IntSrcNo);
}

I denne funktion kalder jeg så ovenstående funktion, og så går det galt, men
jeg kan virkelig ikke finde ud af hvorfor?

void RunTimerInterrupt(void)
{
......
......
IntVecAddrSet(Timer0, Timer0IntSvcR); //DET ER VED DENNE LINIE
//COMPILEREN BROKKER SIG
}

Compileren siger: Implicit cast of pointer to non-equal pointer.

Er der nogle i det danske land, som kan se hvad der er galt, for jeg er
endnu ret newbie indenfor pointere...?? -og hvad betyder det når man tager
en funktion med som parameter, som den øverste funktion gør med sin 2.
parameter??

På forhånd tak for hjælpen

mvh Holst







 
 
Claus Rasmussen (12-05-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 12-05-02 00:11

holst wrote:

> Er der nogle i det danske land, som kan se hvad der er galt, for jeg er
> endnu ret newbie indenfor pointere...?? ..................................

Newbie, der roder med interruptvektorer uden at forstå pointere ?? Har du
fået job hos Microsoft eller hvad ?


> ........................................-og hvad betyder det når man tager
> en funktion med som parameter, som den øverste funktion gør med sin 2.
> parameter??

Post hovedet på din Timer0IntSvcR funktion.

-Claus


holst (12-05-2002)
Kommentar
Fra : holst


Dato : 12-05-02 00:28

Her er hovedet for funktionen:

void __irq Timer0IntSvcR(void)

-og nej, jeg har ikke fået job hos Microsoft....synes bare det er sjovt at
programmere, men har muligvis taget munden for fuld med dette program

mvh. holst

"Claus Rasmussen" <clr@cc-consult.dk> wrote in message
news:abk8cj$j8s$1@sunsite.dk...
> holst wrote:
>
> > Er der nogle i det danske land, som kan se hvad der er galt, for jeg er
> > endnu ret newbie indenfor pointere...??
...................................
>
> Newbie, der roder med interruptvektorer uden at forstå pointere ?? Har du
> fået job hos Microsoft eller hvad ?
>
>
> > ........................................-og hvad betyder det når man
tager
> > en funktion med som parameter, som den øverste funktion gør med sin 2.
> > parameter??
>
> Post hovedet på din Timer0IntSvcR funktion.
>
> -Claus
>



Claus Rasmussen (12-05-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 12-05-02 00:33

holst wrote:

> void __irq Timer0IntSvcR(void)

Ja. Problemet er den '__irq' fyr, der fortæller compileren et-eller-andet
specielt om den funktion (f.eks at det er en interruptrutine). Det gør at
funktionen ikke længere har typen 'void (*)(void)'.

Vi er dermed ude over, hvad der findes i standarden, så resten er kun
gætteværk. Prøv at erklære din IntVedAddrSet sådan:

void IntVecAddrSet(int IntSrcNo, void _irq (* IntSvcFunc)(void))

Alternativt kan du tage den store hammer frem og prøve at erstatte kaldet
af IntVecAddrSet med

IntVecAddrSet(Timer0, (void __irq (*)(void)) Timer0IntSvcR);

Men der er ingen garanti for at det virker. Prøv at læs om __irq i din
manual til compileren.

-Claus


holst (12-05-2002)
Kommentar
Fra : holst


Dato : 12-05-02 08:15

"Claus Rasmussen" <clr@cc-consult.dk> wrote in message
news:abk9m8$mir$1@sunsite.dk...
> holst wrote:
>
> > void __irq Timer0IntSvcR(void)
>
> Ja. Problemet er den '__irq' fyr, der fortæller compileren et-eller-andet
> specielt om den funktion (f.eks at det er en interruptrutine). Det gør at
> funktionen ikke længere har typen 'void (*)(void)'.
>
> Vi er dermed ude over, hvad der findes i standarden, så resten er kun
> gætteværk. Prøv at erklære din IntVedAddrSet sådan:
>
> void IntVecAddrSet(int IntSrcNo, void _irq (* IntSvcFunc)(void))

Tusind tak for hjælpen, ovenstående løsning virker fint!


mvh. holst



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste