1 Embedded Systems II (WS20/21)¶
Bitte melden Sie sich im Moodle Kurs an: https://moodle.hs-augsburg.de/course/view.php?id=4116
Jeden Mittwoch im Semester um 14 Uhr ist unser Zoom Meeting:
Zoom Meeting: https://hs-augsburg.zoom.us/j/98633783218?pwd=V1JncHJZT21aUmtwaDNoUHVnMEJyZz09
Meeting-ID: 986 3378 3218 | Kenncode: 925295
1.1 7.10., Vorbesprechung¶
7.10.2020, 14 Uhr
Ziele
Mikrocontroller in C programmieren
Wie läuft ein C Programm auf unterster Ebene ab? (Zusammenhänge klar machen)
Elementares Debuggen eines C Programms mit GDB (Link)
Verwendung eines Logikanalysators (Saleae Logic https://www.saleae.com)
Exceptions und Interrupts
Programmieren mit Bibliotheken (CMSIS und Cube)
Umlenken der Ein-/Ausgabe
Quasi-parallele Programmierung mit RTOS (FreeRTOS)
Low-power Programmierung
Arbeitsumgebung
Linux, Kommandozeile, freie Werkzeuge
Virtuelle Maschine http://ti-wiki.informatik.hs-augsburg.de/doku.php?id=rt-labor_rtvm
estool - Hilfsprogramm zum Flashen, Debuggen, … https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/estool
Experimentierboard „Nucleo STM32L476“ https://www.st.com/en/evaluation-tools/nucleo-l476rg.html
ARM Cortex M4
Bild: http://hhoegl.informatik.hs-augsburg.de/es2/img/Nucleo-L476RG.webp
Preis nur ca. 12 Euro
„Board Server“ (wg. Covid-19), vier Nucleo Boards hängen mit allen Schnittstellen an einem Server an der Hochschule. Einloggen per ssh, Board reservieren - arbeiten - freigeben. Man kann einige Pins lesen, setzen, sowie mit einem Logikanalysator betrachten (Saleae Logic). Die Bedienung erfolgt über das „estool“.
http://hhoegl.informatik.hs-augsburg.de/es2/img/rtlab-remote-kaefig.jpg
Nucleo Board und ESP8266 (ERC - Embedded Remote Controller) http://hhoegl.informatik.hs-augsburg.de/es2/img/rtlab-remote-erc.jpg
Praktikum
Teamarbeit
6 Versuche (auch im gitlab, z.B. https://r-n-d.informatik.hs-augsburg.de:8080/es2/v1)
Alle zwei Wochen ein Versuch. Vorbereitung und Nachbereitung nötig.
Berichte mit Sphinx schreiben. Abgabe mit Code in Gitlab.
Sphinx Vorlage: https://r-n-d.informatik.hs-augsburg.de:8080/es2/ws2020_21/team_demo
Wegen Covid-19 können wir nicht wie gewohnt im Labor G2.16 arbeiten. Maximal 7 Personen plus 2 Betreuer.
Hoffnung: Manche Experimente aus der Ferne mit dem Board-Server machen. Möglich wäre auch, dass nur ein Team-Mitglied im Labor ist, und die anderen über Video teilnehmen.
Gitlab Repositories
Ausarbeitung jedes Teams (Bericht, Bilder, Videos, Code, …)
Issues
Beispielprogramm, z.B. „starter“
https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/starter
Lesestoff
Joseph Yiu, The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors, 3rd Edition, Newnes 2013. https://learning.oreilly.com/library/view/the-definitive-guide/9780124080829/
Hausaufgabe bis 14.10.
Rechner/Notebook für Linux startklar machen. Z.B. obige virtuelle Maschine installieren.
Einarbeiten in Sphinx
Einarbeiten in Gitlab (https://gitlab.informatik.hs-augsburg.de)
Öffentlichen ssh Schlüssel in Gitlab anlegen: https://tha.de/~hhoegl/home/GitSpicker#git-im-www-gitlab
Sphinx Demobericht klonen, kompilieren nach HTML, lesen https://gitlab.informatik.hs-augsburg.de/hhoegl/sphinxbericht http://hhoegl.informatik.hs-augsburg.de/dva/sphinxbericht
Die Sphinx Vorlage „team_demo“ für Ihr Team anpassen und in das Team Repository aufnehmen.
1.2 14.10., 14 Uhr¶
„RTLAB-Remote“ EmbeddedSystemsFAQ
Beispiel „starter“: https://r-n-d.informatik.hs-augsburg.de:8080/es2/v1
Hausaufgaben
Im Buch von Yiu (3. Auflage) das Kapitel 17 lesen: „Getting Started with the GNU Compiler Collection“
oder hier: http://hhoegl.informatik.hs-augsburg.de/es2/gnu/DGCM3-2e-ch19.pdf
Heutige Vorfuehrung nachvollziehen und in Bericht aufnehmen (siehe EmbeddedSystemsFAQ, Abschnitt „RTLab-Remote“)
Versuch/Aufgabe 1: https://r-n-d.informatik.hs-augsburg.de:8080/es2/v1
Aufgabenteile 1.1 und 1.2 bearbeiten, auch in Bericht aufnehmen!
Die Beispielprogramme darin (blinky, startupcode und serial) haben noch Zeit!
1.3 21.10., 14 Uhr¶
Ausführliche Besprechung des „starter“ Beispiels und der drei Programme von Versuch/Aufgabe 1. Siehe das Vorlesungs-Video
es2-21-oct-20.mp4
unter http://hhoegl.informatik.hs-augsburg.de/video.Als Hausaufgabe ist die Aufgabe 1 bis 28.10 auf.
1.4 28.10., 14 Uhr¶
Die zweite Aufgabe besteht aus drei Teilen:
https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/starter-cmsis
https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/syshandler-cmsis
https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/gpio-intr-cmsis
In jedem Teil ist ein Aufgabentext mit dem Dateinamen
Aufgaben.rst
.Beim Versuch
gpio-intr-cmsis
muss man den User-Button B1 auf dem Nucleo Board drücken. Wenn man den Versuch auf dem RTlab-Remote Server macht, dann sieht man hier, wie die Ansteuerung des Nucleo-Boards mit dem ERC gemacht wurde:http://hhoegl.informatik.hs-augsburg.de/es2/stm32l4/rtlab-remote-nucleo-signals.svg
1.5 4.11., 14 Uhr¶
Aufgabe 1 ist bei den meisten fertiggestellt.
Aufgabe 2 ist bis naechste Woche (11.11.) auf.
Lesestoff:
STM32 Exception Processing stm32_exc_prog.svg | stm32_exc_prog.pdf
Hervorragender Artikel von I.C. Bertolotti zum Cortex-M Exception Handling (10 Seiten, nicht Pflicht, aber wer es genauer wissen mag, sollte ihn lesen) http://hhoegl.informatik.hs-augsburg.de/es2/exceptions/bertolotti/
Yiu, Kap. 2 (Introduction to Embedded Software Development)
https://learning.oreilly.com/library/view/the-definitive-guide/9780124080829/xhtml/CHP002.html
1.6 11.11., 14 Uhr¶
TODO: V2 heute zu Ende bringen und den Bericht updaten.
Die Aufgabe 3 beschäftigt sich mit der ST Micro „Cube“ Bibliothek an Hand der zwei Beispiele GPIO_IO_TOGGLE und GPIO_EXTI. Beide Verzeichnisse sind im Repository
https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/cube-demos
enthalten. Die Aufgaben finden Sie jeweils in der README.md.
Damit man diese Beispiele kompilieren kann, muss die Cube Bibliothek installiert sein. Auf dem RTLab-Remote
Server ist das in /opt/stm32cubel4/
.
Wichtig ist, dass Sie die Umgebungsvariable CUBE_HOME
auf das Cube Installationsverzeichnis setzen. Nehmen Sie dazu auf dem RTLab-Remote Server in ~/.profile
noch die Zeile
export CUBE_HOME=/opt/stm32cubel4
Danach müssen Sie die Datei neu einlesen mit source ~/.profile
.
In der virtuellen Maschine (Xubuntu) finden Sie die Cube Bibliothek an der Stelle
/opt/rtlab/share/stm32cubel4
. Prüfen Sie auch hier den korrekten Wert von CUBE_HOME
.
Wie die Installation erfolgte, entnehmen Sie dem Text
http://ti-wiki.informatik.hs-augsburg.de/doku.php?id=rt-labor_rtvm (nur mit VPN Verbindung).
1.7 18.11., 14 Uhr¶
Zur Aufzeichnung: http://hhoegl.informatik.hs-augsburg.de/video/
1.8 25.11., 14 Uhr¶
Motivation zur quasi-parallelen Programmierung
https://r-n-d.informatik.hs-augsburg.de:8080/es2-nucl476/taskswitch
https://r-n-d.informatik.hs-augsburg.de:8080/es2-nucl476/shared-data-problem
Zur Aufzeichnung: http://hhoegl.informatik.hs-augsburg.de/video/
1.9 2.12., 14 Uhr¶
Erläuterungen zur den FreeRTOS Aufgaben.
Zur Aufzeichnung: http://hhoegl.informatik.hs-augsburg.de/video/
1.10 9.12, 14 Uhr¶
Umlenken der Ein- und Ausgabe auf den UART („retargeting“).
Aufgabe 5: https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/retarget
Der Aufgabentext ist im Repository enthalten. Es gibt ein paar Tipps zur Lösung.
Zur Aufzeichnung: http://hhoegl.informatik.hs-augsburg.de/video/
Abgespeicherte Zeichnungen: http://hhoegl.informatik.hs-augsburg.de/video/zoom-201209
Die Übersicht zur Cube Bibliothek benötigt man für die Teilaufgabe (a2). Damit wird es klarer, wie der
UART bei der Cube Bibliothek initialisiert werden muss:
http://hhoegl.informatik.hs-augsburg.de/es2/cube/cube_basics.pdf
Ich empfehle auch, in das Beispiel cube-demos/PWR_ModesSelection
zu schauen. Dort sieht man
wie der UART Code funktioniert.
In den ersten 47 Seiten des UM1884 ist eine gute Übersicht wie die Cube-Bibliothek strukturiert ist, diese Seiten habe ich aus dem mehr als 2700 starken Text herausgezogen: http://hhoegl.informatik.hs-augsburg.de/es2/stm32l4/Manuals/UM1884-HAL-Doku-1-47.pdf
1.11 16.12., 14 Uhr¶
Vorlesung: Low-power Programmierung (leider nicht auf den Aufnahme-Knopf gedrückt)
Siehe Skript http://hhoegl.informatik.hs-augsburg.de/es2/skript/lowpower.html
Beispielprogramme:
https://r-n-d.informatik.hs-augsburg.de:8080/es2-nucl476/cube-demos/tree/master/PWR_ModesSelection
Bei diesem Beispiel wurden folgende Stromaufnahmen gemessen:
http://hhoegl.informatik.hs-augsburg.de/es2/Stromaufnahmen.txt
Lit.:
http://hhoegl.informatik.hs-augsburg.de/es2/prog/keil_grobe_energyeff.pdf (S. 1-9)
STM32L4 ultra-low-power features overview (AN4621), 2017, siehe EmbeddedSystemsDocs
STM32L4 Reference Manual (RM0351), chap. 5.3 „Low-power modes“, siehe EmbeddedSystemsDocs
Elecia White, Making Embedded Systems, chap. 10 „Reducing Power Consumption“ (siehe Literaturangaben im Skript)
Aufgabe 6:
Schauen Sie sich den Quelltext für das Beispiel „PWR_ModesSelection“ an und stellen Sie in einer Tabelle zusammen, was in den einzelnen Stromsparbetriebsarten jeweils zum Stromsparen angewendet wird.
Falls Sie ein Multimeter zu Hause haben, dann finden Sie heraus, welche Auflösung dessen kleinster Strommessbereich (Gleichstrom) hat. Sollten Sie auch noch ein Nucleo Board zu Hause haben, dann können Sie selber die Stromaufnahme des Boards über die beiden IDD Anschlüsse ermitteln.
Bestimmen Sie die Stromstärken für die LED-Ein und LED-Aus Zustände aus dem Oszilloskop-Bild im Skript, Abschnitt 6.10 („Praktische Strommessung“).
Welche Stromsparbetriebsarten kommen beim STM32L476 in Frage, wenn man einen Rauchmelder bauen möchte, der aus einer CR2032 Zelle (3,0V, 210mAh) gespeist werden soll und 10 bis 20 Jahre damit laufen soll?
Quelltext von FreeRTOS_LowPower ansehen. Wie funktioniert es?
1.12 Zum Nachschlagen¶
Alle relevanten Handbücher/Manuals/Datenblätter sind hier: EmbeddedSystemsDocs
Zum GDB
GDB Quickref quickref.txt, quickref.pdf
GDB Anleitung/Übung https://r-n-d.informatik.hs-augsburg.de:8080/es2/es2-nucl476/gdb-uebung (siehe Aufgaben.rst)
Info zu tmux
Eine Seite mit den wichtigsten Kommandos http://hhoegl.informatik.hs-augsburg.de/pub/tmux/tmux-quickref/tmux-quickref.pdf
Guter Artikel vom Linux Journal (2016) http://hhoegl.informatik.hs-augsburg.de/pub/tmux/tmux-lj-3-2016.pdf
Info zu Vim
Asciinema Casts
Git Spicker https://tha.de/~hhoegl/home/GitSpicker
FreeRTOS
Buch von Richard Barry, dem Autor von FreeRTOS (jetzt a:FreeRTOS, „a“ fuer Amazon): Mastering the FreeRTOS™ Real Time Kernel, 399 Seiten, 2016.
https://www.freertos.org/Documentation/RTOS_book.html
Vom gleichen Autor gibt es online auch ein Tutorial:
Real Time Application Design Tutorial - Using FreeRTOS in small embedded systems https://www.freertos.org/tutorial/
RTOS Konzepte: https://www.freertos.org/implementation/main.html
UM1722 - Developing Applications on STM32Cube with RTOS (2014, 26 Seiten)
http://hhoegl.informatik.hs-augsburg.de/es2/stm32l4/Manuals/DM00105262.pdf
Yiu, Kap. 19 http://hhoegl.informatik.hs-augsburg.de/es2/prog/rtos/yiu-3e-ch19.pdf
Constantin Gonzalez, Mit Microcontrollern in die Cloud, Elektronik 24/2018 (4 Seiten). http://hhoegl.informatik.hs-augsburg.de/es2/prog/rtos/aFreeRTOS-Elektronik-24-2018.pdf
Alte Klausuren: http://hhoegl.informatik.hs-augsburg.de/es2/Klausuren/