probleme mit der Syntax __irq in Ecllipse

OP (Firma: rwth) #638659
Lesenswert?

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.
#638671
Lesenswert?

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
Gast #638696
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren