- Note
- Ab dem Wintersemester 2018/19 wird aufgrund vieler Probleme mit dem Windows-CIP und Atmel Studio in den Vorsemestern auf eine Entwicklung unter Linux umgestellt.
Entwicklung mit der SPiC-IDE
Vorwort
Die SPiC-IDE (Integrated Development Environment) wurde für die Benutzung unter Linux entwickelt und basiert auf dem freien Editor Atom. Ziel ist ein einfacher und intuitiver Einstieg in die systemnahe Programmierung in C: alle notwendigen Werkzeuge sollen schnell zur Hand sein ohne von zu viel Funktionalität erschlagen zu werden. Schließlich sollst du dich komplett auf die Programmierung konzentrieren können, ohne dich mit der Arbeitsumgebung herumärgern zu müssen.
Jedoch hat die SPiC-IDE vermutlich wie alle neuen Projekte noch etwas Verbesserungsbedarf. Wenn dir Fehler auffallen oder du hilfreiche Vorschläge für Änderungen hast, würden wir uns über eine Mail an die die Mailingliste freuen.
Besonderer Dank geht an Maxim Ritter von Onciul für die Anpassung von Atom an SPiC und an Fabian Bläse und Maximilian Ott für die Erweiterung des Debuggers um das SPiCboard und an die CIP Administratoren für ihre tatkräftige Unterstützung bei der Umstellung.
Starten
- An einem CIP-Rechner mit Benutzername und Passwort anmelden (siehe auch Ich habe keinen Login für den CIP), als Windowmanager kann der (standardmäßig eingestellte) Xfce4 verwendet werden.
- Im Startmenü unter FAU Courses die SPiC-IDE auswählen
- Alternativ kann die IDE auch durch Ausführen des Skripts
/proj/i4spic/bin/editor
gestartet werden. - Es kann einige Sekunden dauern, bis die IDE gestartet ist, insbesondere beim ersten Start.
Die Oberfläche
Die SPiC-IDE hat zwei Entwicklungsmodi: Einen für das
(GSPiC bzw. erste Veranstaltungsteil von SPiC) und einen für (zweiter Veranstaltungsteil in SPiC). Der Screenshot zeigt die Oberfläche im SPiCboard Modus.
- Auf der linken Seite ist unter Project dein (G)SPiC-Projektverzeichnis (statt uj66ojab sollte hier dein Login stehen).
- Für jede Aufgabe musst du hier einen Unterordner
aufgabeX
anlegen, wobeiX
die entsprechende Aufgabennummer ist - Im Unterordner
korrektur
befinden sich deine korrigierten Abgaben als PDF - Der Unterordner
pub
ist eine symbolische Verknüpfung auf den öffentlichen Ordner, welcher unter anderem Beispiele, Folien und Aufgabenstellungen beinhaltet. Du kannst nur lesend auf diesen Ordner zugreifen!
- Für jede Aufgabe musst du hier einen Unterordner
- In der obersten Zeile befindet sich die Werkzeugleiste, welche dir einen schnellen Zugriff auf häufige Funktionen bietet.
- Im Zentrum ist die eigentliche Arbeitsfläche, primär wird hier die Texteditoroberfläche angezeigt.
- Es können mehrere Tabs gleichzeitig geöffnet sein (auch eine side-by-side-Darstellung ist möglich).
- Neben Quelltextdateien können auch PDFs (z.B. Aufgabe, Folien oder Korrektur) oder HTML-Dokumente (wie diese Hilfe) angezeigt werden
- Darunter werden bei Bedarf weitere Fenster eingeblendet
- Atom Shell Commands zeigt die Ausgabe von den Befehlen der Werkzeugleiste an - sofern z.B. ein Fehler beim Übersetzen auftritt wird hier die Fehlermeldung und die Stelle (Datei sowie Zeile) angezeigt
- In dem Terminal wird eine Shell ausgeführt
- Bei der Fehlersuche lässt sich der Debugger hier über die eingeblendeten Tasten steuern, während rechts der Aufrufstapel sowie die relevanten Variablenwerte angezeigt werden.
- Über die
Alt
-Taste kann die Menüleiste eingeblendet werden - dies ist jedoch im normalen SPiC -Übungsbetrieb nicht notwendig.
Die Werkzeugleiste
- Auf der linken Seite befinden sich die zur Textbearbeitung üblichen Buttons:
- Neuen Aufgabenordner erstellen. Als Name sollte
aufgabeX/
gewählt werden, wobei stattX
die Aufgabennummer steht. Beachte: Kleinschreibung und keine Leerzeichen! - Neue (leere) Datei öffnen.
- Datei speichern. Der Name der Quelltextdatei wird durch die Aufgabenstellung vorgegeben und ist für eine erfolgreiche Abgabe wichtig. Wird eine ungespeicherte Änderung erkannt, so wird das Symbol eingefärbt.
- Aktuelle Lösung abgeben (der Ordnername muss entsprechend
aufgabeX
lauten und der Dateiname muss mit der Aufgabenstellung übereinstimmen). Mehrfache Abgaben sind möglich (und werden empfohlen). Gewertet wird die letzte Abgabe vor dem Abgabeende. Wird erkannt, dass die lokal gespeicherte Datei sich von der abgegebenen Lösung unterscheidet, so wird das Symbol eingefärbt (diese Anzeige ist unter Umständen bei hoher Serverlast nicht verfügbar und dient nur als zusätzlicher Hinweis - es liegt in eurer Verantwortung Änderungen erneut abzugeben, im Zweifel einfach nochmals abgeben!). - Frage die verbleibende Zeit für die gerade bearbeitete Aufgabe ab.
- Letzte Änderung rückgängig machen.
- Rückgängig gemachte Änderung wiederherstellen.
- Markierten Quelltext (anhand der geschweiften Klammern) einrücken (formatieren). Sofern kein Quelltext markiert ist, wird die gesamte Datei formatiert.
- Aktuelles Fenster in eine neue Anzeigefläche rechts von der aktuellen Anzeigefläche verschieben (side-by-side Anzeige). Diese geteilte Ansicht empfiehlt sich z.B. um gleichzeitig die Aufgabenstellung (oder Dokumentation) neben dem Quelltext anzuzeigen.
- Zeige die Hilfe zur IDE bzw. die Dokumentation der libspicboard an. Dabei werden zusätzliche Buttons zur Navigation angezeigt ( und um in der Historie zurück respektive vorwärts zu navigieren und um die aktuelle Seite neu zu laden)
- Neuen Aufgabenordner erstellen. Als Name sollte
- C-Quelltext in optimierten Maschinencode für den Atmega328pb übersetzen (gut, um Syntaxfehler zu finden)
- Programm auf das angeschlossene SPiCboard übertragen (übersetzt den C-Quelltext automatisch, wenn nötig)
- Programm im SPiCsim ausführen (Übersetzen geschieht ebenfalls automatisch, wenn nötig)
- C-Quelltext ohne Optimierungen mit Debuginformationen übersetzen und auf das angeschlossene SPiCboard übertragen, anschließend in den Debugmodus wechseln. Haltepunkte können zuvor durch einen Klick vor der entsprechenden Zeilennummer im C-Quelltext bestimmt werden (roter Punkt vor der Zeilennummer)
- Überträgt die Musterlösung der jeweiligen Aufgabe auf das angeschlossene SPiCboard
Umschalter zwischen dem Entwicklungsmodus für Mikrocontroller und Linux. Für den Mikrocontroller stehen folgende Buttons zur Auswahl:make Dateiname
zum Übersetzen des C-Quelltextes auf. Der Button ist ausgegraut, wenn im jeweiligen Ordner kein Makefile liegt und wird nach kurzer Zeit aktiv, sobald ein Makefile im Ordner angelegt ist
Ruft das gleichnamige Build-Management-Tool mit - Wechsel in den Debugmodus, zeigt zu Beginn eine Oberfläche für die Konfiguration des GDB an
- Integriertes Terminalfenster ein- bzw. ausblenden
Umschalter zwischen dem Entwicklungsmodus für Mikrocontroller und Linux. Für die Systemprogrammierung unter Linux stehen folgende Buttons zur Verfügung:
Bei einer Shell-Skriptdatei wird ein Button angezeigt, durch die Ausführung erlaubt. Es Skripte aus nicht vertrauenswürdige Quelle sollten nicht ausgeführt werden, denn diese könnten unerwünschte Programme installieren oder zu einem kompletten Datenverlust führen!
Die Vorlesungs- und Übungsfolien (aus dem pub
-Ordner) können ebenfalls im Editor angezeigt werden, dafür stehen folgende Buttons zur Verfügung:
- Vorherige Seite anzeigen
- Nachfolgende Seite anzeigen
- Die ursprüngliche Standardvergrößerungsstufe wiederherstellen
- Dokumentenansicht vergrößern
- Dokumentenansicht verkleinern
- In das Fenster einpassen (Breite)
Für viele Aktionen (wie
) werden weiterführende Informationen und Fehler auf der automatisch eingeblendeten Konsole (mit den Namen Atom Shell Commands) angezeigt, ggf. ist auch eine Benutzerinteraktion notwendig (wie z.B. bei der Abgabe von Gruppenaufgaben)Benutzung ohne IDE
Die wichtigsten Pfade im CIP
/proj/i4(g)spic/pub/
Öffentlicher Ordner mit Aufgabenstellungen, weiterführendes Material und Beispielanwendungen. Zusätzlich sind für viele Aufgaben Beispielimplementierungen verfügbar./proj/i4(g)spic/LOGIN
Dein (G)SPiC-Projektverzeichnis./proj/i4(g)spic/bin/
Skripte, u.a. für die Abgabe.
Aufgabenverzeichnis anlegen
- Terminal öffnen (View -> Tool Views -> Show Terminal)
- In das i4spic-Benutzerverzeichnis wechseln:
cd /proj/i4(g)spic/LOGIN
Hinweis: Mit der Tab-Taste wird der Verzeichis-/dateiname, wenn möglich, automatisch vervollständigt. - Aufgabenverzeichnis erstellen:
mkdir aufgabeX
(wobeiX
für die Aufgabennummer steht) - In das Aufgabenverzeichnis wechseln:
cd aufgabeX
- Aufgabendatei erstellen:
touch aufgabenname.c
- Das (G)SPiC Makefile in das aktuelle Verzeichnis kopieren:
cp /proj/i4spic/pub/libspicboard/Makefile .
Texteditor (Beispiel: Kate)
- In das Aufgabenverzeichnis wechseln:
cd /proj/i4(g)spic/LOGIN/aufgabeX
- Kate starten
kate aufgabenname.c
Flashen unter Linux / im Terminal
- Um das Programm auf das SPiCboard zu flashen wird ein Makefile mit Anweisungen für das Tool make verwendet.
- In das Verzeichnis mit dem zu flashenden Programm wechseln:
cd blink
- Falls das (G)SPiC Makefile noch nicht in dem Verzeichnis vorhanden ist:
cp /proj/i4spic/pub/libspicboard/Makefile .
make <programmname>.flash
aufrufen; zum Beispiel:make blink.flash
Magisches Makefile (für Mikrocontrollerprojekte)
- Der übliche Weg zum Übersetzen eines C-Quelltextes in eine Binärdatei ist make, welches die in der (im selben Verzeichnis liegenden)
Makefile
beschriebenen Befehle ausführt. - Damit nicht für jedes SPiCboard-Projekt die Regeln händisch beschrieben werden müssen, bietet sich das Einbeziehen der
debug.mk
aus der libspicboard-Bibliothek in einem eigenenMakefile
mittelsLIBSPICBOARDDIR ?= /path/to/libspicboard include $(LIBSPICBOARDDIR)/debug.mk
an. Dadurch werden generische Targets eingebunden, welche für die meisten kleinen Projekte (welche aus nur einer Datei bestehen) ausreichend sind: Eine Dateiblink.c
kann durchausmake blink.flash
übersetzt und auf das angeschlossene SPiCboard übertragen werden. - Für komplexere Projekte können spezifische Targets angegeben werden, z.B. ein Projekt aus den drei Dateien
main.c
,display.c
sowiesensor.c
kann mit der zusätzlichen Abhängigkeitsangabewatch.elf: main.c display.c sensor.c
in der zuvor erstellten Makefile die Binärdateiwatch.elf
kompilieren. Natürlich kann auch alternativ die komplette Regel überschrieben werden, um z.B. eigene Parameter an den Übersetzer zu übergebenwatch.elf: main.c display.c sensor.c $(CC) $(CFLAGS) -Wshadow -DFOO=1 -o $@ $^ $(LDFLAGS)
Nun können auch für solche Projekte die weiteren Targets wiemake watch.flash
aufgerufen werden. - Eine ausführliche Auflistung der Funktionalität wird mit
make help
ausgegeben.
Entwicklung zu Hause
Hinweise / Vorwort
- Warning
- Die nachfolgenden Anleitungen richten sich an fachlich versierte Nutzer – die Übungsleiter werden keine Unterstützung bei der Einrichtung der Umgebung auf der eigenen Hardware geben. Zudem muss die Abgabe weiterhin rechtzeitig über das vorgegebene Abgabetool geschehen.
Bitte denkt daran: Der Fokus im Übungsbetrieb liegt auf dem Vermitteln der Konzepte des systemnahen Programmierens, dementsprechend ist es nicht die Aufgabe der Tutoren, in den Rechner- und Tafelübungen mit dem Lösen von Problemen auf eurem privaten Laptop zu verbringen – diese Zeit fehlt dem Übungsbetrieb sonst.
Nachfolgende Anleitungen sollen motivierten Studierenden dabei helfen, das SPiCboard zu Hause anzuschließen und eigenständig zu entwickeln, gerne auch über den Umfang der Lehrveranstaltung hinaus. Sofern es die Zeit erlaubt, werden wir euch gerne weiterführende Hilfestellung geben, setzen dabei allerdings auch ein gewisses Maß an Eigenständigkeit voraus: Die erste Anlaufstelle sollten die Referenzen sein, welche sowohl auf umfangreiche Nachschlagewerke als auch empfehlenswerte Tutorials für Einsteiger verweisen. Die Verwendung von Suchmaschinen und einschlägige Frage-und-Antwort-Plattform zum Thema Softwareentwicklungen sollten ebenfalls vor dem Tutor besucht werden.
Natürlich ist es auch möglich, die Übungsaufgaben am eigenen Rechner zu lösen, beachtet aber bitte:
- Eure Abgabe muss mit den von uns verwendeten Tools (fehlerfrei) übersetzen, egal welche Version ihr zuhause verwendet.
- Die Abgabe muss rechtzeitig über unser
submit
-Skript geschehen. Wir werden keine Lösungen per eMail akzeptieren, und auch Internetverbindungsprobleme sind kein Grund für eine verspätete Abgabe. - Fragen bei Schwierigkeiten mit der Übungsaufgabe nur in der Übung, nicht per eMail. Die Rechnerübung ist hierfür die erste Anlaufstelle und der Besuch der Tafelübung ist sowieso unersetzlich.
- Wir übernehmen natürlich keine Verantwortung für Soft- und Hardware.
Anleitungen
- Entwicklung auf dem Heimcomputer unter Windows
- Entwicklung auf dem Heimcomputer unter Linux (insbesondere Debian/Ubuntu)
Die Anleitung für Linux sollte prinzipiell auch auf weitere unixoide Betriebssystem (wie MacOS) adaptierbar sein.