Arduino mit Eclipse, zweiter Versuch

Nachdem der erste Versuch ziemlich zäh lief, hat mich Michael freundlicherweise auf ein neues Plugin hingewiesen. Und das funktioniert tatsächlich ziemlich gut (allerdings sind einige Kleinigkeiten zu beachten, wenn ihr auf dem Mac arbeitet):

  1. Man benötigt Eclipse in der C/C++-Version und die Arduino IDE (ich habe die 1.0 verwendet).
  2. Das Plugin gibt es unter “http://www.baeyens.it/eclipse/update site”. Wichtig: Das Leerzeichen darf nicht durch %20 ersetzt werden (macht Eclipse evt. automatisch)! Etwas unglücklich.
  3. In den Plugin-Einstellungen soll man den Pfad zur Arduino-IDE angeben. Auf dem Mac ist Folgendes einzutragen (Quelle): /Applications/Arduino.app/Contents/Resources/Java
  4. Der AVRDude-Pfad (siehe): /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf
  5. Unter Arduino/Paths sind folgende Pfade einstellen, siehe Screenshot und arduino.cc. (genaues Hinschauen lohnt sich – mich hat das doppelte “avr” der “AVR Header Files” 5 Minuten Fluchen gekostet^^)
  6. Beim Anlegen eines neuen Projektes muss man die Board-Version (zB “Uno”) auswählen und den Port angeben. Der Port ist das, was in der Arduino IDE unter Tools -> Serial Port ausgewählt wird – bei mir “/dev/tty.usbmodemfa131”
  7. Für diejenigen unter euch, die (wie ich) nicht vertraut mit der C++-Version sind: Kompiliert wird mit dem “Hammer” (dauert bei mir recht lange); auf’s Board geschoben wird das Ganze mit dem “AVR”-Button.

Wermutstropfen bisher:

  1. Den Eclipse-Debugger kann man auch hier nicht benutzen. Aber schon die Shortcuts, Templates usw sind der Hit!
  2. Importe sind manuell hinzuzufügen. So braucht man für ein simples “Serial.begin(9600);” schon ein “extern HardwareSerial Serial;” usw. 🙁

Danke an Michael für den Tipp, garretto für das tolle Tutorial (nachdem ich es entdeckt habe, war dieser Eintrag quasi überflüssig), und Jantje für das Plugin!

Arduino mit Eclipse als IDE

Das ist leider einfacher gesagt als getan, siehe unten 🙁 Eclipse muss man natürlich nur einmal einrichten. Da das deutlich umfangreichere aber das Einrichten des Projektes ist, würde ich empfehlen, ein einmal lauffähig eingerichtetes Projekt als Template zu nutzen.

Anmerkung #1: Was momentan noch nicht funktioniert, ist die Ausgabe nach Serial 🙁 Ich habe bisher nur ein sehr rudiemntäres “Blink”-Projekt kompilieren können… offenbar fehlen da irgendwelche Includes, wobei die HardwareSerial eigentlich da ist. Ich bleibe dran.

Anmerkung #2: Im Folgenden werden OS X Lion und ein Uno verwendet

Einrichten von Eclipse:

  1. Eclipse IDE for C/C++ Developers installieren
  2. Das AVR-Plugin installieren
  3. Das AVR “Crosspack” installieren
  4. Sicherheitshalber die Pfade unter Preferences -> AVR -> Paths checken:
    AVR-GCC: /usr/local/CrossPack-AVR20100115/bin
    GNU make: /usr/local/CrossPack-AVR20100115/bin
    AVR Header Files: /usr/local/CrossPack-AVR20100115/avr-3/include
    AVRDude: AVR-GCC: /usr/local/CrossPack-AVR20100115/bin
  5. Dein(e) Arduino(s) unter Preferences -> AVR -> AVRDude einrichten. Anmerkung: Der default Port ist der, den man auch in der Arduino-IDE nutzt – und den man unter /dev/ findet (ls -la /dev/)
    Configuration Name: <irgendwas>
    Programmer Hardware: Arduino
    Override default port: /dev/tty.usbmodemfa131
    Override default baudrate: 115200

Einrichten eines ersten Projekts (dieses kann man hinterher kopieren, um diese Einstellungen nicht immer wieder vornehmen zu müssen):

  1. Neues “C” Projekt anlegen:
    Project name: <irgendwas>
    Project type: AVR Cross Target Application -> Empty
    Finish
  2. In den Project properties -> AVR -> AVR Dude -> Programmer -> “Programmer configuration” die Konfiguration von oben, Punkt 5, auswählen
  3. Das Arduino anschliessen
  4. In den Project properties -> AVR ->AVR Dude -> “Target Hardware” entweder “Load from MCU” versuchen, oder für den Uno “ATmega328P” auswählen. Anmerkung: Auch, wenn arduino.cc als Microcontroller für den Uno den ATmega328 angibt, so ist es in Wirklichkeit doch der ATmega328P
  5. Die Arduino IDE öffnen, ein neues Projekt anlegen, und kompilieren (“Verify” genügt) (es geht darum, einmal die Core Library anzulegen)
  6. “Irgendwo” unter /private/var/ die Datei core.a finden – bei mir war es /private/var/folders/8f/0zf3pf294rvbrybmwh7mq1bm0000gn/T/build1871947640038466426.tmp/core.a 🙂 – und in den Projektordner kopieren
  7. Diese “neue” core.a in libcore.a umbenennen
  8. Unter den Project properties -> C/C++ Build -> Settings -> Tool Settings -> “Additional Tools in Toolchain”: “Generate HEX for Flash Memory”, “Print Size” und “AVRDude” müssen angewählt sein; “Generate HEX file for EEPROM” und “Generate Extended Listing” müssen abgewählt sein
  9. Unter … -> AVR Compiler -> Command von “avr-gcc” in “avr-g++” ändern
  10. Unter … -> AVR Compiler -> Directories den Pfad /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino (oder analog) eintragen. Anmerkung: Rechtsklick auf die Arduino-App -> Paketinhalt anzeigen hilft 😉
  11. Unter … -> AVR Compiler -> Debugging -> “Generate Debugging info” “No debugging info” auswählen
  12. Unter … -> AVR Compiler -> Optimization -> “Optimization Level” “Size Optimization (-Os)” auswählen
  13. Unter … -> AVR Assembler -> Debugging -> “Generate Debugging Info” “No debugging info” auswählen
  14. Unter … -> AVR C Linker -> Libraries eine neue Library mit dem Namen “core” anlegen. Einen neuen Library Path mit “${workspace_loc:/${ProjName}}” anlegen – damit sollte er jetzt im aktuellen Projekt nach der corelib aus Schritt 6 und 7 suchen
  15. Eine neue Datei mit Namen main.c anlegen
  16. coden 😉

Kompilieren und flashen tut man das Projekt dann mit dem “Hammer”-Button in der Menüleiste – es muss dabei im Dropdown “Release” ausgewählt sein.

Mit Hilfe von, und, und, und.

Eclipse: Ignore whitespace in file compare

Mitarbeiter des Monats: Frederik. Weil: Vergleicht man zwei Dateien in Eclipse (also etwa eine Revision im SVN mit der lokalen Kopie), stolpert man früher oder später über das Ärgernis unterschiedlicher Line-Breaks / Tabs, … White Spaces halt. Schlimmstenfalls wird jede einzelne Zeile als geändert markiert.

Das kann man aber unterdrücken: Rechtsklick -> “Ignore White Space”, oder unter Einstellungen -> General -> Compare/Patch.

Und gefunden hat das eben Frederik.

FDT+Ant: Java Heap Space und PermGen Space [Update]

Wer beim Kompilieren mit Ant in FDT einen Java Heap Space Error bekommt, kann der Java Virtual Machine mehr Speicher zuweisen. Nein, nicht über die Eclipse.ini, sondern über die Einstellungen:

Einstellungen -> Java -> Installed JREs -> [aktuelles JRE] -> Default VM Arguments -> “-Xmx512m”
(ohne Anführungszeichen; den Wert ggf. abwandeln)

Quelle

Wer dagegen einen “PermGen Space”-Error bekommt (kenne ich auch erst seit neuestem), der regelt das über die “External Tools Configuration”:

“Run”-Menü -> External Tools -> External Tools Configurations -> [aktueller Ant-Task] -> JRE -> VM Arguments -> “-Xmx512m”
(ohne Anführungszeichen)

Hier muss man etwas ausprobieren; mein Wert weicht von der Quelle ab, und die nutzt andere Einstellungen als ihre Quelle 🙂

UPDATE:

Auf http://factornine.wordpress.com/2008/04/15/how-to-increase-memory-allocated-to-eclipse/ sehe ich, wie ich mir nicht nur den aktuellen Heap Space anzeigen lassen kann, sondern auch, wie ich manuell die Garbage Collection angezeigt bekomme:

Einstellungen -> General -> Show heap status

Das Ganze sieht dann so aus:

Eclipse: Kompilieren mit Apfel+Enter

Die Flash IDE ist Mist, da sind sich alle einig. Und in Eclipse/FDT (im Flash-Builder vermutlich auch) kompiliert man am Besten mit Ant. Aber: Wo man in der IDE mit Apfel+Enter (Mac, Windows: Strg+Enter) kompiliert, muss man in FDT immer die Maus bemühen, um Ant zu starten. Das kann man aber in den Voreinstellungen ändern: General -> Keys -> “Run Last Launched External Tool” auf Apfel+Enter gemapped, und schon startet diese Kombination das zuletzt verwendete Ant-Script!

Danke an Robert für den Tipp!