-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Function Pointer - Verständnissproblem

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587

    Function Pointer - Verständnissproblem

    Anzeige

    Angenommen, ich weise einem function pointer eine Funktion zu und führe sie aus, also quasi so
    Code:
    void (*new_function)(void) = meinefunc;
    (*new_function)();
    Wieso gibt er mir dann folgende Warnung aus?
    ./taskcaller/taskcaller.c:73: warning: initialization from incompatible pointer type

    Vielen Dank für eure Hilfe!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Wie ist denn 'meinefunc' deklariert?

    MfG Mark

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587
    also void meinefunc(void);

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    Komisch, bei mir lässt sich der Code ohne Warnungen compillieren. Kannst Du eventuell den ganzen Code posten, vllt steckt das Problem woanders.

    MfG Mark

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Hast du die Deklaration (Prototyp) von meinefunc auch *vor* der Zuweisung stehen?
    Disclaimer: none. Sue me.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587
    Hallo zusammen, ich hänge nun mal meinen gesammten Code an, auch wenn er noch nicht fertig ist.

    Das ganze ist ein Taskcaller, der immer verschiedene Funktionen aufrufen soll.

    Edit: Nochwas: Ich verwende nicht WinAvr sondern avr-gcc(4.2.1) für Linux.

    Ich hätte noch eine paar Fragen:
    1. Wie sage ich dem GCC dass er alle Variablen "zentral" speichern soll. Wenn der Caller nun das mit icall aufruft, werden in den Funktionen local die Variablen gesichert. Ich möchte das ganze aber zentral, dass er alle Register vor dem icall sichert, die er noch braucht.
    2. Wie sage ich dem Gcc, dass er nichtverwendete Funktionen nicht ins Flash mitnehmen soll..?
    Angehängte Dateien Angehängte Dateien

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    Code:
    	void (*functiontoexecute)(void)=address;
    Wo und wie ist adress deklariert? Das sollte dann auch eine Funktion sein.

    Gruß

    Jens

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587
    address ist der pointer auf eine Funktion. Die Funktionsaddresse wird bei taskf_addtask mit übergeben.
    Das krasse ist ja, ersetzt man address durch eine reale funktion und keinen pointer, sei es z.b. meinefunc, die existiert, kommt die gleiche Fehlermeldung. Kompiliere ich es mit AvrStudio (also WinAVR) kommt bei mir keine Fehlermeldung.

    Wie kann ich die Fehlermeldung unterdrücken?

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Code:
    uint16_t* address;
    mir erscheint das seltsam, dass address nicht als void* deklariert ist. wäre ich ein compiler, würde ich da ohne explizites cast auch meckern. kann aber sein dass ich mich täusche.

    gruesse

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587
    Dumme frage, aber ein pointer auf void was heißt das? Für mich heißt void kein Argument... Könnte mir das bitte jemand erklären?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •