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.
von Wilhelm M. (wimalopaan)


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:
1
/tmp/ccNSdzR0.s: Assembler messages:
2
/tmp/ccNSdzR0.s:141: Error: pseudo instruction `__gcc_isr' not supported
3
/tmp/ccNSdzR0.s:156: Error: pseudo instruction `__gcc_isr' not supported
4
/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:
1
#include <avr/interrupt.h>
2
3
int main() {
4
}
5
6
ISR(TIMER0_COMPA_vect) {
7
}

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
von Wilhelm M. (wimalopaan)


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.

von Wilhelm M. (wimalopaan)


Lesenswert?

Lösung2:

in den device-specs des atmega324pb fehlte einfach:

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

von Wilhelm M. (wimalopaan)


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.

von Johann L. (gjlayde) Benutzerseite


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).

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

...und was die specs angeht: das Programm, dass die specs erzeugt 
(gen-avr-mmcu-specs.c auf build) erlaubt via
1
#ifdef HAVE_AS_AVR_MGCCISR_OPTION
2
  fprintf (f, "*asm_gccisr:\n%s\n\n",
3
           "\t%{!mno-gas-isr-prologues: -mgcc-isr}");
4
#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]
  • [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.