mikrocontroller.net

Forum: Compiler & IDEs avr-g++/avr-as: __gcc_isr not supported


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

hatte gerade ein upgrade auf avr-g++ 8.1.0 (Arch Linux) durchgeführt. 
Nun gibt es bei einigen Projekten für den atmega324pb in den ISRs die 
folgende Fehlermeldung des avr-as:
/tmp/ccNSdzR0.s: Assembler messages:
/tmp/ccNSdzR0.s:141: Error: pseudo instruction `__gcc_isr' not supported
/tmp/ccNSdzR0.s:156: Error: pseudo instruction `__gcc_isr' not supported
/tmp/ccNSdzR0.s:158: Error: pseudo instruction `__gcc_isr' not supported

Die avr-as Versionen sind: 2.30 und 2.30.51.20180507. Beide produzieren 
diesen Fehler.

Bei einem Target atmega328pb etwa gibt es diesen Fehler nicht.

Es lässt sich natürlich mit -mno-gas-isr-prologues beheben, doch dann 
habe ich ja die optimierte Gestaltung der push/pop-Sequenzen für die 
ISRs nicht mehr.

Hier ist wahrscheinlich Johann gefragt ;-)

Der Fehler passiert auch mit folgendem Minimalbeispiel:
#include <avr/interrupt.h>

int main() {
}

ISR(TIMER0_COMPA_vect) {
}

Vermutung: da das Target atmege324pb ja nicht beim avr-g++ dabei ist, 
habe ich die device-specs aus der Atmel-Distribution (1.2.209) 
verwendet. Könnte es damit etwas zu tun haben?

: Bearbeitet durch User
Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Lösung:

man muss bei dem target -mmcu=atmega324pb explizit auch die 
Assembler-Option

 -Wa,-mgcc-isr

mitgeben.

Warum das in der toolchain für den atmega324pb nicht automatisch 
geschieht, ist mit noch schleierhaft.

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Lösung2:

in den device-specs des atmega324pb fehlte einfach:

*asm_gccisr:
        %{!mno-gas-isr-prologues: -mgcc-isr}

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hinweis:

es scheint so zu sein, dass

*asm_gccisr:
        %{!mno-gas-isr-prologues: -mgcc-isr}

in keinem von MicroChip zur Verfügung gestelltem specs-atmega* file 
enthalten ist. Nur die specs-*, die über das avr-gcc package installiert 
werden, haben diesen Zusatz.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Hallo zusammen,
>
> hatte gerade ein upgrade auf avr-g++ 8.1.0 (Arch Linux) durchgeführt.
> Nun gibt es bei einigen Projekten für den atmega324pb in den ISRs die
> folgende Fehlermeldung des avr-as:
>
> /tmp/ccNSdzR0.s:141: Error: pseudo instruction `__gcc_isr' not supported

Beim configure von avr-gcc wird getestet, ob avr-Binutils bestimmte 
Features implementiert.  Verhalten sich die dann tatsäcghlich 
installierten Binutils anders, kann dies zu Inkonsistenzen oder anderen 
Problemen führen.

http://gcc.gnu.org/gcc-8/changes.html#avr

Hier ist es dann wohl so gewesen, dass die beim configure gefundenen 
Binutils mehr konnten als die später auf dem Host verwendeten.

Kompliziert wird es dann bei Canadian-Cross Buils, d.h. Host != Target 
!= Build != Host; typischerweise

Build  = x86_64-linux-gnu
Host   = mingw
Target = avr

Hier wird dann davon ausgegangen, dass die späteren Host-Tools (avr-gcc 
unter mingw) sich so verhalten wie die Build-Tools (avr-gcc unter 
x86_64-linux).

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und was die specs angeht: das Programm, dass die specs erzeugt 
(gen-avr-mmcu-specs.c auf build) erlaubt via
#ifdef HAVE_AS_AVR_MGCCISR_OPTION
  fprintf (f, "*asm_gccisr:\n%s\n\n",
           "\t%{!mno-gas-isr-prologues: -mgcc-isr}");
#endif // have avr-as -mgcc-isr
Aufschluß darüber, zu welchen Schlüssen configure so gekommen ist; hier 
also ob HAVE_AS_AVR_MGCCISR_OPTION gesetzt war oder nicht.

http://gcc.gnu.org/viewcvs/gcc/trunk/gcc/config/avr/gen-avr-mmcu-specs.c?revision=256169&view=markup#l228
http://gcc.gnu.org/viewcvs/gcc/trunk/gcc/configure.ac?revision=256169&view=markup#l3829

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.