Embedded Systems II

Wintersemester 25/26, W3.15, 08:15 Uhr

Tragen Sie sich bitte in den Moodle Kurs #9802 ein. In den „Ankündigungen“ im Kurs finden Sie aktuelle Nachrichten.

https://moodle.hs-augsburg.de/course/view.php?id=9802

Terminübersicht

#1 08.10.25

Einführung in den generellen Ablauf. Beispiel starter gezeigt.

Hausaufgaben

  • Empfohlener Lesestoff für den Einstieg: Lacamera Kap 1 + 2, Yiu Kap 2 + 17. Die Bücher finden sie in der Cloud, der Link steht auf der Moodle Startseite.

  • Rechner vorbereiten (siehe Abschnitt im Skript)

  • Nucleo-F446 organisieren

#2 15.10.25

W3.15, ab 09:50 Gruppen 1x in G2.16

Ziel im Praktikum: Funktionsfähige Arbeitsumgebung, so dass starter läuft. Das Repo ist hier: https://gitlab.com/hhoegl-tha/es/f446/starter.

Die nächste Übung ab #4 wird die „gdb-uebung“ sein: https://gitlab.com/hhoegl-tha/es/f446/gdb-uebung

#3 22.10.25

W3.15, ab 09:50 Gruppen 2x in G2.16

Ziel im Praktikum: Funktionsfähige Arbeitsumgebung, so dass starter läuft.

#4 29.10.25

W3.15, ab 09:50 Gruppen 1x in G2.16

Praktikum: gdb-uebung (https://gitlab.com/hhoegl-tha/es/f446/gdb-uebung)

#5 05.11.25

W3.15, ab 09:50 Gruppen 2x in G2.16

Praktikum: gdb-uebung

#5 12.11.25

W3.15, ab 09:50 Gruppen 1x in G2.16

Praktikum: gnu_start (https://gitlab.com/hhoegl-tha/es/f446/gnu_start)

#6 19.11.25

W3.15, ab 09:50 Gruppen 2x in G2.16

Praktikum: gnu_start

#7 26.11.25

W3.15, ab 09:50 Gruppen 1x in G2.16

#8 03.12.25

W3.15, ab 09:50 Gruppen 2x in G2.16

#9 10.12.25

W3.15, ab 09:50 Gruppen 1x in G2.16

#10 17.12.25

W3.15, ab 09:50 Gruppen 2x in G2.16

Tipps

Was ist, wenn ich gdb-multiarch nicht auf meinem Linux finde, z.B. bei SuSe Linux?

Holen Sie sich von https://developer.arm.com/Tools and Software/GNU Toolchain die aktuelle Arm Toolchain (z.B. arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi.tar.xz). Installieren unter /opt, PATH setzen. Mit dabei ist der GDB (arm-none-eabi-gdb), in dieser Distribution hat er keinen Support für Python. Die Beispielprogramme gehen jedoch davon aus, dass Python eingebaut ist. Die Abhängigkeit von Python stammt nur von einer einzigen Stelle am Ende von .estool/gdbinit. Wenn man den Bereich zwischen python und end auskommentiert und durch eine Zeile target ... ersetzt, dann kann man einen beliebigen GDB ohne Python Support verwenden. So soll der Abschnitt dann aussehen:

# python
# import sys
# print("Python", sys.version)
# gdbport = gdb.convenience_variable("gdbport")
# cmd = "target extended-remote :%d" % gdbport
# gdb.execute(cmd)
# end
target extended-remote :3333

Bei einigen Programmen habe ich das im Repo schon geändert, lassen sie also mal git pull laufen. Dann muss noch der Name des GDB Programms in .estool/estool.ini geändert werden. Der Eintrag beginnt mit

gdb-command = [gdb-multiarch, --tui, ...

Diese Zeile ersetzen durch

gdb-command = [arm-none-eabi-gdb, --tui, ...

Im Projekt wird durch make gdb der Debugger aufgerufen. Hinter den Kulissen startet das Makefile estool --gdb, das estool liest das zu startende Kommando aus estool.ini.
Bei dem gerade neu entstehenden estool-rs habe ich das anderes gelöst. Mit der -p Option kann man den Programmnamen mitgeben:

$ estool-rs gdb -p arm-none-eabi-gdb

Wenn man -p nicht angibt ist gdb-multiarch voreingestellt. Diese Option ist ab der Version 0.3 eingebaut. Alle Optionen des gdb Subkommandos sieht man mit estool-rs gdb -h. Quelltext und Binär-Releases sind auf https://gitlab.com/hhoegl-tha/es/estool-rs. Alles was das estool bzw. estool-rs macht, ist den GDB mit den nötigen Optionen aufzurufen. Das kann man natürlich auch von Hand machen:

$ arm-none-eabi-gdb --silent --tui -x .estool/gdbinit -iex "set auto-load safe-path /"

Die Kommandozeile kann man sich von der KI erklären lassen, ich habe das mal versucht, hier ist die Ausgabe.

estool und estool-rs

Das estool ist ein Python Programm das Flashen, GDB Aufrufen, OpenOCD starten vereinfachen soll. Es existiert schon lang und ich möchte es eigentlich nicht mehr weiter pflegen. Aktuell ist noch ein Problem hinzugekommen, es funktioniert nicht mehr mit Python Version 3.13. Deshalb sollte man eine virtuelle Umgebung mit Python 3.12 schaffen.

Anleitung:

  • uv installieren:

    $ curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • Virtuelle Umgebung mit Python 3.12 anlegen:

    $ uv venv --python 3.12
    
  • pip installieren

    $ uv pip install pip
    
  • Virtuelle Umgebung aktivieren

    $ . .venv/bin/activate
    

    Tipp: Zum Deaktivieren gibt man einfach deactivate ein.

  • In das estool Repo gehen und dort aufrufen:

    $ pip install -U .
    

Damit sollte dann estool in der virtuellen Umgebung installiert sein. Wenn man die Shell verlässt und wieder neu startet muss man zunächst die virtuelle Umgebung aktivieren, sonst wird estool nicht gefunden.

Statt das alte estool upzudaten schreibe ich lieber ein neues Programm, das ist estool-rs, das zur Zeit noch ziemlich am Anfang ist. Die Kommandozeilenoptionen sind nicht kompatibel mit estool. Eine kurze Beschreibung ist in der README.md unter https://gitlab.com/hhoegl-tha/es/estool-rs. Um es zu nutzen muss man die Kommandos von Hand eingeben, oder man könnte auch das Makefile modifizieren.

Programme die ich beim Vorführen verwende:

  • Zellij Terminal Multiplexer (https://zellij.dev)

    Mein Alias zum Starten ist

    alias zj='zellij options --simplified-ui true --no-pane-frames --theme dracula --show-startup-tips false'
    

    Eine Alternative wäre tmux (https://github.com/tmux/tmux/wiki).

  • Helix Editor (https://helix-editor.com)

    Zum komfortablen Editieren von C und anderen Sprachen muss für die jeweilige Sprache ein „Langugage Server“ installiert sein, für C und C++ empfehle ich clangd. Mit hx --health zeigt Helix die installierten Sprachserver an. Ein Tutorial bekommt man mit hx --tutor.

    Eine Altenative wäre Vim, hier muss ich aber zunächst eine Vim Erweiterung installieren, um den clangd Sprachserver zu integrieren. Mit vimtutor geht es zum Vim Tutorial. Den „vollen“ Vim bekommt man erst durch sudo apt install vim.

  • Um bereits eingegebene Kommandos wieder zu finden verwende ich Atuin https://atuin.sh.

  • Terminal Emulatoren:

    • picocom (sudo apt install picocom)

    • microcom (sudo apt install microcom)

    • bootterm, bt (sudo apt install bootterm)

    • tio (https://github.com/tio/tio)

    Sowohl bt als auch tio sind etwas komfortabler zu verwenden, es gibt z.B. eine list Option -l.