avr/iom328p.h ist da, wird aber nicht anerkannt

Gast #5763872
Lesenswert?

Guten abend,
ich habe Probleme beim Einrichten von Eclipse. Eigentlich habe ich das 
AVR-Plugin installiert. Ich konnte auch ein Projekt dafür erstellen. 
Aber so ganz läuft es nicht.
Ich habe einen ATmega328P (arduino nano), den ich auch beim erstellen 
des Projekts gewählt habe.
Im code inkludire ich zuerst
1
#include <avr/io.h>
Wenn ich dort rein gehe, wird diese auch geöffnet. Wenn ich dann 
allerdings von dort avr/iom328p.h öffnen möchte, bekomme ich die Meldung
No include files were found that matched that name
Die Datai ist aber definitiv da.
Wenn ich im code die Deklaration von PB5 (diese lasse ich einfach nur 
Toggeln (LED)) öffne, öffnet sich die iom16.h

Also ist anscheinend der falsche Controller gewählt. Wo kann ich diesen 
denn ändern?
Im Internet sehe ich immer den weg unter Projekt->Properties->AVR
Doch in meinem Properties habe ich keine eintrag AVR
Ich habe die EclipseVersion 2018-12 (4.10.0)
Weiß jemand wie ich nachträglich den Controller ändern kann? Oder warum 
sich dieser geändert hat?

Frank
Gast #5764294
Lesenswert?

Wie finde ich das denn heraus?

von den in io.h includierten files kann fast keine gefunden werden. Aber 
alle sind im selben Ordner drinn.

Wenn ich anstelle von <avr/io.h> direkt <avr/iom328p.h> includiere, wird 
diese auch gefunden. Diese kann ich dann auch so in Eclipse öffnen.
Gast #5764311
Lesenswert?

Ahso,
ich kann die iom328p.h zwar includieren und wird dann auch geöffnet, 
Wenn ich aber bauen möchte, bekomme ich den fehler, dass ich die 
avr/io.h includieren soll (so wie es auch in der iom328p.h drinn steht).
Die wird also gefunden und kann auch angezogen werden. Aber wenn ich 
über io.h gehe, funktioniert es für diese nicht mehr. Oder liegt es 
daran, dass der Falsche controller gewählt worden ist?
Wie kann ich den denn ändern? Der Eintrag Project->Properties->AVR ist 
bei mir nicht vorhanden.
Gast #5764342
Lesenswert?

Zwei Sachen sind dafür relevant:

Der Suchpfad für Libraries. Kann man in den gängigen IDE's als 
Projekteinstellung anpassen, allerdings sollte der avr-gcc die Libraries 
der avr-libc von alleine finden können, da die default Pfade hardcodiert 
sind.

So kannst du sie prüfen:
1
stefan@stefanspc:~$ avr-gcc -v
2
Using built-in specs.
3
Reading specs from /usr/lib/gcc/avr/5.4.0/device-specs/specs-avr2
4
COLLECT_GCC=avr-gcc
5
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/5.4.0/lto-wrapper
6
Target: avr
7
Configured with: ../gcc/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr CFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong -Wformat ' CPPFLAGS='-Wdate-time -D_FORTIFY_SOURCE=2' CXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong -Wformat ' FCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong' FFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong' GCJFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong' LDFLAGS=-Wl,-z,relro OBJCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong -Wformat ' OBJCXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-5.4.0+Atmel3.6.1=. -fstack-protector-strong -Wformat '
8
Thread model: single
9
gcc version 5.4.0 (GCC)

Der entscheidente Teil ist hier: -libdir=/usr/lib

In diesem Verzeichnis befindet sich bei mir die avr-libc. Kontrolle.
1
stefan@stefanspc:/usr/lib$ cd /usr/lib/avr
2
stefan@stefanspc:/usr/lib/avr$ ls
3
bin  include  lib  x86_64-linux-gnu

Als zweites muss die avr/io.h irgendwie wissen, für welchen 
Mikrocontroller sie arbeiten soll. Dies ergibt sich in der Regel aus dem 
avr-gcc Kommandozeilenparamater "-mmcu=atmega8". Der Compiler definiert 
daraufhin das Makro "__AVR_ATmega__" (ohne Wert), welche innerhalb der 
avr/io.h abgefragt wird, um die spezifische Datei zu inkludieren.

In meinen generischen (nicht AVR spezifische) Entwicklungsumgebungen 
miss ich dieses Makro in den Projekteinstellungen hinzufügen, damit der 
Editor die Syntax meines Programm richtig prüfen kann. Ansonsten 
markiert sie sämtliche Register-Namen als unbekannt.
Gast #5764756
Lesenswert?

Hallo,
in den Eingenschften habe ich alle Pfade angepasst. Auch das es ein 
Atmega328p sein soll. In den Settings wurde das aber nicht übernommen. 
Dort kann ich es auch nicht ändern.

Bei avr-gcc -v kommt bei mir auch ein Pfad aus, den ich nirgendwo finden 
kann
--libdir=/home/toolsbuild/workspace/avr8-gnu-toolchain/avr8-gnu-toolchai 
n-win32_x86/lib

Diesen Pfad finde ich bei mir auf dem computer gar nicht. Oder wird der 
nur anders dargestellt?
Angehängte Dateien:
Gast #5764851
Lesenswert?

Ich habe jetzt das Makro definiert, aber beim Bauen sehe ich immer noch 
in der Ausgabe, das der Atmega16 gewählt wurde

avr-gcc -D__AVR_ATmega__ -Wall -Os -fpack-struct -fshort-enums 
-ffunction-sections -fdata-sections -std=gnu99 -funsigned-char 
-funsigned-bitfields -mmcu=atmega16 -DF_CPU=1000000UL -MMD -MP 
-MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
Angehängte Dateien:
Gast #5764875
Lesenswert?

> __AVR_ATmega__

Schau im Quelltext der io.h nach, wie das Makro genau heisst. Mit "(ohne 
Wert)" meinte ich, dass nur der Name des Makros definiert werden muss. 
Das war wohl irreführend.
1
stefan@stefanspc:~$ grep '__AVR_ATmega' /usr/lib/avr/include/avr/io.h 
2
#elif defined (__AVR_ATmega8U2__)
3
#elif defined (__AVR_ATmega16M1__)
4
#elif defined (__AVR_ATmega16U2__)
5
#elif defined (__AVR_ATmega16U4__)
6
#elif defined (__AVR_ATmega32C1__)
7
#elif defined (__AVR_ATmega32M1__)
8
#elif defined (__AVR_ATmega32U2__)
9
#elif defined (__AVR_ATmega32U4__)
10
#elif defined (__AVR_ATmega32U6__)
11
#elif defined (__AVR_ATmega64C1__)
12
#elif defined (__AVR_ATmega64M1__)
13
#elif defined (__AVR_ATmega128__)
14
#elif defined (__AVR_ATmega128A__)
15
#elif defined (__AVR_ATmega1280__)
16
#elif defined (__AVR_ATmega1281__)
17
#elif defined (__AVR_ATmega1284__)
18
#elif defined (__AVR_ATmega1284P__)
19
#elif defined (__AVR_ATmega128RFA1__)
20
#elif defined (__AVR_ATmega1284RFR2__)
21
#elif defined (__AVR_ATmega128RFR2__)
22
#elif defined (__AVR_ATmega2564RFR2__)
23
#elif defined (__AVR_ATmega256RFR2__)
24
#elif defined (__AVR_ATmega2560__)
25
#elif defined (__AVR_ATmega2561__)
26
#elif defined (__AVR_ATmega644RFR2__)
27
#elif defined (__AVR_ATmega64RFR2__)
28
#elif defined (__AVR_ATmega64__)
29
#elif defined (__AVR_ATmega64A__)
30
#elif defined (__AVR_ATmega640__)
31
#elif defined (__AVR_ATmega644__)
32
#elif defined (__AVR_ATmega644A__)
33
#elif defined (__AVR_ATmega644P__)
34
#elif defined (__AVR_ATmega644PA__)
35
#elif defined (__AVR_ATmega645__)
36
#elif (defined __AVR_ATmega645A__)
37
#elif (defined __AVR_ATmega645P__)
38
#elif defined (__AVR_ATmega6450__)
39
#elif (defined __AVR_ATmega6450A__)
40
#elif (defined __AVR_ATmega6450P__)
41
#elif defined (__AVR_ATmega649__)
42
#elif (defined __AVR_ATmega649A__)
43
#elif defined (__AVR_ATmega6490__)
44
#elif (defined __AVR_ATmega6490A__)
45
#elif (defined __AVR_ATmega6490P__)
46
#elif defined (__AVR_ATmega649P__)
47
#elif defined (__AVR_ATmega64HVE__)
48
#elif defined (__AVR_ATmega64HVE2__)
49
#elif defined (__AVR_ATmega103__)
50
#elif defined (__AVR_ATmega32__)
51
#elif defined (__AVR_ATmega32A__)
52
#elif defined (__AVR_ATmega323__)
53
#elif defined (__AVR_ATmega324P__)
54
#elif (defined __AVR_ATmega324A__)
55
#elif defined (__AVR_ATmega324PA__)
56
#elif defined (__AVR_ATmega325__)
57
#elif (defined __AVR_ATmega325A__)
58
#elif defined (__AVR_ATmega325P__)
59
#elif defined (__AVR_ATmega325PA__)
60
#elif defined (__AVR_ATmega3250__) 
61
#elif (defined __AVR_ATmega3250A__)
62
#elif defined (__AVR_ATmega3250P__)
63
#elif defined (__AVR_ATmega3250PA__)
64
#elif defined (__AVR_ATmega328P__)
65
#elif (defined __AVR_ATmega328__)
66
#elif defined (__AVR_ATmega329__)
67
#elif (defined __AVR_ATmega329A__)
68
#elif defined (__AVR_ATmega329P__) 
69
#elif (defined __AVR_ATmega329PA__)
70
#elif (defined __AVR_ATmega3290PA__)
71
#elif defined (__AVR_ATmega3290__)
72
#elif (defined __AVR_ATmega3290A__)
73
#elif defined (__AVR_ATmega3290P__)
74
#elif defined (__AVR_ATmega32HVB__)
75
#elif defined (__AVR_ATmega32HVBREVB__)
76
#elif defined (__AVR_ATmega406__)
77
#elif defined (__AVR_ATmega16__)
78
#elif defined (__AVR_ATmega16A__)
79
#elif defined (__AVR_ATmega161__)
80
#elif defined (__AVR_ATmega162__)
81
#elif defined (__AVR_ATmega163__)
82
#elif defined (__AVR_ATmega164P__)
83
#elif (defined __AVR_ATmega164A__)
84
#elif defined (__AVR_ATmega164PA__)
85
#elif defined (__AVR_ATmega165__)
86
#elif defined (__AVR_ATmega165A__)
87
#elif defined (__AVR_ATmega165P__)
88
#elif defined (__AVR_ATmega165PA__)
89
#elif defined (__AVR_ATmega168__)
90
#elif defined (__AVR_ATmega168A__)
91
#elif defined (__AVR_ATmega168P__)
92
#elif defined (__AVR_ATmega168PA__)
93
#elif defined (__AVR_ATmega168PB__)
94
#elif defined (__AVR_ATmega169__)
95
#elif (defined __AVR_ATmega169A__)
96
#elif defined (__AVR_ATmega169P__)
97
#elif defined (__AVR_ATmega169PA__)
98
#elif defined (__AVR_ATmega8HVA__)
99
#elif defined (__AVR_ATmega16HVA__)
100
#elif defined (__AVR_ATmega16HVA2__)
101
#elif defined (__AVR_ATmega16HVB__)
102
#elif defined (__AVR_ATmega16HVBREVB__)
103
#elif defined (__AVR_ATmega8__)
104
#elif defined (__AVR_ATmega8A__)
105
#elif defined (__AVR_ATmega48__)
106
#elif defined (__AVR_ATmega48A__)
107
#elif defined (__AVR_ATmega48PA__)
108
#elif defined (__AVR_ATmega48PB__)
109
#elif defined (__AVR_ATmega48P__)
110
#elif defined (__AVR_ATmega88__)
111
#elif defined (__AVR_ATmega88A__)
112
#elif defined (__AVR_ATmega88P__)
113
#elif defined (__AVR_ATmega88PA__)
114
#elif defined (__AVR_ATmega88PB__)
115
#elif defined (__AVR_ATmega8515__)
116
#elif defined (__AVR_ATmega8535__)

Kommt Dir einer davon bekannt vor?

> -mmcu=atmega16

Das ist auch falsch. Irgendwo in deinen Projekteinstellungen ist immer 
noch der falsche Mikrocontroller eingestellt.

> AVRDUDEOPTIONS -p16

Auch das wäre nur für den ATmega16 richtig. Ändere das mal auf 
"atmega328p" (avrdude unterstützt lange und kurze Schreibweise).

Beachte, dass du einige Einstellungen (z.B. dein mittlerer Screenshot) 
für Debug und Release Builds separat einstellen kannst/musst.
Gast #5764890
Lesenswert?

Stefanus F. schrieb:
> Das ist auch falsch. Irgendwo in deinen Projekteinstellungen ist immer
> noch der falsche Mikrocontroller eingestellt.

Das ist ja das problem. Ich finde keine Einstellung wo ich das machen 
kann.

Im Bild Properties.png habe ich es auf atmega328p gestellt.

In Settings wurde es aber nicht übernommen. dort steht immer noch 
atmega16

In Symbols kann ich zwar Define Syms (-D) angeben, aber nicht den 
ControllerTyp (-mmcu)
Gast #5764901
Lesenswert?

Stefanus F. schrieb:
> Dann lege doch einfach ein neues Projekt an und stelle dieses mal von
> Anfang an den richtigen µC ein.

Ich habe beim erstellen dieses Projektes den richtigen Controller 
angegeben. Aber der wurde, warum auch immer,nicht übernommen.

Ich hatte auch schon einmal ein neues PRojekt angelegt. Aber das 
Verhalten ist immer das selbe. Beim Anlegen kann ich zwar den Controller 
ändern, aber im Projekt springt der dann immer wieder auf dem ATmega16 
zurück
Gast #5764907
Lesenswert?

Frank schrieb:
> Stefanus F. schrieb:
>> Dann lege doch einfach ein neues Projekt an und stelle dieses mal von
>> Anfang an den richtigen µC ein.
>
> Ich habe beim erstellen dieses Projektes den richtigen Controller
> angegeben. Aber der wurde, warum auch immer,nicht übernommen.
>
> Ich hatte auch schon einmal ein neues PRojekt angelegt. Aber das
> Verhalten ist immer das selbe. Beim Anlegen kann ich zwar den Controller
> ändern, aber im Projekt springt der dann immer wieder auf dem ATmega16
> zurück

Vielleicht kommst du mit einer anderen IDE besser klar, zum Beispiel QT 
Creator.
#5846470
Lesenswert?

Das AVR-Plugin hatte mal nen Bug der sich folgendermaßen äußerte:

Es war zwar der richtige Controller eingestellt aber benutzt hat er die 
Header für nen anderen Controller.

Geholfen hat dann immer:

* Einstellungen öffnen, irgendeinen anderen Controller einstellen, 
speichern.
* Einstellungen öffnen, wieder den richtigen Controller einstellen, 
speichern.

Danach war der Fehler für dieses Projekt ein für allemal behoben, es 
tauchte nur immer bei neu angelegten Projekten auf!
#5846483
Lesenswert?

Matthias H. schrieb:
> Hatte ein ähnliches Problem, Einstellungen werden nicht akzeptiert bzw.
> AVR->Target Hardware nicht vorhanden. Liegt vermutlich daran, dass das
> AVR-Plugin von neueren Eclipse-Versionen nicht mehr vollständig
> unterstützt wird. Ich habe das ältere Eclipse 3.8.1 installiert. Damit
> hat es dann funktioniert.

Ich hab das seit einiger Zeit auch und erst kürzlich bemerkt, daß wohl 
beim Anlegen eines neuen Projekts die "AVR-Nature" nicht hinzugefügt 
wird. Dann wird für "ATmega16" übersetzt.
 Wenn man die fehlende Nature von Hand hinzufügt, dann funktioniert 
wieder alles wie gewohnt. Ich kann nur aktuell mangels Eclipse auf dem 
IPad nicht genau beschreiben welche Clicks dafür notwendig sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren