PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Naked-ISR: Fehler im GCC-Tutorial?! Oder spinnt mein gcc...



maddav2005
14.08.2007, 19:23
Hi,

also entweder ist mein gcc Version 4.1.1 (beim WinAVR dabei) schon veraltet, oder es gibt einen Fehler im gcc-Artikel auf der Seite.
Und zwar hier: :arrow: https://www.roboternetz.de/wissen/index.php/Avr-gcc#ISR_mit_eigenem_Prolog.2FEpilog

von diesem Beispiel-Source (Naked-Interruptroutine) rastet gcc endgültig aus und schreit nur noch:

"../gccasmtest.c:38: internal compiler error: in start_function, at c-decl.c:6014
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=browse> for instructions."

Nach einer Suche im Handbuch (*RTFM* O:) ) ist mir Folgendes unterlaufen:



void TIMER0_OVF_vect (void) __attribute__ ((naked));

// ...

void TIMER0_OVF_vect (void)
{
asm volatile( // irgendwas halt... nur zum Testen ob das Prob mit Inline-asm zusammenhängt?!
"nop" "\n\t"
"reti"
);
}


damit funkt das Ganze. Bin ich mit meinem gcc veraltet oder liegt es am Wiki? Wollt nicht gleich reinpfuschen 8-[

Gruß,
David

Razer
14.08.2007, 21:47
Hast du die avr/interrupt.h inkludiert?

maddav2005
14.08.2007, 21:58
sicher doch O:)

franzl
14.08.2007, 22:00
Hi,
dann währ es vielleicht von Vorteil das ganze Programm zu posten.
mfg franz

SprinterSB
15.08.2007, 14:18
Es handelt sich offenbar um einen bekannten Fehler (im Bug-Report tritt er bei main() auf, aber das tut wohl nichts wesentliches zur Sache).
GCC 4.x ist eben noch nicht in trockenen Tüchern... egal wie deine Quelle auch aussieht, gcc sollte niemals nicht auf einen ICE laufen!

Was den Artikel angeht, ist eher der veraltet als GCC 4, weil die Artikel sich auf avr-gcc 3.4.x bezieht.

Evtl. kommt die Verwirrung daher, weil du einen Prototypen für eine ISR schreibst. Versuch stattdessen mal direkt die Implementierung mittels

void __attribute__ ((naked)) TIMER0_OVF_vect (void)
{
// mach was
}

maddav2005
15.08.2007, 18:19
mhm, ging ja eben darum, dass gcc mit dieser direkten Implementierung abstürzt. Bei Deklaration eines Prototypen funktioniert es allerdings.

OT: btw: ich denke mal, unter ICE verstehst du In-Circuit-Emulator (immer diese verdammten Abkürzungen die noch Hunderte von Bedeutungen haben...) - besitze ich 1. nicht, aber trotzdem: wieso nicht mit gcc?

Aber dann muss ich den Bug ja nicht posten, wenn er schon bekannt ist. Danke für die Info.

SprinterSB
16.08.2007, 12:19
Sorry... ICE = Internal Compiler Error

Wenn mit Prototyp der Code stimmt, ist das als Workaround ja erträglich.