Moin.

Ein kleines Problem, bei dem ich jetzt nicht ganz weiss, wie ich's erklären soll, damits verständlich wird...

(Info: main und MAIN sind 2 unterschiedliche Funktionen!)

Meine main sieht so aus:
Code:
int main(void)
{
  typedef void(*fptr_t)(void); 
  volatile fptr_t FPTR;

  FPTR = MAIN;
  while(1)
  {
    FPTR();
  }

  return(0);
}
Die void-Funktion MAIN wird aufgerufen. Wenn ich nun in der MAIN der (globalen) Zeigervariable FPTR eine andere Funktion zuweise, die MAIN dann per return beende, wird entsprechend die andere Funktion ausgeführt. Klappt soweit auch gut.

Jetzt möcht ich das ganze aber in dem folgenden Stil machen, dass die globale Variable nur noch lokal sein muss und ich in der aktuellen Funktion einach sagen kann: return (nächste Funktion);...

Code:
  while(1)
  {
    FPTR = FPTR();
  }
... dass also die gerade ausgeführte Funktion als Rückgabewert die
Funktion der nächsten auszuführenden Funktion an den Zeiger übergibt und beim nächsten Durchlauf der Schleife ausführt.

Versuche ich das so, meckert der Compiler an der Zeile "FPTR = FPTR();"
"error: void value not ignored as it ought to be"

Ok, klar, MAIN ist noch eine void.
Dann hab ich die Deklaration für die MAIN geändert:
fptr_t MAIN(void)

Geht aber auch nicht. Zusätzlich zu dem Fehler bringt der compiler jetzt auch bei der Initial-Zuweisung "FPTR = MAIN;" den Fehler:
"warrning: assignment from incompatible pointer type"

Ich hoff, mein Problem ist einigermassen verständlich.
Hat hier jemand ne Idee dazu?

mfG



(PS: Warum das ganze? Damit mehrere Funktionen, die zur Zeit "ineinander" aufgerufen werden, nacheinander ausgeführt werden, um so nicht Unmengen an Stack zu verschwenden.)