Entwicklung auf dem Heimcomputer unter Windows

Note
  Die SPiC-IDE kann in einer Virtuellen Maschine (VM) sehr einfach unter Windows gestartet werden. Dort wird dann ein Debian Linux mit einer Umgebung ähnlich zum CIP gestartet. Dies ist der empfohlene Weg für die Übungen. Sofern dies nicht gewünscht ist, kann auf eigene Verantwortung (und ohne Unterstützung durch Tutoren) auch direkt eine IDE installiert werden – die Handhabung für den Übungsbetrieb ist allerdings ungleich schwieriger!

Für Windows (ohne die SPiC-IDE VM) empfiehlt sich das Atmel Studio 7.

## Installation

### Benötigte Dateien

- Die Atmel-Studio-Entwicklungsumgebung.
- Die libspicboard-Bibliothek inklusive der Projektvorlage für Atmel Studio 7

### Atmel Studio 7

- Atmel Studio 7 mit allen Abhängigkeiten installieren, inklusive AVR8-Toolchain (Atmel ATmega Series Device Support Pack 1.2.209) und USB-Treiber
- Verbindet nach Abschluss der Installation euer SPiCboard mit dem PC und wartet, bis Windows die Treiber installiert hat (was durchaus einige Minuten dauern kann).

### SPiCboard im Atmel Studio einrichten

- Im Explorer ein neues Verzeichnis anlegen
- Die zuvor heruntergeladene libspicboard.zip in dieses Verzeichnis entpacken
- Bei der ersten Verwendung muss die Projektvorlage installiert werden: Atmel Studio starten, über File / Import den Menüpunkt Project Template... auswählen
- Im neuen Fenster bei "Select a project template" auf "..." klicken, in diesen Ordner navigieren und die `AtmelStudio7_Project_Template.zip` auswählen, anschließend auf "OK"
  Es sollte die Meldung Project Template has been successfully imported. erscheinen.
- Neue Projekte (Aufgaben) im obigen Verzeichnis erstellen (d.h. das Verzeichnis `libspicboard` aus der ZIP-Datei muss direkt neben euren Projektordnern liegen)
- Im Ordner `beispiel` findet sich bereits ein Projekt mit einem (sehr kurzen) Testprogramm, das auf der 7-Segement-Anzeige "ok" ausgibt.

### Bei Problemen kontrollieren

- Eigenschaften des Projekts öffnen: z. B. Project / aufgabeX Properties
- Toolchain -> AVR/GNU C Compiler -> Directories -> `..\libspicboard` in den Pfad ändern, in dem die `libspicboard` entpackt wurde
- Toolchain -> AVR/GNU Linker -> Libraries -> `..\libspicboard` in den Pfad ändern, in dem die `libspicboard` entpackt wurde
- Fragen bitte im Forum stellen, damit alle Studenten von den Antworten profitieren!

## Abgabe der Lösungen von Zuhause

- Wenn ihr die Aufgaben auf eurem Rechner programmiert und getestet habt, müsst ihr die entsprechende(n) Quelldatei(en) zuerst in die Uni kopieren, bevor ihr sie abgeben könnt.
- Dazu mit dem Programm WinSCP mit einem CIP-Rechner verbinden (z. B. `faui0sr0.cs.fau.de`), dort Benutzername und Linux-Passwort eingeben.
- Dann die Datei in euer Projektverzeichnis `/proj/i4spic/LOGIN/aufgabeX` kopieren bzw. vorher das Verzeichnis aufgabeX anlegen, falls noch nicht vorhanden. Es kann sein, dass das Verzeichnis `/proj/i4spic` bzw. `/proj/i4spic` nicht in der Liste angezeigt wird. In dem Fall: Remote -> Go To -> Open Directory/Bookmark
- Schließlich mit dem Programm PuTTY auf einem CIP-Rechner einloggen und dann in der Shell wie sonst auch `/proj/i4spic/bin/submit aufgabeX` eingeben, um abzugeben.
- WICHTIG: Abgegeben werden die Dateien, die sich in eurem Projektverzeichnis befinden, und nicht die, die zuhause auf eurem Rechner sind! Es liegt außerdem in eurer Verantwortung, dass ihr die Dateien rechtzeitig einreicht - eine defekte Internetverbindung oder Probleme auf euren PCs sind kein von uns akzeptierter Grund für eine verspätete Abgabe!

## Beschreibung der verschiedenen Einstellungen

- Die Header-Dateien (z. B. `led.h`) enthalten die Schnittstellenbeschreibung für die `libspicboard`. Der Übersetzer benötigt den Pfad zu diesen Dateien, um die Funktionsaufrufe an die Bibliothek (z. B. `sb_led_on(GREEN0)`) auf deren richtige Verwendung zu überprüfen.
- Der Linker bindet euer Programm mit der eigentlichen bereits übersetzten Bibliothek (`libspicboard.a`) zusammen. Dazu braucht er Verzeichnispfad und Namen der Bibliothek. Das Prä- und Suffix des Dateinamens ("lib" und ".a") werden dabei nicht mit angegeben!
- Weitere Einstellungen sorgen dafür, dass der Compiler intolerant gegenüber schlampiger Programmierung ist (`-pedantic`, `-Wall`, `-Wextra` und `-Werror`: alle Warnungen ausgeben und als Fehler behandeln), optimiert (`-Os` in der Build-Konfiguration) oder nicht (`-O0` in der Debug-Konfiguration) und für die richtige Plattform (`freestanding` auf `atmega32`) übersetzt.
- Die Einstellungen kann man in den Projekt-Eigenschaften nachlesen und verändern (nichtsdestotrotz müssen die Abgaben mit der von uns vorgegebenen Einstellung übersetzen).

## Fragen und Antworten

### Wie erstelle ich ein neues Projekt?

- Atmel Studio 7 starten, über File / New auf den Menüpunkt Project... navigieren
- Im nun erscheinenden Fenster New Project muss unsere `SPiCboard Projekt` Vorlage ausgewählt werden (siehe auch Es gibt im Atmel Studio kein "SPiCboard Projekt"! ).
- Der Projektname kann für eigene Hobbyprojekte beliebig gewählt werden, für Abgaben muss es jedoch `aufgabe` und die jeweilige Aufgabennummer sein.
- Als Location sollte ein Unterordner in einem SPiC-Verzeichnis gewählt werden, in dem die `libspicboard` liegt (da eure Projekte i.d.R. eben diese lib brauchen, und sie in den benachbarten Verzeichnissen gesucht wird).
- Bei Create directory for solution sollte kein Haken sein.

### Es gibt im Atmel Studio kein "SPiCboard Projekt"!

- Auf eurem Heimrechner müsst ihr erst das Projekt-Template importieren, siehe SPiCboard im Atmel Studio einrichten

### Wie ändere ich den Quelltext-Dateinamen?

- Falls nicht bereits vorhanden, blende den Solution Explorer über den Menüpunkt View ein.
- Rechtsklick auf die zu ändernde Datei (meist `main.c`) und Rename auswählen. Nun kann der Name geändert werden.

### Hilfe, ich bekomme eine "Launch Failed" Fehlermeldung

- Erstmal: Keine Panik, hinsetzen und ruhig durchatmen. Diese wenig hilfreiche Fehlermeldung weißt euch meist darauf hin, dass ihr in eurem Projekt kein SPiCboard ausgewählt habt.
- Stellt sicher, dass euer SPiCboard angeschlossen ist (und Windows die Treiber installiert hat). Zudem muss der Solution Explorer aktiviert sein (kann über das Menü View aktiviert werden).
- Klickt im Solution Explorer mit der rechten Maustaste auf euer Projekt (normalerweise aufgabeX) und wählt Properties (letzter Menüpunkt) aus.
- In der neuen Ansicht den Reiter Tool auswählen und in "Selected debugger/programmer" das SPiCboard mit der Bezeichnung "mEDBG ATML252304..." aktivieren (das Ende entspricht der Seriennummer, die auch auf der Rückseite des SPiCboards steht).
- Sollte hier nur Simulator und Custom Programming Tool stehen, so ist euer SPiCboard entweder nicht angeschlossen, oder ihr habt Verbindungs- bzw. Treiberprobleme.

### Wie starte ich den SPiCboard Simulator aus Atmel Studio?

- Alternativ zum direkten starten über `spicsim.bat` kannst du auch den `SPiCsim` aus Atmel Studio starten, um dadurch schnell testen zu können.
- Gehe dazu in den Projekt Einstellungen (Im Atmel Studio Solution Explorer Rechtsklick auf das Projekt und wähle Properties) unter dem Reiter Tool das Custom Programming Tool aus (Nein, nicht "Simulator". Ja, verwirrend).
- Als `Command` muss der Aufruf zu Java mit dem Simulator und der auszuführenden Datei stehen. Letztere kann mittels Makro von Atmel Studio übergeben werden, z.B. durch `java -jar P:\libspicboard\doc\SPiCsim.jar "$(OutputDirectory)\\$(OutputFileName)$(OutputFileExtension)"` für den Windows CIP (auf deinem Heimrechner muss vermutlich ein anderer Pfad eingestellt werden).
- Ein hoher `Timeout` verhindert unnötige Warnungen, z.B. `6000` ist ein guter Wert.
- Du kannst nun direkt euer Programm über den Startbutton im Simulator ausführen (ein Debuggen ist jedoch nicht möglich).
- Bitte denk daran, dass der Simulator nicht über alle Funktionen (insbesondere keine serielle Kommunikation/Konsole oder Display) verfügt und sich auch in Einzelfällen anders als das SPiCboard verhalten kann. Deine Abgaben müssen mit dem echten SPiCboard funktionieren. Nichtsdestotrotz ist der `SPiCsim` eine sehr gute Unterstützung, falls kein SPiCboard verfügbar ist.

### Der Compiler meckert "undefined reference to main()", obwohl eine main()-Methode definiert ist.

- Verschiebe die Hauptquelldatei (z. B. `blink.c`) rechts im Solution Explorer direkt unter den Projektknoten (z. B. `aufgabe0`). Dann nochmal neu kompilieren.

### Atmel Studio meckert, dass die Firmware des Debuggers nicht aktuell ist.

- Die Firmware durch den angebotenen Dialog des Atmel Studio updaten lassen.

### Im Project-Menü erscheint kein Punkt "Add File".

- Vorher rechts den Solution Explorer auswählen.