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
Programmbeispiele/Übungen https://gitlab.com/hhoegl-tha/es/f446
Abgaben für Gruppen 1x, 2x https://gitlab.informatik.hs-augsburg.de/es2
GDB
Quickref (2 Seiten)
Terminübersicht¶
- #1 08.10.25
Einführung in den generellen Ablauf. Beispiel
startergezeigt.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
starterlä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
starterlä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
deactivateein.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. Mithx --healthzeigt Helix die installierten Sprachserver an. Ein Tutorial bekommt man mithx --tutor.Eine Altenative wäre Vim, hier muss ich aber zunächst eine Vim Erweiterung installieren, um den
clangdSprachserver zu integrieren. Mitvimtutorgeht es zum Vim Tutorial. Den „vollen“ Vim bekommt man erst durchsudo 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)
Sowohl
btals auchtiosind etwas komfortabler zu verwenden, es gibt z.B. eine list Option-l.