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.hextern 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?
-
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?