Entwicklungsumgebung

# 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 i4spic@lists.cs.fau.de freuen.

## 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 verschiedene Entwicklungsmodi: Für den Mikrocontroller (erste Veranstaltungsteil von SPiC) kann mit SPiCboard die Hardware programmiert werden, während SPiCsim einen Simulator anbietet. Für den zweite Veranstaltungsteil in SPiC gibt es mit Linux einen Modus für die Systemprogrammierung. Das Beispiel zeigt die Oberfläche im SPiCboard Modus.

- Auf der linken Seite ist unter Project dein 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!).
  - Zeige die zuletzt abgegebene Lösung der gerade bearbeiteten Aufgabe an (sofern vorhanden)
  - 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.
- SPiCboard Umschalter zwischen den Entwicklungsmodi; 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)
  - 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
  - Help 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)
- SPiCsim Umschalter zwischen den Entwicklungsmodi. Für den Simulation des Mikrocontrollers stehen folgende Buttons zur Auswahl:
  - Compile C-Quelltext in optimierten Maschinencode für den Atmega328pb übersetzen
  - Simulate Programm im (neuen) SPiCsim ausführen (Übersetzen geschieht ebenfalls automatisch, wenn nötig)
  - Legacy Programm im bewährten (Legacy) SPiCsim ausführen (Übersetzen geschieht auch hier automatisch, wenn nötig)
  - Debug Quelltext ohne Optimierungen mit Debuginformationen übersetzen und im SPiCsim Fehlersuchmodus ausführen. Haltepunkte können zuvor durch einen Klick vor der entsprechenden Zeilennummer im C-Quelltext bestimmt werden (roter Punkt vor der Zeilennummer)
  - Solution Musterlösung der jeweiligen Aufgabe im Simulator starten
  - Help Zeigt die Hilfe zur IDE bzw. die Dokumentation der libspicboard an.
- Linux Umschalter zwischen den Entwicklungsmodi. 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
  - Help Zeige die Hilfe zur Entwicklung unter Linux an (insbesondere die SPiC-Zettel zur C Standard Library [libc])

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/i4spic/pub/` Öffentlicher Ordner mit Aufgabenstellungen, weiterführendes Material und Beispielanwendungen. Zusätzlich sind für viele Aufgaben Beispielimplementierungen verfügbar.
- `/proj/i4spic/LOGIN` Dein SPiC-Projektverzeichnis.
- `/proj/i4spic/bin/` Skripte, u.a. für die Abgabe.

## Aufgabenverzeichnis anlegen

- Terminal öffnen (View -> Tool Views -> Show Terminal)
- In das i4spic-Benutzerverzeichnis wechseln: `cd /proj/i4spic/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 SPiC Makefile in das aktuelle Verzeichnis kopieren: `cp /proj/i4spic/pub/libspicboard/Makefile .`

## Texteditor (Beispiel: Kate)

- In das Aufgabenverzeichnis wechseln: `cd /proj/i4spic/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 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. Dies erfordert allerdings ein gewisses Maß an Eigenständigkeit: 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.

## Virtuelle Maschine

Es existiert ebenfalls ein Abbild einer Virtuellen Maschine (VM) mit einer der CIP ähnlichen Umgebung (Debian 10), welches für die Tutoren erstellt wurde. Diese ist für VirtualBox Version 6 mit Oracle VM VirtualBox Extension Pack aufgesetzt und kann hier heruntergeladen werden (Achtung, mehrere Gigabyte groß).

Der Benutzer lautet `xy42abcd` und das Passwort ist immer `spic`, nach dem ersten Start sollte `update` ausgeführt werden. In der Regel sollte ein angeschlossenes SPiCboard von dem Host an die Virtuelle Maschine "durchgereicht" werden und kann somit auch programmiert werden.

Als experimentelle Erweiterung kann in der VM der Editor mit einer Verbindung zu einem CIP Rechner (Terminalrechner `faui06`) gestartet werden. Damit können die Daten im eigenen CIP SPiC Ordner von der entfernten VM bearbeitet werden, auch Funktionalitäten wie die Abgabe sind dann möglich. Bitte beachten: Diese Option wird ausschließlich auf eigenes Risiko verwendet, es besteht Gefahr alle Dateien im eigenen SPiC Verzeichnis zu verlieren! Es gibt von uns keine Unterstützung für diese Option, Probleme durch die Verwendung der Option rechtfertigen keine verspätete Abgabe!