Entwicklung auf dem Heimcomputer unter Linux (insbesondere Debian/Ubuntu)

## Installation

### Benötigte Dateien und Programme

- Die libspicboard-Bibliothek muss heruntergeladen und entpackt werden (der Pfad sollte keine Leerzeichen beinhalten).
- Für den AVR müssen die C-Standardbibliothek (avr-libc), der Übersetzer (gcc-avr) sowie ein Tool zur Kommunikation/Übertragung der fertig übersetzten Programme (avrdude) installiert werden. Unter Ubuntu oder Debian geht das mittels

      sudo apt install avr-libc gcc-avr avrdude

### Automatische Berechtigungen mittels udev

- Falls man nun das SPiCboard via USB mit dem PC verbindet, wird man feststellen, das ein normaler Benutzer keine Berechtigung hat, eine neue Anwendung aufzuspielen. Um jedoch den Zugriff auf das zugrunde liegende Xplained Mini auch für Nicht-Superuser erlaubt ist, erstelle eine Datei `/etc/udev/rules.d/60-xplainedmini.rules` mit dem Inhalt

      SUBSYSTEM!="usb", ACTION!="add", GOTO="xplained_end"
      ATTR{idVendor}=="03eb", ATTR{idProduct}=="2145", GROUP="adm", MODE="666"
      LABEL="xplained_end"

  Ab dem nächsten Neustart ist die neue udev-Regel aktiv, allerdings kannst du sie auch sofort laden:

      sudo udevadm control --reload-rules
      sudo udevadm trigger

- Nun noch die libspicboard herunterladen und in ein leeres Verzeichnis entpacken. Nachdem man das SPiCboard verbunden hat und mit einem Terminal in das Unterverzeichnis 'beispiel' gewechselt ist, sollte nach Eingabe von

      make

  das Beispielprogramm übersetzt und auf das SPiCboard übertragen werden, und nach Abschluss dort auf der 7-Segment-Anzeige `ok` ausgeben.

### Debugger

- Der Debugger GDB (für AVR) kann derzeit nur über eine von uns modifizierte Variante des AVaRICE (im GitLab unter i4/SPiC/Tools/AVaRICE) mit dem SPiCboard kommunizieren.
- Nach dem Download (`git clone` oder ZIP-Archiv und entpacken) muss dieser zuerst kompiliert und installiert werden werden

      sudo apt install libusb-dev libhidapi-dev gdb-avr
      cd AVaRICE/avarice/
      ./Boostrap
      ./configure
      make
      sudo make install

- Debuggen einer Anwendung durch
  1. Übersetzen mit Debuginformationen (Parameter `-g`) und am besten ohne Optimierungen (`-O0`)
  2. Übertragen auf das SPiCboard
  3. Mit AVaRICE über das mEDBG-Protokoll (Parameter `-5 -w` eine Verbindung mit dem OnBoard-Debugger auf dem SPiCboard herstellen
  4. GDB über einen Socket mit AVaRICE verbinden.
  5. Steuerung über die GDB Konsole (weiter Infos)
- Der Ablauf ist in der Makefile mit dem `%.debug` Target gekapselt: Eine Anwendung `blink.c` kann mit

      make blink.debug

  ohne Optimierungen mit Debugsymbolen übersetzt und auf das angeschlossene SPiCboard übertragen werden, anschließend wird eine Verbindung mit GDB über AVaRICE zum SPiCboard hergestellt und die GDB Konsole angezeigt.

### Entwicklungsumgebung

- Es gibt eine Vielzahl von integrierten Entwicklungsumgebungen, welche für SPiC verwendet werden können: Vom nerdigen vim über die Standardeditoren Kate und Geany bis hin zum mächtigen Eclipse CDT, ihr habt die Qual der Wahl.
- In den Übungen verwenden wir mit der SPiC IDE eine angepasste Variante des Atom-Editors. Die Änderungen sind jedoch auf den CIP-Pool zugeschnitten, ein Einsatz auf den heimischen PC bedarf einige Änderungen und wird daher absolut nicht für Einsteiger empfohlen. Wir werden deshalb auch keine Unterstützung zur Einrichtung geben!
  - Für Debian 10 (buster) gibt es ein internes Repository mit dem Editor, der die CIP Umgebung nach baut und obige Installationsschritte durchführt. Eine Installation kann wie folgt geschehen (bitte Warnung unten beachten):

        sudo apt install apt-transport-https
        wget -O - https://i4spic.cs.fau.de//editor/repo.gpg.key | sudo apt-key add -
        echo "deb https://i4spic.cs.fau.de//editor/debian buster main" | sudo tee /etc/apt/sources.list.d/spic.list
        sudo apt update
        sudo apt install spic-editor

    Warning
      Fremdquellen sind immer ein Sicherheitsrisiko! Es ist möglich, dass die angebotenen Pakete euer System beschädigen – ein Einsatz darf nur innerhalb einer sicheren Umgebung (z.B. Virtuelle Maschine oder alter PC) stattfinden und ist auf vollständig eigene Gefahr!
  - Ein Archiv mit dem Editor ist ebenfalls vorhanden, welches nach dem Durchführen obiger Schritte im Wurzelverzeichnis [hier sollten alle Alarmglocken schrillen] entpackt werden muss:

        su
        # Benutzer i4spic anlegen
        adduser i4spic
        mkdir -p /proj/i4spic
        chown i4spic:i4spic /proj/i4spic
        # Paket holen und entpacken
        su i4spic
        wget https://i4spic.cs.fau.de//editor/spic-editor.tar.gz
        tar -xavf spic-editor.tar.gz -C /   # der Befehl ist gefährlich!
        exit
        # Bentzerverzeichnis erstellen - USER mit eurem Benutzernamen ersetzen
        mkdir -p /proj/i4spic/USER/korrektur
        ln -s /proj/i4spic/pub /proj/i4spic/USER/pub
        chown USER /proj/i4spic/USER

## Hinweise

- Die von uns herausgegebenen SPiCboards sind mit der DWEN-Fuse auf debugWIRE gestellt. Dadurch kann unter Windows im Atmel Studio mit dem Board direkt der Debugger verwendet werden. Das Linuxtool `avrdude` unterstützt dieses Protokoll nur in aktuellen Versionen.
- Bei der Verwendung mit älteren Versionen muss gegebenenfalls das SPiCboard zuerst wieder auf den ISP-Mode umgestellt werden (bitte nur mit dem eigenen/privaten SPiCboard durchführen):
  - Starte im Atmel Studio (auf Windows) eine Beispielanwendung (z.B. `blink.c`) in einer Debug-Session
  - Halte auf einem Breakpoint an
  - Im Menü Debug die Aktion Disable debugWIRE and Close ausführen. Siehe dazu auch die Dokumentation von Atmel.
- Der ATmega328PB ist außerdem so neu, dass `avrdude` ihn teilweise noch nicht unterstützt.
  - In den Informatik CIP-Pools wird vom Makefile automatisch eine angepasste Version von `avrdude` aufgerufen, diese liegt in `/proj/i4spic/pub/tools/`
  - Auf dem eigenen Rechner muss eine aktuelle Version von avrdude mit einer zusätzlichen Konfigurationsdatei ausgeführt werden:
    `avrdude -C +atmega328pb.conf -c xplainedmini -p m328pb -v`
  - Die Fehlermeldung `avrdude: Can't find programmer id "xplainedmini"` ist ein guter Indikator dafür, dass das verwendete avrdude zu alt ist (Version 6.2 oder älter).
- Um wieder den Debugger im Atmel Studio verwenden zu können, muss wieder vom ISP-Mode zu debugWIRE gewechselt werden.
  - Im unter Windows im Atmel Studio im Menü Tools die Aktion Device Programming auswählen
  - Im neuen Fenster unter Tool das angeschlossene SPiCboard auswählen (mEDBG ATML252304020...) und auf Apply klicken
  - Unter der Sektion Fuses einen Haken bei HIGH.DWEN setzen und mit Program auf das SPiCboard schreiben.
  - Achtung: Die Veränderung der anderen Fuses kann das SPiCboard irreparabel beschädigen!