Problem mit Funktion



  • Hi Leute,
    ich wollte gerade die folgende Funktion für mein OS kompilieren.

    void IRQ_Install_Handler(int IRQ, void (*Handler)(struct Regs* r)) 
    {
    	IRQ_Routines[IRQ] = Handler;
    }
    

    Aber MinGW meldet folgendes

    IRQ.c:29: error: conflicting types for 'IRQ_Install_Handler'
    OS.h:32: note: previous declaration of 'IRQ_Install_Handler' was here
    

    Ich verstehe einfach nicht, was da falsch sein soll.
    Hier der Ausschnitt aus OS.h

    extern void IRQ_Install_Handler(int IRQ, void (*Handler)(struct Regs* r));
    

    Kann mir jemand helfen? Vielen Dank schon mal im Voraus.



  • eher aufrufen denke in deinem source müßte statt

    void IRQ_Install_Handler(int IRQ, void (*Handler)(struct Regs* r))
    {
        IRQ_Routines[IRQ] = Handler;
    }
    

    eher sowas stehen

    void yourIrqHandler(struct Regs* r){
    
    }
    
    int main(){
        int yourIRQ = 0x1;
    
        IRQ_Install_Handler(yourIRQ,yourIrqHandler);//vorsicht functions namen sind pointer
    }
    


  • die wird noch gar nciht aufgerufen.



  • ok dann darf ich also "mein OS" wörtlich nehmen. Ich dachte du willst ne function
    aufrufen die an einen irq einen handler installiert.



  • Vielleicht hilft ja mehr Code

    // Array of function pointers handling irq
    void* IRQ_Routines[16]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    
    // Set an handler for IRQ
    void IRQ_Install_Handler(int IRQ, void (*Handler)(struct Regs* r)) 
    {
    	IRQ_Routines[IRQ] = Handler;
    }
    

    Und die Funktion wird noch nicht aufgerufen!



  • aus

    void* IRQ_Routines[16]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    

    würd ich eher

    void (*IRQ_Routines[16])(struct Regs* r);
    

    machen

    und

    IRQ_Routines[IRQ] = Handler;
    

    ist gefährlich

    würd eher

    IRQ_Routines[IRQ&0xF] = Handler;
    
    //oder
    if(IRQ<0
    || IRQ>MY_MAX_IRQ)return;
    

    machen und IRQ als Funktionsparameter klein schreiben, hast den source online?



  • Gibt leider immer noch den gleichen Fehler. Ich habe mir den Code aus dem OSTut angesehen, und wollte es nun selber schreiben.



  • Ich habe mir den Code aus dem OSTut angesehen

    hast nen link dazu?

    http://www.osdever.net/bkerndev/Docs/irqs.htm



  • jap, das ist die seite.



  • bin leider überfragt aber,

    #include <stdio.h>
    #include <stdlib.h>
    
    extern void asd(int asd);
    void asd(char asd){}
    
    int main(void) {
    	puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    	return EXIT_SUCCESS;
    }
    

    bricht ab mit dem Fehler

    ../src/MR.c:15: error: conflicting types for ‘asd’
    ../src/MR.c:14: error: previous declaration of ‘asd’ was here



  • mal sehen, werde jetzt mal etwas rum experimentieren, vielleicht finde ich ihn ja doch noch.



  • Aus welchem Grund schreibst das eigentlich ab? Wenn dir der name einer Funktion
    oder Variable nicht gefällt kannst die doch suchen und ersetzen lassen? Die Files
    sollten doch gehen, also solltest doch ohne einen Tipperer das Ding mal starten
    können. Dann lässt sich doch sicher was in die Funktion reinschreiben?

    Verändern backen und starten.
    Verändern backen und starten.
    Verändern backen und starten.
    Verändern backen und starten.

    ganz einfach oder?


Anmelden zum Antworten