Forum: Compiler & IDEs Code::Blocks: AVR - Compiler-Kommandozeile bekommt Host-Optionen


von Marie L. (lendl)


Lesenswert?

Hallo Kolleg:innen,

ich bekomme bei Kompilieren mit Code::Blocks (20.03) auf einem 
Linux-Mint PC folgende Fehlermeldung:
1
------------- Build: Debug in test3 (compiler: GNU GCC Compiler for AVR)---------------
2
3
avr-gcc -Wall -mmcu=atxmega128a1u -DF_CPU=2000000UL -g -Os -I/usr/include -c main.c -o obj/Debug/main.o
4
avr-gcc -L/usr/lib -o bin/Debug/test3.elf obj/Debug/fuse.o obj/Debug/main.o  -mmcu=atxmega128a1u -Wl,-Map=bin/Debug/test3.map,--cref  
5
In file included from /usr/include/math.h:43:0,
6
                 from /usr/lib/avr/include/util/delay.h:46,
7
                 from main.c:5:
8
/usr/include/bits/floatn.h:75:1: Fehler: Unbekannter Maschinenzustand »__TC__«
9
 typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
10
 ^
11
/usr/include/bits/floatn.h:87:9: Fehler: unbekannter Typname: »__float128«
12
 typedef __float128 _Float128;
13
         ^
14
main.c: In Funktion »main«:
15
main.c:22:5: Fehler: expected declaration or statement at end of input
16
     }
17
     ^
18
Process terminated with status 1 (0 minute(s), 0 second(s))
19
3 error(s), 0 warning(s) (0 minute(s), 0 second(s))

Auf einem zweiten Linux-Mint PC mit (vermeindlich) gleicher 
Konfiguration funktioniert es ohne Probleme. Ich habe alle Einstellungen 
verglichen, kann aber keinen Unterschied feststellen.

Vielleicht hat jemand eine Idee oder einen Denkanstoß.
Ich bin Bascom-Umsteiger und gerade erst dabei C zu lernen, also habt 
Nachsicht :-)


Hier noch der äußerst anspruchsvolle Code:
1
//#define F_CPU 2E6
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
int main(void)
6
{
7
  //DDRD |= (1<<PD0);
8
   PORTC.DIR = PIN0_bm | PIN1_bm;
9
    /* Replace with your application code */
10
    while (1)
11
    {
12
      //PORTD = (1<<PD0);
13
      //PORTC.OUTSET |= (1<<PIN1);
14
      PORTC.OUTSET = PIN0_bm;
15
      _delay_ms(1000);
16
      //PORTD &= ~(1<<PD0);
17
      //PORTC.OUTSET &= ~(1<<PIN1);
18
      PORTC.OUTCLR = PIN0_bm;
19
      _delay_ms(1000);
20
    }

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nein, du hast keinen "unbekannten Maschinenzustand", sondern 
Code::Blocks schreibt aus irgendeinem Grund explizit ein 
-I/usr/include (und -L/usr/lib) in die Compiler-Kommandozeile.

Die gehören da nicht hin.

Die Frage ist also, warum sie da Dinge vom Host hinein mischen, wenn für 
einen AVR compiliert werden soll.

Edit:

Ich habe den Titel mal editiert, damit sich vielleicht potenzielle 
Antworter einfinden können, die sich mit Code::Blocks für AVR auskennen.

: Bearbeitet durch Moderator
von Hmmm (Gast)


Lesenswert?

Jörg W. schrieb:
> Die Frage ist also, warum sie da Dinge vom Host hinein mischen, wenn für
> einen AVR compiliert werden soll.

...bzw. warum sie überhaupt Directory-Parameter mitgeben.

Jörg W. schrieb:
> Ich habe den Titel mal editiert, damit sich vielleicht potenzielle
> Antworter einfinden können, die sich mit Code::Blocks für AVR auskennen.

Settings - Compiler - "GNU AVR GCC Compiler" auswählen, dann unter 
"Search directories" bei Compiler und Linker jeweils das eingetragene 
Directory entfernen.

Vorsicht, nach einer automatischen Compiler-Erkennung beim Start (z.B. 
weil eine der anderen konfigurierten Toolchains deinstalliert wurde) 
könnten die wieder auftauchen.

von Marie L. (lendl)


Lesenswert?

Super, vielen Dank!
Das war die Lösung!

Jetzt habe ich mit Geany und Code::Blocks zwei IDEs mit denen ich meinen 
Xmega programmieren kann. Meiner steilen C-Programmierer Karriere steht 
also nichts mehr im Weg :-) außer meiner mangelhaften C-Kenntnisse :-)

Eine kleine Frage hätte ich allerdings noch:
Beim Erstellen eines neuen AVR-Projekts in Code::Blocks kann ich nur den 
atxmega128a1u auswählen. Ich habe aber den atxmega128a4u.
Macht das irgendwelche Probleme, bzw. kann ich irgendwie diese 
Auswahlliste aktualisieren?

Vielen Dank!

von Hmmm (Gast)


Lesenswert?

Marie L. schrieb:
> Meiner steilen C-Programmierer Karriere steht
> also nichts mehr im Weg :-) außer meiner mangelhaften C-Kenntnisse :-)

Das wird schon, genug Motivation scheint ja vorhanden zu sein.

Marie L. schrieb:
> Macht das irgendwelche Probleme, bzw. kann ich irgendwie diese
> Auswahlliste aktualisieren?

Wenn Dir die Haken im Menü wichtig sind, kannst Du options_avr-gcc.xml 
editieren.

Ansonsten entfernst Du einfach in Project - Build options - Compiler 
Flags alle MCU-Haken und setzt den Parameter stattdessen von Hand unter 
"Other compiler options" rein: -mmcu=atxmega128a4u

von Marie L. (lendl)


Lesenswert?

Super, vielen Dank!

von Thomas P. (tomson68)


Lesenswert?

Die Datei floatn.h wie folgt ändern:


1.) Auskommentieren:
// typedef Complex float __cfloat128 __attribute_ ((_mode_ 
(_TC_)));

2.) Änderung
 typedef __float128 _Float128;
in:
 typedef long double _Float128;

von Hmmm (Gast)


Lesenswert?

Thomas P. schrieb:
> Die Datei floatn.h wie folgt ändern

Du gräbst einen alten und erledigten Thread aus, um eine "Lösung" zu 
präsentieren, die darin besteht, ein Header-File kaputtzumachen?

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.