STM32F207: Compilerfehler

Gast #2428381
Lesenswert?

Hi,

verwende als Toolchain den IAR Embedded Workbench.
Der IAR Compiler zeigt mir folgenden Fehler an:

Error[Pe167]: argument of type "void (*)(obSTM32UART *)" is incompatible 
with parameter of type "void (*)(void *)


Scheduler.c Datei:
1
//- Interruptfunktionen
2
obSTM32Scheduler_MLst.Parent.SetTimerInterrupt = (int(*)(obScheduler*,int,void(*)(void*),void*,int,int))  obSTM32Scheduler_SetTimerInterrupt;

UART.c Datei:
1
void  obSTM32UART_FrameEnd(obSTM32UART* pInst)
2
{
3
...
4
        // Frame-End Timer stoppen
5
        pInst->m_pTimer->pM->SetTimerInterrupt(pInst->m_pTimer,0,*obSTM32UART_FrameEnd,pInst,0,0);
6
...
7
}

Es liegt wahrscheinlich an der Verwendung des dritten Parameter von der 
SetTimerInterrupt Methode.
Wie kann ich den Fehler beheben ?
#2428440
Lesenswert?

Leo schrieb:
> Wie müsste ich den Pointer zurechtcasten ?

Der Compiler schreibt es dir doch sogar hin, wie der Datentyp aussehen 
muss

Error[Pe167]: argument of type "void (*)(obSTM32UART *)" is incompatible
with parameter of type "void (*)(void *)

Du hast einen
void (*)(obSTM32UART *)
und es sollte sein ein
void (*)(void *)

Ergo:
1
pInst->m_pTimer->pM->SetTimerInterrupt(pInst->m_pTimer,0,(void (*)(void *))obSTM32UART_FrameEnd,pInst,0,0);

mach dir am besten einen typedef dafür, das wirst du wahrscheinlich noch 
öfter brauchen.
1
typedef void (* voidPtrFnct)(void *);
2

3
....
4

5
pInst->m_pTimer->pM->SetTimerInterrupt(pInst->m_pTimer,0,(voidPtrFnct)obSTM32UART_FrameEnd,pInst,0,0);

> Ich habe jetzt schon alles erdenkliche ausprobiert.
Das einzig hilfreiche wahrscheinlich nicht: Das Studium von Literatur 
und dort wiederrum das Kapitel, in dem Funktionspointer besprochen 
werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren