Embedded Systems II (WS16/17)¶
Oktober 2016, <Hubert.Hoegl@hs-augsburg.de>
URL: http://elk.informatik.hs-augsburg.de/hhwiki/EmbeddedSystems1617
Diese Seite enthaelt Notizen zum Fach Embedded Systems 2
Woechentliche Themen¶
5. Oktober 2016
ESIDE
https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/eside
Ein wenig Dokumentation dazu (wird noch mehr):
https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/eside/blob/master/eside/doc/README.rst
„right start“
https://r-n-d.informatik.hs-augsburg.de:8080/EmbSys2/rightstart
Zusammengestellte Literatur
Vim Tutorials
Derek Wyatt’s Vim Tutorial Videos http://derekwyatt.org/vim/tutorials/
OpenVIM interactive tutorial http://www.openvim.com/tutorial.html
Jesse Goerz, Beginner’s guide to Vi Improved (vim), http://newbiedoc.sourceforge.net/text_editing/vim.html.en
12. Oktober 2016
Grosse ESIDE Problembehebung
Quickref zur ESIDE und den benoetigten Werkzeugen
https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/eside/blob/master/eside/doc/quickref.pdf
19. Oktober 2016
Zur ESIDE Installation noch ein paar Tipps. Wenn man nur eine Python 3 Version installiert hat, dann ist fuer die ESIDE Installation das Kommando
sudo pip3 install --upgrade .ganz in Ordnung. Wenn man aber mehrere Python 3 Versionen gleichzeigt installiert hat (z.B. 3.4 und 3.5) dann kann man mit pip3 nicht auswaehlen, welchen man nehmen moechte. In diesem Fall empfehle ich, eine andere Variante der Installation zu verwenden. Man waehlt eine der folgenden Kommandozeilen, bei denen der Interpreter explizit angegeben ist:
sudo python3.4 -m pip install --upgrade . sudo python3.5 -m pip install --upgrade .Auch zum Deinstallieren kann man das verwenden:
sudo python3.4 -m pip uninstall eside sudo python3.5 -m pip uninstall esideAm besten, man deinstalliert am Anfang alle moeglicherweise installierten ESIDE Programme, danach waehlt man eine Installation aus.
26. Oktober 2016
Technische Hinweise zur ersten Abgabe Team1_X
Neues Beispiel fuer ESIDE und gdb Debugging
git clone ssh://git@r-n-d.informatik.hs-augsburg.de:2222/hubert.hoegl/es2-systick-blink.git
SYSTICK_Handler() laeuft im Debug Mode nicht.
breakpoint mit „command list“ auf Handler
GDB p und x Kommando
display, undisplay
breakpoint disable und enable
GDB tutorials:
Peter J. Salzman’s GDB tutorial: http://www.dirac.org/linux/gdb
RMS’s GDB tutorial: http://www.unknownroad.com/rtfm/gdbtut
2. November 2016
Vorlesung: Flash Speicher
https://elk.informatik.hs-augsburg.de/es2ws1617/flash/index.html
Praktikum: Problem mit
git pull
: Wenn man ein git Repository holt, z.B. „rightstart“, und dann manche Dateien lokal modifiziert, dann weigert sich git den naechsten Update durchgit pull
durchzufuehren, damit die lokalen Aenderungen nicht ueberschrieben werden. Gerade in .gdbinit und im Makefile waren Anfang Oktober kleine Fehler enthalten, die inzwischen entfernt wurden. Deshalb ist es unbedingt notwendig, dass Sie einen Update der Sourcen mitgit pull
machen.Damit Sie einen
git pull
machen koennen, entfernen Sie am besten Ihre Aenderungen mitgit stash
. Nun sind die Sourcen wieder „rein“. Ihre Aenderungen sind nun in einem „stash“ (Versteck) aufgehoben. Holen Sie nun die Updates mitgit pull
. Darauf koennen Sie wieder die aufgehobenen Aenderungen mitgit stash apply
anwenden. Git liefert einen Hilfetext wenn mangit help stash
eingibt.Hier sind nochmal die Fehler erklaert:
In
Makefile
enthaelt die folgende Regel einen Fehler:gdb: arm-none-eabi-gdb --tui -silent -x .gdbinit -iex "set auto-load safe-path /"
Richtig muss es heissen (also ohne
-x .gdbinit
Option!):gdb: arm-none-eabi-gdb --tui -silent -iex "set auto-load safe-path /"
In
.gdbinit
muss die Zeile:set trace-commands on
entfernt werden. Ausserdem sollte man die Zeile:
set pagination off
aufnehmen. Das Logging sollte eingeschaltet sein durch die folgenden zwei Zeilen:
set logging file gdb_logfile.txt set logging on
9. November 2016
Wer auf der Suche nach einem einfach zu bedienenden Editor fuer das Terminal-Fenster ist, der sollte mal „Micro“ ausprobieren:
STM32 Peripheriemodule: Timer, GPIO, UART, I2C, SPI, (CAN), USB, Ethernet, ADC, DAC, 1-Wire (oft nur in SW). Ausserdem EXTI, RAM, DMA.
Zur Erinnerung: Core (CPU) enthaelt NVIC.
Ankopplung an Ethernet ueber PHY-Baustein (Schicht 1) und „Magnetics“, im Mikrocontroller ist Schicht 2, der Rest (IP, UDP, TCP) ist in Software.
„lwIP“ Protokoll fuer Mikrocontroller: http://dunkels.com/adam/software.html
Zeitachse von 1950 bis jetzt. Einordnung der I/O Schnittstellen.
Kriterien:
Alter/wann erfunden?
Anzahl Signale
Asynchron/synchron
Geschwindigkeit in Bit/sec
Elektrische Signale
„Plug and Play“
Komplexitaet in Codezeilen (korreliert mit dem Alter)
Benoetigt wie viel RAM?
Entfernung
Spannungsversorgung
Wer ist Master? Geht Multi-Master?
Aufgabe Tabelle erstellen mit I/O Schnittstellen vs. Kriterien:
UART RS-232 RS-485 I2C SPI 1-Wire USB Ethernet Kriterien ...
UART, ca. 1960, Punkt-zu-Punkt, Spannungsversorgung nicht in Schnittstelle enthalten, Sender und Empfaenger muessen gleiche Einstellungen haben (Startbit, Datenbits, Parity, Stopbit, Geschwindigkeit, z.B. 115200/8N1), elektrische Signale meist 5V oder 3.3V, Geschwindigkeit von 75 Bit/s … 115200 Bit/s.
UART Prinzip, jedoch andere elektrische Signale:
RS-232: hohe Spannungswerte +/- 12…15V, 9-polige Sub-D Steckverbinder an aelteren PCs, Punkt-zu-Punkt.
RS-485: differentiell, niedrige Spannungswerte +/- 0.1 V, bis MBit/sec, haeufig als Feldbus, z.B. Tuerzugangssteuerung an der Hochschule Augsburg.
Der „Elektor Bus“ ist ein Kommunikationsprotokoll, das den RS-485 Bus verwendet (siehe Literatur). Ein anderes Beispiel ist das „Modbus“ Protokoll, eine freie Implementierung ist FreeModbus.
Literatur zum Thema „Schnittstellen“:
16. November 2016
Software-Schichten
Betonen der Sicht auf das „API“
register.h (Adressen von wichtigen Registern), Sammlung von ein paar Funktionen
CMSIS (Wrapper fuer den Cortex M3 Kern)
Cube Bibliothek fuer alle STM32 Mikrocontroller von ST-Micro, ehem. „Standard Peripheral Lib.“. Download der Cube Bibliothek fuer STM32F1 unter http://elk.informatik.hs-augsburg.de/es2/tools/
Board Support Package (BSP), in Cube enthalten.
doxygen: Werkzeug zum Extrahieren der Dokumentation aus C/Assembler Quelltext http://www.stack.nl/~dimitri/doxygen/
mbed Projekt
Fuer ARM Controller von unterschiedlichen Herstellern
mbed „enabled“ https://developer.mbed.org/platforms/
mbed OS 2: https://developer.mbed.org/handbook/Homepage
mbed OS 5: https://docs.mbed.com/docs/mbed-os-handbook
Buch: Rob Toulson, Tim Wilmshurst, Fast and Effective Embedded Systems Design. Applying the ARM mbed, 2nd Edition, Newnes 2016. http://proquest.tech.safaribooksonline.de/book/electrical-engineering/computer-engineering/9780081009031
23. November 2016
30. November 2016
7. Dezember 2016
maketags.sh (erzeugt eine tags Datei fuer Vim und andere Editoren)
CUBEDIR=~/Embedded-Systems/STM32Cube_FW_F1_V1.4.0 ctags --c-types=+l $CUBEDIR/Drivers/STM32F1xx_HAL_Driver/Src/*.c $CUBEDIR/Drivers/STM32F1xx_HAL_Driver/Inc/*.h $CUBEDIR/Drivers/BSP/STM32VL-Discovery/*.[ch] \ $CUBEDIR/Drivers/CMSIS/Include/core_cm3.h $CUBEDIR/Drivers/CMSIS/Include/cmsis_gcc.h $CUBEDIR/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h \ $CUBEDIR/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f100xb.h *.[ch]
Empfehlungen fuer Weihnachtseinkaeufe: Logikanalysator (Saleae), Picoscope (Pollin), Steckbrett, Bus-Pirate, Flugdraehte, Loetkolben, …
Besprechung von Beispiel
es2-cube-sys
.
14. Dezember 2016
21. Dezember 2016
Leseliste fuer die Klausur:
Materialsammlung: http://elk.informatik.hs-augsburg.de/es2/lit/
Speichertechnologie
RAM
NOR Flash
NAND Flash
Zum Flash-Speicher: https://elk.informatik.hs-augsburg.de/es2ws1617/flash/index.html
Schnittstellen
UART
SPI
I2C
Cortex M3 Kern
Yiu, 2. Auflage, Kap. 2 und 3
NVIC, Yiu Kap. 8
Systick
STM32
Insider’s Guide to the STM32
http://elk.informatik.hs-augsburg.de/es2/lit/stm32/isg-stm32-v18d-scr.pdf
G. Brown: Discovering the STM32 Microcontroller
STM32 Bibliotheken
CMSIS (Yiu, 2. Auflage, Kap. 10.4, http://elk.informatik.hs-augsburg.de/es2/lit/Buecher/8/)
Cube (http://elk.informatik.hs-augsburg.de/es2/lit/prog/fwlibs/STM32CubeF1GettingStarted.pdf)
BSP
mbed
FreeRTOS/CMSIS-RTOS
Pseudo-Multitasking
https://learn.adafruit.com/multi-tasking-the-arduino-part-1/overview
Using FreeRTOS in small embedded systems
Developing applications with STM32Cube and RTOS (covers FreeRTOS, CMSIS-RTOS API)
http://elk.informatik.hs-augsburg.de/es2/lit/prog/rtos/DM00105262.pdf
Geoffrey Brown, Discovering the STM32, Chapter 16 (FreeRTOS)
http://elk.informatik.hs-augsburg.de/es2/lit/prog/rtos/yiu-3e-ch19.pdf
Richard Barry, Using the FreeRTOS Real-Time Kernel
https://elk.informatik.hs-augsburg.de/es2/lit/prog/rtos/Using-the-FreeRTOS-Real-Time-Kernel.pdf
Kontrollfragen:
Welches Konstrukt der Sprache C kann zu einer Task gemacht werden?
Wie macht man in FreeRTOS eine Task? Abschnitt 1.2, Task Functions.
Welche Zustände kann eine Task haben? Abschnitt 1.6, Full task state machine.
Wie kann man eine Task verzögern? (vTaskDelay(), S. 21)
Welche Prioritäten kann eine Task haben?
Was ist eine “Idle Task”?
Kann man die Priorität einer Task zur Laufzeit ändern, und wenn ja, wie? Abschnitt 1.8 Changing the priority of a task.
Welchen Scheduling-Algorithmus verwendet FreeRTOS? Abschnitt 1.10
Was ist eine “Queue”? Kap. 2
Wann blockiert eine Queue?
Kann eine Queue mehrere Sender und/oder mehrere Empfänger haben?
Was bedeutet “deferred interrupt processing”? Kap. 3.2
Was ist eine “Binary Semaphore”?
Was ist eine “Counting Semaphore”? Kap. 3.3
Was ist ein “Mutex”? Kap. 4.3, S. 105
Was ist “Priority Inversion”? S. 111
Gibt es in FreeRTOS eine so komfortable Heap-Speicherverwaltung wie in der libc? Nennen Sie die in FreeRTOS implementierten Verfahren. Kap. 5.2 Example Memory Allocation Schemes.
Beispielprogramm:
Die Klassiker:
Tanenbaum, Modern Operating Systems, Kap. “Processes and Threads”
Silberschatz, Operating System Concepts, Kap. 6 “Synchronization”
Stallings, Operating Systems. Internals and Design Principles, Kap. 5 “Concurrency: Mutual Exclusion and Synchronization”.
Low-Power Programmierung
Elecia White, Making Embedded Systems, Kapitel 10: Reducing Power Consumption, O’Reilly 2011 (Safari).
http://proquest.safaribooksonline.com/book/programming/9781449308889
http://elk.informatik.hs-augsburg.de/es2/lit/prog/01_ARM.pdf
GNU Toolchain
Yiu, 2. Auflage, Kap. 19
Linker Skript
Debuggen mit GDB
Sonstiges
Semihosting (Yiu, 2. Aufl., Kap. 10)