Hallo.
Ich habe versucht, Eclipse (mars, C/C++ Version) zusammen mit dem AVR
Plugin zum Laufen zu bringen ... die Installation klappte zwar soweit,
aber ich kann nichts compilieren. Stattdessen erhalte ich diverse
Fehlermeldungen.
Meine Anleitung war diese hier:
http://www.instructables.com/id/How-to-get-started-with-Eclipse-and-AVR/?ALLSTEPS
Natürlich habe ich auch die Anleitung hier im Forum gefunden aber die
scheint wesentlich älter zu sein??
https://www.mikrocontroller.net/articles/AVR_Eclipse
Aber der Reihe nach:
Ich kann zwar ein Projekt erstellen "AVR Cross Target App", doch der
Wizzard bietet mir anschließend im Menu "MCU Type" nichts an. Es ist
einfach nichts anwählbar.
Danach habe ich New --> Source File --> main.c erstellt und z.B. dieses
kurze Script eingefügt:
http://peterstuifzand.nl/2008/01/30/i-programmed-my-first-attiny2313.html
Ohne überhaupt compiliert zu haben, erhalte ich direkt 6 Warnungen, wie
z.B. "Symbol DDRB could not be resolved". Wenn ich danach auf "Build"
klicke, erscheint in der Eclipse-Konsole:
16:52:35 **** Build of configuration Release for project Blink ****
make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -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.d" -c -o
"main.o" "../main.c"
Finished building: ../main.c
Building target: Blink.elf
Invoking: AVR C++ Linker
avr-g++ -Wl,-Map,Blink.map,--cref -mrelax -Wl,--gc-sections
-mmcu=atmega16 -o "Blink.elf" ./main.o
/usr/lib/gcc/avr/4.8.2/../../../avr/lib/avr5/crtm16.o: In Funktion
`__bad_interrupt':
../../../../crt1/gcrt1.S:195: Nicht definierter Verweis auf `main'
collect2: error: ld returned 1 exit status
make: *** [Blink.elf] Fehler 1
Und das war's ... hat einer eine Idee, woran das scheitert bzw was
schief gelaufen ist?
Danke!
White Rabbit schrieb:> Ich kann zwar ein Projekt erstellen "AVR Cross Target App", doch der> Wizzard bietet mir anschließend im Menu "MCU Type" nichts an. Es ist> einfach nichts anwählbar.
Moin,
ich habe das mal ausprobiert. Die Liste bleibt nur leer wenn mars beim
Start den avr-gcc Pfad nicht findet.
Ich denke Du musst die Pfadeinstellungen zum avr-gcc anpassen.
Ich weiß nicht wie Du dein mars startest und ob avr-gcc dann schon
bekannt ist.
Startest Du dein eclipse von der konsole aus oder durch klick?
Von der konsole kannst Du vorher zur Kontrolle avr-gcc aufrufen.
Wenn Du nur klickst muss der avr-gcc im System- oder Benutzerpfad
vorhanden sein.
ich starte es aus /opt/eclipse mit
./eclipse
Darin ist avr-gcc ebenfalls bekannt:
$ avr-gcc --version
avr-gcc (GCC) 4.8.2
Es ist ja auch nicht so, dass nichts compiliert wird ... sondern eher,
dass ich die Einstellungen nicht verändern kann und der Editor zudem
diverse Fehlermeldungen bringt.
Das Problem scheint übrigens bekannt zu sein: Status: offen (!)
http://sourceforge.net/p/avr-eclipse/support-requests/25/?page=1
Von dem Problem habe ich nichts mitbekommen ;-)
Da ich mehrere Versionen von eclipse/gcc habe, sind meine auch nicht in
den Standartordnern installiert.
Dazu evtl. später mehr...
Teste doch erst mal ob in der Konsole avr-gcc funktioniert:
neuen Ordner anlegen mit einer Datei
test.c:
1
#include<avr/io.h>
2
intmain()
3
{
4
DDRB=0xFF;
5
PORTB=0xFF;
6
while(1){}
7
}
Dann:
avr-gcc test.c -o test -mmcu=atmega16
Wenn das funktioniert von diesem Ordner aus eclipse aufrufen.
also direkt aus der Konsole heraus funktioniert es (hätte mich auch
gewundert wenn nicht (übrigens: hier läuft ein Kubuntu 14.04 LTS 64 Bit)
Es wurde ohne zu meckern die Datei 3975 Aug 11 11:46 test angelegt.
Der Aufruf von eclipse klappt natürlich auch. Ich kann die Datei
test.c öffnen aber dann nicht kompilieren, weil es kein Projekt ist(?)
Wenn ich deine Code-Zeilen allerdings wieder in einem anderen Projekt
unter main.c einfüge und "Compile all" verwende, erhalte ich erneut "3
Problems"
(Nicht definierter Verweis auf main, Symbol DDRB could not be resolved
und Symbol PortB could not be resolved)
Wenn ich compiliere (Build all), erscheint:
11:53:21 **** Incremental Build of configuration Release for project
Blinky2 ****
make all
Building target: Blinky2.elf
Invoking: AVR C++ Linker
avr-g++ -Wl,-Map,Blinky2.map,--cref -mrelax -Wl,--gc-sections
-mmcu=atmega16 -o "Blinky2.elf" ./main.o
/usr/lib/gcc/avr/4.8.2/../../../avr/lib/avr5/crtm16.o: In Funktion
`__bad_interrupt':
../../../../crt1/gcrt1.S:195: Nicht definierter Verweis auf `main'
collect2: error: ld returned 1 exit status
make: *** [Blinky2.elf] Fehler 1
11:53:21 Build Finished (took 70ms)
Also nicht viel anders als vorher?!?
Gut. Dann ist mit avr-gcc alles ok.
eclipse ist zum Glück so Aufgebaut das es in einem beliebigen
Verzeichnis installiert werden kann.
Wenn Du möchtest installiere doch im aktuellen Ordner (wo die test.c
drin ist) ein frisches eclipse mit avr-plugin.
Das kannst Du bei Bedarf später einfach wieder löschen wenn es nicht
gehen sollte - was ich aber nicht glaube, da es bei mir unter Ubuntu
14.04 LTS 64 Bit ja funktioniert.
1. herunterladen von mars:
http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/mars/R/eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz
2. entpacken:
tar xvf eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz
3. starten:
eclipse/eclipse &
4. avr-plugin Version 2.4.1 installieren von:
http://avr-eclipse.sourceforge.net/updatesite
Dann sehen wir weiter....
Kann es sein, dass der Prozessor nicht korrekt definiert ist?
io.h ist ja so etwas wie eine Standartbibliothek. Aber die
Registerbezeichner sind prozessorabhängig.
Beim "manuellen" Aufruf durch:
>>avr-gcc test.c -o test -mmcu=atmega16<<
geschah dies ja durch den mmcu-Parameter.
Amateur schrieb:> Beim "manuellen" Aufruf durch:>>>>avr-gcc test.c -o test -mmcu=atmega16<<>> geschah dies ja durch den mmcu-Parameter.
Genau das ist wohl der Zusammenhang mit der leeren MCU Liste.
Dein Vorgehen unterscheidet sich nicht von meinem ... und ich habe das
schon mehrfach so gemacht ... einziger Unterschied: als root unter /opt
entpackt. Sollte es das sein??
Ich kann's ja nochmal als User ausprobieren und mich dann melden.
White Rabbit schrieb:> Ich kann's ja nochmal als User ausprobieren und mich dann melden.
Irgenwie hatte ich auch schon so eine Ahnung das das Problem mit dem
Plugin vielleicht eine Rechteangelegenheit sein könnte.
Ich würde nichts auf ein Rechteproblem setzen.
Kann mir nicht vorstellen, dass der Zugriff auf "io.h" funktioniert und
der auf "xxx.inc" nicht. Beim "Fehlen" von io.h sollte, der Compiler,
eine entsprechende Fehlermeldung ausgegeben.
Amateur schrieb:> Beim "Fehlen" von io.h sollte, der Compiler,> eine entsprechende Fehlermeldung ausgegeben.
So weit ist es ja noch garnicht.
Es geht mehr darum das das Plugin etwas nicht findet...
>So weit ist es ja noch garnicht.
Ich dachte immer, dass Compiler von "oben" nach unten arbeiten. Sprich:
Er liest (oder auch nicht) io.h, kommt dann zu main und findet dort:
DDRB. Dies wird wegen eines "keine Ahnung" moniert.
Ein Fehler beim Plug-In sollte es erst gar nicht so weit kommen lassen.
Hat denn die Kommandozeile andere Rechte wie das Programm?
@ hp-freund
Ich bezog mich auf den Post von 11:53.
>Wenn ich deine Code-Zeilen allerdings wieder in einem anderen Projekt>unter main.c einfüge und "Compile all" verwende, erhalte ich erneut "3>Problems">(Nicht definierter Verweis auf main, Symbol DDRB could not be resolved>und Symbol PortB could not be resolved)
Also hat der Compiler wohl die Symbole DDRB und PORTB erreicht...
Darüber hinaus kenn' ich aber niemanden mit Namen: Blinky2.
hp-freund schrieb:> Amateur schrieb:>> in einem anderen Projekt>> Wie wurde das erstellt? Mit dem Plugin ohne MCU Auswahl?
Ja, genau! Ich konnte halt bei MCU nichts auswählen ... da habe ich ohne
weiter gemacht ... klar, dass das zu Fehler führt. Aber wo liegt die
Ursache?
Amateur schrieb:> Ich würde nichts auf ein Rechteproblem setzen.
Gerade nochmal alles ganz frisch als User versucht und zuvor extra
~/.eclipse und /opt/eclipse gelöscht.
Es bleibt dabei -- unter MCU kann ich weiterhin nichts auswählen. Es
scheint also KEIN Rechteproblem zu sein ... hätte mich auch gewundert.
Habe schon lange nicht mehr unter Linux gearbeitet. Früher gab es mal
ein Tool, das die Systemaufrufe protokolliert hat. Z. B. File open usw.
Keine Ahnung wie das hieß. Würde dies mal versuchen. Da kann man sehen,
wenn Pfade, wo auch immer diese gesetzt wurden, nicht stimmen oder durch
nutzlose defaults ersetzt wurden...
White Rabbit schrieb:> dürfte aber klar sein!??
Klar!
Du hast die gleiche Version installiert die ich auch habe.
Mit AVR-Plugin Version 2.4.1 ?
Amateur schrieb:> ein Tool, das die Systemaufrufe protokolliert
strace
Ist aber eine Meeeenge protokolliert ;-)
>Ja, genau! Ich konnte halt bei MCU nichts auswählen ...
Das darf nicht sein!
Normalerweise geschieht dies - einmalig - während der Projektanlage.
Schau dort nochmal genau hin.
Da sich die Port- und Registerzugriffe der einzelnen Prozessoren sehr
stark voneinander unterscheiden, ist diese Angabe unumgänglich.
Eine C-Code Übersetzung kann ohne diese Information auch nicht
durchgeführt werden.
Es wird scheinbar alles für einen ATMega16 per default eingestellt?
Zumindest steht das oben im compile-Befehl und wird auch scheinbar per
Default hier gesetzt:
[workspace]/.metadata/.plugins/org.eclipse.core.runtime/.settings/de.inn
ot.avreclipse.core.prefs
Wer hat einen Code-Schnipsel, der mit einem ATMega16 läuft? Den könnte
ich ja mal ausprobieren...
Und das AVR-Plugin ist Version 2.4.1 - ja. Es kommt von
http://avr-eclipse.sourceforge.net/updatesite/
Servus
wenn keine MCU ausgewählt werden kann liegt das Problem dort. Allerdings
ist das Problem bekannt und es liegt am AVR Plugin seit 2.4.0. Dort ist
im Code einer Java Class ein Leerzeichen zuviel. Es gibt eine gepatchte
Version die dieser Class, welche man im Pluginordner einfügen und
entsprechend benennen muss.
Einfach mal das Forum hier durchsuchen, da gab es mal einen thread dazu.
Dort habe ich die Info's damals gefunden. Die Datei kann ich ja heute
abend mal hier ranhängen.
Alternativ wäre die Möglichkeit einfach die MCU an den Programmer zu
hängen und beim Erstellen des Projektes bei MCU "get from Hardware"
anzuwählen.
Gruß René
> Allerdings> ist das Problem bekannt und es liegt am AVR Plugin seit 2.4.0. Dort ist
Ja, bekannt aber nicht gefixt. Ich hatte die Seite ja schon hier zitiert
... mir ist aber nicht ganz klar, wo ich den Patch einpflegen
soll/muss?
> Alternativ wäre die Möglichkeit einfach die MCU an den Programmer zu> hängen und beim Erstellen des Projektes bei MCU "get from Hardware"
Wie gesagt: Das Drop-Down-Menu bei MCU ist "tot" -- da kann ich GAR
nichts auswählen. Und bei der Taktfrequenz steht ebenfalls immer ein
"fester Eintrag" -- ebenfalls nicht änderbar.
Dann wundert es mich warum es bei mir funktioniert.
java?
Meine Version:
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6)
(7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
> java?
Bei mir:
java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
Was kommt bei euch in der Konsole, wenn ihr diesen Befehl benutzt:
avr-gcc -Wa,-mlist-devices --target-help
Hier wird die komplette Hilfe nochmal ausgegeben ... sollten dan nicht
ausschließlicheÜ die untestützten Devices ausgegeben werden? Das wird
der
Fehler sein, denke ich?!?
Das mit den Leerzeichen könnte die Lösung sein.
White Rabbit schrieb:> Was kommt bei euch in der Konsole, wenn ihr diesen Befehl benutzt:>> avr-gcc -Wa,-mlist-devices --target-help
siehe Anhang
Wahnsinn -- es hat geklappt!! Der simple Eintrag
export LC_MESSAGES=C
unter .profile löst beide Probleme zusammen! Konnte gerade erfolgreich
kompilieren und die Warnungen sind ebenfalls verschwunden!!!
Krass, dass das nirgendwo steht bzw noch krasser, dass das kein "known
"Bug"" ist??! Wie sieht denn bei euch sonst die Datei .profile aus??
Ist es nicht möglich den Prozessor als Parameter dem Compiler bzw.
Assembler zu übergeben?
In Deiner Konfiguration würde ja sonst eine Entwicklungsumgebung, für
nur einen Prozessor, bestehen.
Die darauf folgen Meckerer würden jedes Forum überlaufen lassen...
>Es wird scheinbar alles für einen ATMega16
Das ist ebenfalls unwahrscheinlich. Für den ATMega16 sind die Werte
PORTB und DDRB definiert. Du könntest also Code erzeugen, er würde aber
auf einem anderen Prozessor, als dem ATMega16, nicht laufen.
Übrigens hat jetzt auch direkt avrdude und "Target Hardware" -- Load
from MCU geklappt. Das ging vorher auch nicht .... das Problem scheint
also gelöst.
Trotzdem bleibt es seltsam, dass nur ich davon betroffen bin???
Profil-Einstellungen??
(Mein Rechner ist schon über mehrere Kubuntu-Releases mitgewachsen.
Vielleicht lief da irgendwas im meinem pers. Profil schief??)
> .... das Problem scheint also gelöst.
War vielleicht etwas zu voreilig : Jetzt ist mein KDE halb englisch und
halb deutsch!! (K-Menu...)
Was ist denn nun schon wieder??
Hatte mich ja schon zeitgleich verabschiedet aber na ja.
Was gibt locale aus?
Siehe meine LC_ Liste oben.
Notfalls musst Du ein update der Sprachpakete durchführen.
hp-freund schrieb:> White Rabbit schrieb:>> Profil-Einstellungen??
hmm ... warum sorgt der Eintrag denn für englische Menus?
(auch LibreOffice usw sind bei mir davon betroffen).
Schalte ich das wieder aus, ist es wieder deutsch!
Ist zwar jetzt OT, aber interessieren würde es mich doch.
In den KDE Einstellungen ist natürlich alles auf default "Deutsch"
eingestellt.
Sieht soweit gleich aus.
http://www.linuxwiki.de/locale
Ich bin erst mal weg.
Schaue heute Abend noch mal rein, aber ich denke das Sprachproblem hast
Du bis dahin gelöst :-)
> Schaue heute Abend noch mal rein, aber ich denke das Sprachproblem hast> Du bis dahin gelöst :-)
Hab' mir jetzt zunächst mit einem Startscript geholfen:
#!/bin/bash
export LC_MESSAGES=C
./eclipse &
Damit läuft es hier ... was auch immer, da schief gegangen ist?!?
@ White Rabbit
ja so ähnlich, es gibt aber eine gepatche Datei die du in den
Pluginordner kopierst. Dann kannst du dir die Sache mit den Sprachen
sparen.
Ich schaue nachher mal nach, ich habe die gepatchte Version. Bin aber
noch @Work.
Gruß René
Hier die gepatchte Datei für das AVR Plugin. Getestet mit Eclipse Mars
auf Lubuntu 14.04 32bit. Die Locale stehen alle auf de_DE UTF8. Eclipse
ist mit englischer Oberfläche installiert, ob das auch mit dem deutschen
Language Pack funktioniert habe ich noch nicht getestet.
Gruß René
Moin,
das Plugin kannst Du einfach in den eclipse/plugins Ordner kopieren und
die Alte überschreiben oder vorher sichern.
Musst nur beim nächsten Update daran denken.
Wenn du dein Eclipse in /user/share/eclipse installiert hast und es als
Normal User aufrufst erstellt eclipse in deinem /home/user Verzeichnis
ein Unterverzeichnis /.eclipse unter diesem liegen weitere
Unterverzeichnisse. in einem davon befindet sich der Ordner Plugins.
Dort ersetzt du die vorhandene Datei mit der gepatchten.
Startest du Eclipse mit sudo dann befinden sich die Plugins unter
/usr/share/eclipse/plugins.
Bei mir gibt es beide Verzeichnisse da ich nur wenn Eclipse mit root
Rechten läuft den Programmer unter avrdude einstellen kann. Das dies
auch unter normalen Rechten funktioniert habe ich noch nicht hinbekommen
obwohl nirgends im Netz diese Problematik behandelt wird.
Dafür suche ich noch eine Lösung.
Hier nochmal genau was passiert:
Starte ich Eclipse mit dem normalen Useraccount kann ich unter File >
properties > avrdude keinen Programmer auswählen. Auch bei Klick auf new
passiert nichts. Starte ich Eclipse mit sudo funktioniert es. Der
Workaround avrdude mit chmod a+s zu versehen nützt auch nichts. Ist bei
Luna und Mars gleich.
edit: Mars mit deutscher Oberfläche konnte ich nicht testen. sobald ich
das Languagepack von babel installiere startet Eclipse nicht mehr
Gruß René
Servus hp-freund
kann ich im Moment nicht sagen, bin derzeit out of programmer mein
Dragon ist in den ewigen Jagdgründen.
Allerdings dürfte das auch keine Rolle spielen. Wenn ich Eclipse mit
sudo starte kann ich dann im avrdude Menü auf new klicken. Dann öffnet
sich ein weiteres Fenster und dort kann ich dann z.B. den Dragon ISP
auswählen. Starte ich Eclipse als normaler User dann öffnet sich nicht
mal das Fenster wenn ich auf new klicke. Übrigens unter Windows gibt's
das Problem nicht dort funktioniert das einstellen des Programmers auch
ohne das Eclipse als Administrator läuft.
Gruß René
Ich frage weil es bei mir funktioniert.
Ein Programmer muss nicht dran sein um einen neuen zu konfigurieren.
Vielleicht liegt das Problem bei den Rechten der avrdude.conf ?
Ich habe gerade etwas interessantes festgestellt:
eclipse als user ausgeführt findet die Liste der Programmer auch wenn
avrdude nicht erreichbar ist.
eclipse muss sich die Liste anders bersorgt haben...
hp-freund schrieb:> eclipse als user ausgeführt findet die Liste der Programmer auch wenn> avrdude nicht erreichbar ist.> eclipse muss sich die Liste anders bersorgt haben...
hmmm seltsam. ich habe gestern mal zum Test die ganze Sache erst neu
installiert weil ich ne Weile nichts mehr mit AVR gemacht hatte. Dabei
war mir das aufgefallen. Komischerweise wenn Eclipse als root läuft kann
ich den Programmer anlegen. Die angelegten sehe ich dann als user leider
nicht. ich kann die weder neu anlegen noch etwas angelegtes auswählen.
Gruß René
Hi,
seid ihr sicher, daß der normale user auf den Programmer zugreifen darf?
Damit das geht, muss man eine UDEV Regel aufsetzen, als root.
Bei mir sieht das so aus:
1
root@cork:/etc/udev/rules.d# ls -l
2
insgesamt 24
3
-rw-r--r-- 1 root root 597 Aug 15 2012 10-vboxdrv.rules
Die Dateien in /etc/udev/rules.d werden einfach der Reihe nach
ausgewertet, deshalb die Nummer am Anfang des Dateinamens.
Damit nach anlegen der Datei diese auch sicher ausgewertet wird,
einfach:
Bernhard M. schrieb:> seid ihr sicher, daß der normale user auf den Programmer zugreifen darf?
Das wäre Schritt 2 der noch zu klären ist. Ich habe derzeit keinen
Programmer angeschlossen. Der Fehler passiert ja schon beim Auswählen
des Programmers was nur funktioniert wenn eclipse mit root Rechten
läuft. Wenn eclipse unter dem User läuft dann geht nicht mal das Menü
auf in dem die verschiedenen Programmer aufgelistet sind.
Gruß René
René S. schrieb:> hp-freund schrieb:>> eclipse als user ausgeführt findet die Liste der Programmer auch wenn>> avrdude nicht erreichbar ist.>> eclipse muss sich die Liste anders bersorgt haben...>> hmmm seltsam. ich habe gestern mal zum Test die ganze Sache erst neu> installiert weil ich ne Weile nichts mehr mit AVR gemacht hatte. Dabei> war mir das aufgefallen. Komischerweise wenn Eclipse als root läuft kann> ich den Programmer anlegen. Die angelegten sehe ich dann als user leider> nicht. ich kann die weder neu anlegen noch etwas angelegtes auswählen.>>> Gruß René
Ich konnte das ganze jetzt nachvollziehen.
Bei mir hat das nichts mit root zu tun.
Wenn das AVR Plugin original, wie eclipse es sich von der Webseite holt
verwendet wird, dann kann man den Programmer auswählen.
Mit der oben verlinkten von Rene gepatchten Version geht das nicht.
Gruß,
Bernhard
Bernhard M. schrieb:> Mit der oben verlinkten von Rene gepatchten Version geht das nicht.
Also die Version ist ein Fundstück aus dem Netz. Das ist im Prinzip die
Version 2.4.0 mit der Änderung für die Geschichte mit der MCU. Da wurde
in einer Class ein Leerzeichen entfernt und das .jar neu kompiliert.
Dazu gibt es auch den Quellcode im Netz. Möglicherweise kommen wir aber
nun dem Problem auf die schliche. Ich werde mal prüfen ob alle 4 Dateien
die zum AVr Plugin gehören die gleichen Owner haben.
Gruß René
Sodale
hier jetzt funktioniert es und das ganze ohne den locales
Einfach
http://sourceforge.net/projects/avr-eclipse/
die Version 2.4.2 runterladen. In Eclipse bei Help > install new
Software > add auch archiv klicken. Dann die runtergeladene 2.4.2
auswählen und installieren..
Sowohl die MCU Auswahl ist möglich als auch die Programmerauswahl.
Gruß René
Ich hatte das Problem mit Mars das in (kopierten)neuen Projekten das
Problem "Symbol xxx could not be resolved" auftrat, merkwürdigerweise
hat der Compiler nicht gemeckert, man sah es nur im Quellcode.
Fehler gefunden, den gabs schonmal.
die Einträge im Language Mapping fehlten, warum auch immer.
Christian