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


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

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.