Forum: Mikrocontroller und Digitale Elektronik AVR-Eclipse Auto-vervollständigung /-syntax bei <avr/io.h>


von Max (Gast)


Lesenswert?

Hallo,

ich hatte mal eine Frage bezüglich AVR Eclipse.
Ist es möglich die Auto-vervollständigung /-syntax in Abhängigkeit des 
Targets einzustellen?

Beispiel:
1
// Target: atxmega256a3
2
3
#include <avr/io.h>
4
5
int main(void)
6
{
7
8
  PORTF.IN;
9
10
  return 1;
11
}

Die Autosyntax-Prüfung meckert immer rum das PORTF.IN nicht gefunden 
werden konnte. (Manuelles Kompilieren = 0 Errors)

Autovervollständigung funktioniert so auch nicht.

In den Projekteigenschaften ist Hardware Taget richtig gesetzt.

Kann man das irgendwo einstellen?

Wäre euch sehr dankbar bei Unterstützung.

mfg
Max
von spess53 (Gast)


Lesenswert?

Hi

Versuche es mal mit einem C-Buch und mit

xyz = PORTF.IN;

MfG Spess
von Max (Gast)


Lesenswert?

Was hat das damit zu tun?

Ich wollte damit nur verdeutlich das die Autovervollständigung nicht bei 
<avr/io.h> Funktioniert.

(Manuelles Kompilieren = 0 Errors)


Wenn ich jetzt z.B. zusätzlich die <avr/iox256a3.h> einbinde 
Funktioniert zwar die Autovervollständigung und Autosyntax-Prüfung. Aber 
das richtige Kompilieren schlägt fehl.
1
// Target: atxmega256a3
2
3
#include <avr/io.h>
4
#include <avr/iox256a3.h>
5
6
int main(void)
7
{
8
9
  PORTF.IN;
10
11
12
  return 1;
13
}


Einer eine Idee? Ich wäre euch sehr Dankbar.
von hp-freund (Gast)


Lesenswert?

Im Normalfall benutzt:

#include <avr/io.h>

das zu µC passende ioxxxxx.h

Dazu muss der Typ natürlich im Projekt oder Makefile definiert sein.
von Max (Gast)


Lesenswert?

Das Target ist richtig eingestellt.

Projekt Properties -> AVR -> Target Hardware -> ATXmega256A3
-mmcu=atxmega256a3 ist auch eingetragen

Das manuelle Kompilieren Funktioniert ja auch nur nicht die 
Autovervollständigung und die Autosyntaxprüfung.
von Luke (Gast)


Lesenswert?

Das Problem habe ich auch gerade (naja, mehr oder weniger). Ich hatte am 
Anfang das Projekt für den mega8 erstellt. Nun auf den Tiny2313 
umgestellt (klappt auch alles). Aber bei der Autovervollständigung 
blendet Eclipse mir immer noch Elemente des mega8 ein (sehe ich z.B. an 
den Timer INT Vectoren). Irgendjemand eine Idee?
von Oliver (Gast)


Lesenswert?

Da der mcu-Typ über eine Compileroption eingestellt wird, die der 
Eclipse-Editor weder sieht noch kennt, sind für den die mcu-abhängigen 
defines nicht definiert. Daher kann der auch nichts 
"auto-vervollständigen".

Oliver
von Luke (Gast)


Lesenswert?

Aber er macht es ja, nur eben für den falschen Typ. Gibt es also 
irgendwo einen "default" Typ per #define festgelegt, dessen typahängigen 
Dinge er dann bezieht?
von Michael K. (mmike)


Lesenswert?

Das Problem hatte ich auch mal. Folgendes hat die Lösung gebracht:

Folgende Datei: <${projectname}.sc> löschen.
Zu finden unter 
<${workspace}/.metadata/.plugins/org.eclipse.cdt.make.core/>

scheint ein Eclipse CDT bug zu sein ...

Grüße,
Michael
von Luke (Gast)


Lesenswert?

Michael K. schrieb:
> Folgende Datei: <${projectname}.sc> löschen.
>
> Zu finden unter
>
> <${workspace}/.metadata/.plugins/org.eclipse.cdt.make.core/>

Hat leider nicht geholfen. Was ich nun aber fesgestellt habe, dass die 
typspezifischen defines natürlich dann auch falsch ersetzt werden (z.B. 
OCIE1A wird mit 4 ersetzt, anstatt mit 6). Hilft es da echt nur das 
Projekt für den anderen Controller neu aufzusetzen. Das kann ich 
irgendwie nicht ganz glauben, irgendwo muss das doch definiert sein.
von Michael K. (mmike)


Lesenswert?

Hast du in den Projekteinstellungen auch den richtigen Proz ausgewählt?

Grüße,
Michael
von Luke (Gast)


Lesenswert?

Urspünglich nicht. Ich habe es dann aber geändert. Aber wie gesagt, 
Eclipse includiert weiterhin die falsche IO.h. In der Konsole sehe ich 
aber beim Bauen, dass er sich auf den richtigen Proz bezieht. Nur wie 
gesagt, Autovervollständigung mit den falschen Namen (kleines Problem) 
und falsche Auflösung der #define Werte (Riesenproblem).
Ich werde das Projekt wohl neu aufsetzen müssen und den richtigen Prozi 
wählen, finde es aber echt verwunderlich, dass man das nicht im 
nachhinein ändern kann. :(
von Michael K. (mmike)


Lesenswert?

Das sollte eigentlich schon funktionieren ... schon mal versucht die 
Indizierung komplett neu erstellen zu lassen ... bin momentan in der 
Arbeit, aber ich schau heute abend mal nach ...

Grüße,
Michael
von Michael K. (mmike)


Lesenswert?

Hallo Luke,

also:

1. In den Projekteinstellungen (Properties) unter "AVR" (AVR-Plugin 
sollte installiert sein) bei "Target Hardware" den entsprechenden Proz 
und die Taktrate einstellen.
2. In den Projekteinstellungen (Properties) unter "C/C++ General" bei 
"Paths and Symbols" die Verzeichnisse setzen in denen die include 
Dateien von WinAVR liegen (bei sind das: 
c:/winavr20100110/lib/gcc/avr/4.3.3/include, 
c:/winavr20100110/lib/gcc/avr/4.3.3/include-fixed, 
c:/winavr20100110/avr/include)
3. Auf das Projekt mit der rechten Maustaste klicken und bei "Index" den 
Eintrag "Freshen all files" anklicken. Damit wird der Index komplett neu 
erstellt.
4. Eclipse schließen und die entsprechende sc-Projektdatei löschen 
move/delete the ${projectname}.sc file found under 
${workspace}/.metadata/.plugins/org.eclipse.cdt.make.core)
5. Eclipse neu starten und Punkt 3 wiederholen.
6. GGf. mit dem Include Browser schauen, welche Proz-Datei inkludiert 
wird (bei mir wars anfangs immer die iom16.h) ...

Viel Erfolg,

Michael
von Luke (Gast)


Lesenswert?

Hallo Michael,

super Anleitung, hat nun geklappt. Ich hatte nach dem Löschen der 
.sc-Datei nie den Index neu gebaut.
Auf jeden Fall klappt es nun: die richtige IO wird eingebunden und die 
Auflösungen der einzelnen defines passen nun zum ausgewähltem µC.

Vielen Dank.

Luke.
von Michael K. (mmike)


Lesenswert?

Hallo Luke,

wunderbar ... viel Spass beim coden ...

Grüße,
Michael
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.