Hallo, ich arbeite an einem lpc2294 µC.Ich bekomme aber Probleme wenn ich einen Interrupthandler implementiere mit der Entwicklungsumgebung Ecllipse.Ich bekomme immer eine Fehlermeldung wenn ich sowas in der Art schreibe : void tc0(void) __irq Der Compiler kann die Syntax __irq nicht erkennen.Kennt jemand einen Weg sodaß man unter Ecllipse Interrupthandler schreiben kann.Danke Ahmad.
als was hast du __irq deklariert? Oder einfach Beispielcode für einen anderen Kompiler genommen, und den in den GCC geworfen? Benutzt du überhaupt den GCC für deinen ARM? Ansonsten würd ich drauf tippen das code wie
1 | void __attribute__ ((interrupt("IRQ"))) isr(void); // Prototyp |
2 | |
3 | void __attribute__ ((interrupt("IRQ"))) isr(void){ |
4 | // A lot of Work
|
5 | VICVectAddr = 0; // Acknowledge Interrupt |
6 | }
|
Eher für den GCC geeignet ist (frei nach ARM-elf-GCC-Tutorial) /Ernst
Danke für die sehr schnelle Antwort. Ich benutze die "Yagarto GNU ARM tolchain". Werde es gleich mal ausprobieren... Danke Ahmad
Vorsicht bei Verwendung dieses Attributs bei arm-gcc (wie auch in Yagarto enthalten). Zumindest ältere Versionen des kommen dabei in straucheln, wenn bei eingeschalteter Optimierung nicht alles im "ARM-mode" kompiliert wird (und mglw. anderen Kombinationen). Aktuelle Version 4.2.1 habe ich dahingehend noch nicht getestet. Ansonsten passt das schon als Ersatz für __irq aus RealView bzw EWARM. Falls man diverse Kombination von thumb/thumb-interwork/Optimierung nutzen will entweder (1) ISR's mit attribut nacked versehen und inline-assembler Markos zur Sicherung/Rücksicherung von Registers, Status und Anpassung der Rücksprungaddresse einbinden oder (2) Assembler-Wrapper implementieren, der von IRQ-Vector aufgerufen wird. Letzteres erspart Anpassungen im C-Code und hält diesen recht portabel. Martin Thomas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.