PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktions Templates? und Pointer Frage



muraad
09.01.2005, 23:06
Also meine Frage ist zu folgenden Quelltext:

unsigned int timervar;
timervar=0;
char timerflag;
timerflag=0;

SIGNAL(SIG_OVERFLOW2)
{
if(timervarflag!=0)
timervar++;
}


void timer2-init(void)
{
TCCR2 |= _BV(CS21); // Timer2 Prescaler 8 damit eine Overflow von 0,0000005s also 0,5microsek
TIMSK |= _BV(TOIE2); //Timer2 Overflow Interrupt Enable
}

void start-funktion(void(*funtkionsname)(void), char dauer) // Dauer in microsekunden
{
timervarflag=1;
while((timervar/2)!=dauer)
(*funktionsname)();
timervar=0;
}

Es ist das erste mal das ich Funktionen als Parameter verwende. Deswegen weis ich nicht ob ich irgendwelche Ponterfehler oder sonstige Fehler gemacht hab, habs auch noch nicht getestet?
die Funktion start-funktion() würde ich als alternative zu irgendwelche wait() Funtktionen benutzen da bei wait() immer in der zu Wartenden zeit nichts gemacht wird.
Jetzt meine zweite Frage. Könnte ich die Funktion start-funktion() auch so deklarieren?

template <typename T>
void start-funktion( T (*funktionsname)(T),int dauer)
...
Ich hoffe mir kann einer helfen da ich mit Funktions Templates und Funktion als Funktionsargumente keine Erfahrung hab.

Mfg Muraad

muraad
11.01.2005, 16:34
Sorry, war ziemlich spät als ich die Idee hatte und das geschrieben hab.
Das ich Fehler beim Timer2 gemacht wahr mir dann auch ziemlich schnell klar. Aber kann mir keiner helfen und beispiele nennen wie man eine Funtkion als Parameter übergibt und anschließend benutzt?
Gruß Muraad

PicNick
11.01.2005, 17:21
Hi, Im Visual C++ mach ich das so, weil mir der Kerl mit seinen functiondeclaration sonst auf den Socken geht:

int function_1 (int par1, .... Parx); // die gibt's irgendwo
int function_2 (int par1, .... Parx); // die gibt's auch irgendwo

Darum geht's:
// ---------------------------------------------------
static int vectorcall(int Function, int par1, .... Parx)
{
union {
int (*vVec)(int par1, ... parx)
int iVec;
} helpful;
int result;
helpful.ivec = Function;
result = (*helpful.vVec)(par1, .... parx);
return(result);
}

// ---------------------------------------------------
main()
{
int result;
.....
result = vectorcall((int)function_1, par1, .... parx); // die eine
result = vectorcall((int)function_2, par1, .... parx); // die andere


.....

}

Sieht kompliziert aus, is aber aus der Praxis geboren. mfg robert

muraad
12.01.2005, 16:38
Danke dir PicNick das du geantwortet hast. Es war das was ich gesucht hab.
Gruß Muraad