Embedded Systems II (WS18/19)
Inhalt
1 Organisatorisches
Ablauf
Die Veranstaltung Embedded System II findet wöchentlich am Mittwoch Nachmittag ab 14 Uhr statt. Am Anfang ist eine 90-minütige Vorlesung, danach finden zwei Blöcke Praktikum statt.
Wöchentliches Praktikum
Für das Praktikum werden die TeilnehmerInnen der Veranstaltung in zwei Gruppen G1 und G2 geteilt, die im wöchentlichen Wechsel im Praktikum sein werden. In jeder Gruppe werden Teams gebildet mit zwei bis drei TeilnehmerInnen.
Die Aufgaben sollen in der zweiwöchigen Vorbereitungszeit gründlich vorbereitet werden, so dass beim Praktikumstermin die Aufgaben fertiggestellt und abgenommen werden können. In der zweiwöchigen Nachbereitungszeit soll der Bericht aktualisiert werden.
Die Bewertung der Aufgaben erfolgt nach den Ampelfarben: Grün steht für die erfolgreiche Abgabe, gelb steht für Nacharbeit und rot gibt es für fehlende Abgaben. Das Praktikum ist nicht bestanden bei zwei oder mehr roten Abgaben. Zwei mal gelb steht für einmal rot.
Im Praktikum herrscht Anwesenheitspflicht!
Bericht
Jedes Team schreibt von Anfang an einen Bericht über das Praktikum. Bei jedem Praktikumstermin wird der Fortschritt des Berichtes kontrolliert. Am Ende der Veranstaltung (siehe Zeitplan) wird der komplette Bericht abgegeben. Damit eine individuelle Notenvergabe erfolgen kann, müssen die von den jeweiligen Teammitglieder geschriebenen Abschnitte im Bericht kenntlich gemacht werden.
Es gibt ein Gerüst für den Bericht im Format Restructured Text bzw. Sphinx. Der Bericht soll ein einheitliches Deckblatt für alle Projektgruppen haben.
Für das Fritzing Werkzeug (http://fritzing.org) habe ich das STM32 Nucleo Board und ein kleines Steckbrett nebeneinander platziert:
- Fritzing Datei (.fzz): http://hhoegl.informatik.hs-augsburg.de/es2/img/es2-template.fzz
- PNG Bild: http://hhoegl.informatik.hs-augsburg.de/es2/img/es2-template_bb.png
Diese Vorlage dürfen Sie gerne in Ihrem Bericht verwenden.
Finale Abgabe
Der Bericht muss spätestens am Stichtag (siehe Zeitplan) bis Mitternacht von allen Teams in elektronischer Form abgeschickt werden an <Hubert.Hoegl@hs-augsburg.de>.
Klausur
Die erfolgreiche Teilnahme am Praktikum ist die Bedingung für die Teilnahme an der Klausur. Vergangene Klausuren finden Sie unter
2 Kursmaterial
- Skript http://hhoegl.informatik.hs-augsburg.de/es2/skript
- ESIDE Dokumentation (mit Installationsanleitung)
- Praktikum mit Aufgaben: http://www.andreas-tschirner.de/emb_systems2/source/index.html
- Anleitung "Berichte mit Sphinx schreiben" http://hhoegl.informatik.hs-augsburg.de/dva/sphinxbericht/
3 Zeitplan
3.1 10.10.2018
Vorlesung: Einführung
Praktikum: Es gibt eine Einführung in die Linux Kommandozeile mit git, sphinx, tmux, picocom. Findet nur an diesem Tag auch im M1.02 statt!
3.2 17.10.2018
Vorlesung: Organisation des Hauptspeichers, "Sections", Abbildung der Bestandteile eines C Programmes auf die Sections, Debuggen mit GDB, häufig verwendete Funktionsbloecke im STM32L4.
Vorführung des Beispielprogrammes "starter": https://r-n-d.informatik.hs-augsburg.de:8080/es2-nucl476/starter
Praktikum: Gruppe 1 beginnt mit Versuch 1 im G2.16.
3.3 24.10.2018
Vorlesung: Gegenüberstellung "bare metal" und Programmierung mit CubeL4 + libc. Aufbau der Cube Bibliothek (HAL, LL, BSP, Beispiele, CMSIS). Tags erzeugen von allen Quelltexten mit es -t (Konfiguration in .eside/tagsconf.py). Standard C Bibliothek benötigt syscalls.c, da kein Betriebssystem-Kernel vorhanden ist. Projekte in stm32cubel4/examples/ in Vim betrachtet. Navigation mit tags. Startup-Code in Assembler startup_stm32l476xx.s (von CMSIS), Interrupt-Handler stm32l4xx_it.c, System-Initialisierung in system_stm32l4xx.c.
Hausaufgabe: Yiu, Kap. 1, 2, 17
Praktikum: Gruppe 2 beginnt mit Versuch 1
3.4 31.10.2018
Vorlesung: Es geht haupsächlich um die Funktionsblöcke im Mikrocontroller, die wichtig bei der Initialisierung sind: RCC, PWR, GPIO/Alternate Functions. Zusätzlich bei Interrupts: NVIC, SCB, SYSCFG, EXTI.
Praktikum: Gruppe 1 gibt Versuch 1 ab und beginnt mit Versuch 2.
3.5 7.11.2018
Vorlesung: Kommentar zum bisherigen Stand der Praktikumsberichte; Demonstration des Beispielprojektes gpio-intr-cmsis: Praktisches Beispiel zu den eher theoretischen Erläuterungen vom 8.11.2017. Das Programm ist auf der CMSIS Abstraktionsebene geschrieben. Es erzeugt einen Interrupt beim Drücken der User-Taste. Der Interrupt führt zum Umschalten der grünen LED.
https://r-n-d.informatik.hs-augsburg.de:8080/es2-nucl476/gpio-intr-cmsis
Praktikum: Gruppe 2 gibt Versuch 1 ab und beginnt mit Versuch 2.
3.6 14.11.2018
Vorlesung: System handler, SysTick, bus fault, usage fault, hard fault, integer division by zero, FPU division by zero interrupt, SVC handler.
https://r-n-d.informatik.hs-augsburg.de:8080/es2-nucl476/syshandler-cmsis
Praktikum: Gruppe 1 gibt Versuch 2 ab und beginnt mit Versuch 3.
3.7 21.11.2018
Vorlesung: Hier ging es hauptsächlich um Parallelität:
- 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
Praktikum: Gruppe 2 gibt Versuch 2 ab und beginnt mit Versuch 3.
3.8 28.11.2018
Vorlesung: Low-power
Beispielprogramm: https://r-n-d.informatik.hs-augsburg.de:8080/EmbSys2/stm32cubel4/tree/master/examples/PWR/PWR_ModesSelection
Lit.:
- http://hhoegl.informatik.hs-augsburg.de/es2/prog/keil_grobe_energyeff.pdf (S. 1-9)
- Elecia white, Making Embedded Systems, chap. 10 "Reducing Power Consumption" (siehe Lit. in Skript)
- STM32L4 ultra-low-power features overview (AN4621), 2017
- STM32L4 Reference Manual, chap. 5.3 "Low-power modes"
Praktikum: Gruppe 1 gibt Versuch 3 ab.
3.9 5.12.2018
Vorlesung: Evaluierung (Ausfüllen der Formulare), Rückmeldung zu den Berichten.
Praktikum: Gruppe 2 gibt Versuch 3 ab.
3.10 12.12.2018
Vorlesung: Besprechung der Evaluierung; Klausurvorbereitung.
Praktikum: Zeit für Nachholer.
3.11 19.12.2018
Finale Abgabe der Berichte bis spätestens 24 Uhr.
4 Praktikum
4.1 Versuch 1
- git bzw. gitlab, sphinx, tmux, picocom
- Editieren in Linux: vim, emacs, gedit, atom, sublime, ...
- GNU Tools
- Tipps zur Linux Administration, z.B. lsusb, udev Regeln und weitere
- Vorbereiten des Hostrechners
- Installation der "eside"
4.2 Versuch 2
"Bare metal" Programmierung des STM32L476. Fragen zum Nucleo Board, zur GCC Toolchain, zum Startup Code, zur seriellen Schnittstelle. Das Git Repository zum Versuch 2 ist hier:
https://r-n-d.informatik.hs-augsburg.de:8080/EmbSys2/NucleoL476RG_BareMetal.git
Youtube Video: https://youtu.be/myx_UKe0SSU
4.3 Versuch 3
Programmierung mit der STM32Cube Bibliothek
https://r-n-d.informatik.hs-augsburg.de:8080/EmbSys2/stm32cubel4
- GPIO/GPIO_IO_TOGGLE
- ADC/TemperaturSensor
- ADC/ADC_ContinuousConversion_TriggerSW
- TIM/TIM_PWMOutput
- DAC/DAC_SignalsGeneration
- I2C/I2C_OneBoard_ComSlave7_bits_IT
- PWR/PWR_ModesSelection
Kommandozeilenschnittstelle (CLI) mit Cube
https://r-n-d.informatik.hs-augsburg.de:8080/EmbSys2/NucleoL476RG_CubeL4
4.4 Versuch 4
FreeRTOS
https://r-n-d.informatik.hs-augsburg.de:8080/EmbSys2/stm32cubel4
Siehe den Ordner examples:
- FREERTOS/FreeRTOS_ThreadCreation
- FREERTOS/FreeRTOS_Semaphore
- FREERTOS/FreeRTOS_SemaphoreFromISR
- Gatekeeper Task
Micropython
5 Empfohlene Literatur
Joseph Yiu, The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors, 3rd Edition, Newnes 2013.
Daniele Lacamera, Embedded Systems Architecture, Packt Publishing, 2018.
http://proquest.tech.safaribooksonline.de/book/software-engineering-and-development/9781788832502
Carmine Noviello, Mastering the STM32 Microcontroller, Leanpub 2016.
Geoffrey Brown, Discovering the STM32 Microcontroller, 2016 (free book)