Forum: Compiler & IDEs Interrupt-Fehler bei Minimal-Programm??


von Thommy (Gast)


Lesenswert?

Hallo,

ich suche bereits länger nach einem Interrupt-Fehler bzw. -Warnung 
(wobei ich jede Warnung ernst nehme). Leider hat mich jetzt die 
Reduktion des Programms auf ein Minimum auch nur Zeit gekostet und keine 
Erkenntnisse gebracht. Ich verstehe das Ganze nicht. Das Programm ist 
mittlerweile sehr kurz:
1
#include <inttypes.h>
2
#include <avr/interrupt.h>
3
#include <avr/io.h>
4
#include <stdlib.h>
5
6
ISR(USART_RX_vect) {
7
  UDR0;
8
}
9
10
int main() {
11
  while (1);
12
}

avr-gcc 4.8.1 (offizielle Version von Atmel) sagt jede Mal:
1
In function '__vector_18':
2
test.c:6:1: warning: '_vector_18' appears to be a misspelled signal handler [ena
3
bled by default]
4
 ISR(USART_RX_vect) {
5
 ^

Sind eventuell die Header-Dateien kaputt? Ich habe nichts Auffälliges 
gefunden. Das AVR-Studio habe ich jetzt schon mehrfach runtergeladen und 
neu installiert. Ich kann aber nicht ausschließen, dass mein Windows 
etwas hat. Will es aber ungerne neu installieren, weil ich schon 
genügend Zeit verloren habe. :(

von Konrad S. (maybee)


Lesenswert?

Magst du noch verraten, für welchen Controller das ist?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Die Warnung tritt nur in 4.8.2 auf:

http://gcc.gnu.org/PR59396

Falls ein Distributor das Problem auf eine andere Version zurückportiert 
hat, tritt die Warnung auch dort auf.

von Klaus W. (mfgkw)


Lesenswert?

Für welchen Controller?

Es gibt ja auch welche mit 2 U(S)ART, dann heißt die ISR natürlich etwas 
anders (mit 0 oder 1).

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> Für welchen Controller?
>
> Es gibt ja auch welche mit 2 U(S)ART, dann heißt die ISR natürlich etwas
> anders (mit 0 oder 1).

Dann sähe die Warnung aber auch anders aus.

von Klaus W. (mfgkw)


Lesenswert?

ach ja, und ist ja auch nur eine Warnung.

von g457 (Gast)


Lesenswert?

> ISR(USART_RX_vect) {
          ^^
>   UDR0;
       ^
> }

..da passt was nicht zusammen.

von Konrad S. (maybee)


Lesenswert?

Deshalb meine Frage nach dem Controller.

von Thommy (Gast)


Lesenswert?

-mmcu=atmega328p

Hmmmmmmm. Inwiefern passt das nicht zusammen? Auch wenn ich in der ISR 
was anderes tue, um eine Dummyaktivität zu kreieren, jammert der 
Compiler. Und ich nehme jede Warnung ernst. Eine Warnung ist für mich 
nie "nur" eine Warnung!

von Oliver S. (oliverso)


Lesenswert?

Thommy schrieb:
> -mmcu=atmega328p
>
> Hmmmmmmm. Inwiefern passt das nicht zusammen?

Das genau ist die Frage.
Schau noch mal ins Datenblatt, wie die Vectoren genau heißen.

Oliver

von Fuse (Gast)


Lesenswert?

Thommy schrieb:
> Eine Warnung ist für mich
> nie "nur" eine Warnung!

Ok, dann: Diese Warnung benötigt eine Besondere Übersetzung.

Der Compiler Sagt zwar:
> warning: '_vector_18' appears to be a misspelled signal handler
meint aber eigentlich:
> Achtung! Ich bin eine alte, vom Distributor schlecht gepatchte Version! Bitte 
aktualisier mich!

:)

von Thommy (Gast)


Lesenswert?

Hmmmm. Wo bekomme ich denn dann eine aktuellere Version?

von Fuse (Gast)


Lesenswert?

Thommy schrieb:
> Hmmmm. Wo bekomme ich denn dann eine aktuellere Version?

Für Windows? Keine Ahnung.

Aber: Schau dir vielleicht mal die GCC-Quelltext-Schnippsel an, die für 
diese Warnung verantwortlich sind:

Aus einem anderen Grund (führendes Sonderzeichen abschneiden) wurde der 
Char-Pointer auf den Funktionsnamen um eins inkrementiert 
weiterverarbeitet. d.H. der erste Buchstabe wurde weggeschnitten. Aus 
"__vector_18" wurde dabei also "_vector_18".

Weiter hinten/an anderer Stelle erfolgt dann die Prüfung auf gültige 
IRQ-Vektoren-Namen. Dabei wird eben auf "__vector" geprüft.
=> es gibt die von dir gesehene Warnung.

diese ist, wenn du dir das im GCC-Source gesehen hast, ein rein 
kosmetisches Problem => ignorieren.

von Thommy (Gast)


Lesenswert?

Das beruhigt mich eigentlich nicht. Mein Chef verlangt z.B. sogar 
-Werror
Und so ein alter und schwer wiegender Bug sollte doch längt gefixt sein? 
Er verursacht ja eine Menge Zeitverlust durch Irreführung, nicht nur bei 
mir. Zumal es auch 4.9.0 gibt, oder? Ich würde auch selbst kompilieren, 
weiß aber nicht wie. Hat jemand eine Ahnung, wie man den avr-gcc unter 
Windows kompiliert?

von Fuse (Gast)


Lesenswert?

Thommy schrieb:
> Und so ein alter und schwer wiegender Bug sollte doch längt gefixt sein?

Ist er ja auch. Hat halt etwas länger gedauert.
So Juli 2013 ist der Bug in die 4.8er Schiene aufgenommen worden.
Dez. 2013 ist er entdeckt&gemeldet worden.
März 2014 ist dann die gefixte Version released worden...

Und "Schwerwiegend" sind für die GCC-Entwickler garkeine AVR-Bugs.

von Thommy (Gast)


Lesenswert?

Link?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Thommy schrieb:
> Das beruhigt mich eigentlich nicht. Mein Chef verlangt z.B. sogar
> -Werror

Die Warnung tritt ja nur beim Linken mit -flto auf.  Du kannst also beim 
Linken zusätzlich -w angeben.

von Thommy (Gast)


Lesenswert?

Hmmmm, was meinst du mit "Linken". Ich kompiliere so:

avr-gcc -xc *.c [DIVERSE PARAMETER] -I. -mmcu=atmega328p 
-Wl,-Map=test.map -o test.elf

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Thommy schrieb:
> Hmmmm, was meinst du mit "Linken". Ich kompiliere so:

Bei der Frage... ist es wohl das einfachste, du nimmst -flto aus
"[DIVERSE PARAMETER]" raus.

Oder du besorgst dir eine 4.8.3, die enthält auch Fixes für "richtige" 
Bugs, also für solche, die zu falschem Code führen können.

von Thommy (Gast)


Lesenswert?

Ja, ich spare mir eben das extra Linken aus Faulheit und mache alles in 
einem Schritt. Warum auch nicht, ging früher auch. Und -flto brauche ich 
wegen der Codegröße zwingend.

Und natürlich würde ich viel lieber die 4.8.3 oder 4.9.0 installieren, 
habe aber keine Quelle für ein Binary. Ich verstehe nicht so ganz, warum 
gcc die AVR-Geschichte überhaupt einbaut, wenn anscheinend kein 
Interesse an Support oder Testern besteht. Ich bin ja kein Einzelfall, 
wie eine Google-Suche gezeigt hat. Wären Binarys zum Testen verfügbar, 
gäbe es sicher eine Menge Rückmeldungen mehr... aber anscheinend ist das 
ja nicht erwünscht!? Vorsicht Kunde? Es könnten noch mehr Fehler 
entdeckt werden?

von Oliver S. (oliverso)


Lesenswert?

Thommy schrieb:
> Ich verstehe nicht so ganz, warum
> gcc die AVR-Geschichte überhaupt einbaut, wenn anscheinend kein
> Interesse an Support oder Testern besteht.

Du bellst den falschen Baum an, und das gleich zweifach (nicht, daß das 
irgend eine Baum groß stören würde, aber trotzdem)

Du benutzt nicht "den" gcc, sondern das, was Atmel daraus gemacht hat. 
Ein Original 4.8.1 hat den Fehler nicht, wie weiter oben ja schon steht. 
Also beschwer dich bei Atmel.

Und Johann ist mit Sicherheit auch nicht das Ziel deines Unmuts.

Ansonsten ist die Sache einfach: gcc ist Open source. Du darfst da jeden 
Fehler, der dir auffällt, gerne selber beheben. Von alleine beheben die 
sich leider nicht.

Oliver

von Peter D. (peda)


Lesenswert?

Thommy schrieb:
> Und -flto brauche ich
> wegen der Codegröße zwingend.

In der Regel kann der Programmierer viel besser optimieren, als jede 
Linkeroption.

Oftmals enthält Code viele sich ähnelnde Copy&Paste Sequenzen. Wenn man 
da sinnvoll Unterfunktionen und Arrays einsetzt, lassen sich schnell 50% 
und mehr einsparen.

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.