Forum: Mikrocontroller und Digitale Elektronik probleme mit der Syntax __irq in Ecllipse


von Ahmad A. (Firma: rwth) (ahmad)


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.

von Εrnst B. (ernst)


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

von Ahmad A. (Firma: rwth) (ahmad)


Lesenswert?

Danke für die sehr schnelle Antwort. Ich benutze die "Yagarto GNU ARM 
tolchain". Werde es gleich mal ausprobieren...

Danke
Ahmad

von mthomas (Gast)


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

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
Noch kein Account? Hier anmelden.