Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

 

Entwicklungsumgebung
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
    spic-editor-start.png
  • 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  SPiCboard (GSPiC bzw. erste Veranstaltungsteil von SPiC) und einen für  Linux (zweiter Veranstaltungsteil in SPiC). Der Screenshot zeigt die Oberfläche im SPiCboard Modus.

spic-editor.png
  • 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, wobei X 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!
  • 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 statt X 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)
  •  SPiCboard Umschalter zwischen dem Entwicklungsmodus für Mikrocontroller und Linux. Für den Mikrocontroller stehen folgende Buttons zur Auswahl:
    •  Compile C-Quelltext in optimierten Maschinencode für den Atmega328pb übersetzen (gut, um Syntaxfehler zu finden)
    •  Flash Programm auf das angeschlossene SPiCboard übertragen (übersetzt den C-Quelltext automatisch, wenn nötig)
    •  Simulate Programm im SPiCsim ausführen (Übersetzen geschieht ebenfalls automatisch, wenn nötig)
    •  Debug 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)
    •  Solution Überträgt die Musterlösung der jeweiligen Aufgabe auf das angeschlossene SPiCboard
  •  Linux Umschalter zwischen dem Entwicklungsmodus für Mikrocontroller und Linux. Für die Systemprogrammierung unter Linux stehen folgende Buttons zur Verfügung:
    •  Make Ruft das gleichnamige Build-Management-Tool mit 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
    •  Debug Wechsel in den Debugmodus, zeigt zu Beginn eine Oberfläche für die Konfiguration des GDB an
    •  Terminal Integriertes Terminalfenster ein- bzw. ausblenden

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  Compile) 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 (wobei X 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 eigenen Makefile mittels
    LIBSPICBOARDDIR ?= /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 Datei blink.c kann durchaus
    make 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 sowie sensor.c kann mit der zusätzlichen Abhängigkeitsangabe
    watch.elf: main.c display.c sensor.c
    in der zuvor erstellten Makefile die Binärdatei watch.elf kompilieren. Natürlich kann auch alternativ die komplette Regel überschrieben werden, um z.B. eigene Parameter an den Übersetzer zu übergeben
    watch.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 wie
    make 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

Die Anleitung für Linux sollte prinzipiell auch auf weitere unixoide Betriebssystem (wie MacOS) adaptierbar sein.