#format rst #language de ============================= Embedded Systems II (WS16/17) ============================= Oktober 2016, URL: http://elk.informatik.hs-augsburg.de/hhwiki/EmbeddedSystems1617 Diese Seite enthaelt Notizen zum Fach `Embedded Systems 2 `_ .. contents:: Inhalt 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 http://elk.informatik.hs-augsburg.de/es2/lit .. * es2-starter https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/es2-starter * Vim Tutorials - Derek Wyatt's Vim Tutorial Videos http://derekwyatt.org/vim/tutorials/ - OpenVIM interactive tutorial http://www.openvim.com/tutorial.html - Vim Book ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf - Jesse Goerz, Beginner's guide to Vi Improved (vim), http://newbiedoc.sourceforge.net/text_editing/vim.html.en - http://vim-adventures.com - https://vimgifs.com **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 eside Am 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 durch ``git 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 mit ``git pull`` machen. Damit Sie einen ``git pull`` machen koennen, entfernen Sie am besten Ihre Aenderungen mit ``git stash``. Nun sind die Sourcen wieder "rein". Ihre Aenderungen sind nun in einem "stash" (Versteck) aufgehoben. Holen Sie nun die Updates mit ``git pull``. Darauf koennen Sie wieder die aufgehobenen Aenderungen mit ``git stash apply`` anwenden. Git liefert einen Hilfetext wenn man ``git help stash`` eingibt. Hier sind nochmal die Fehler erklaert: 1. 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 /" 2. 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: https://micro-editor.github.io * 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": http://elk.informatik.hs-augsburg.de/es2/lit/#interfaces **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/ * https://www.mbed.com * https://developer.mbed.org * mbed OS 2: https://developer.mbed.org/handbook/Homepage * mbed OS 5: https://docs.mbed.com/docs/mbed-os-handbook * https://github.com/ARMmbed/mbed-os * 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 http://elk.informatik.hs-augsburg.de/es2/lit/Buecher/8/ - 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 http://elk.informatik.hs-augsburg.de/es2/lit/Buecher/6/ *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 - http://elk.informatik.hs-augsburg.de/es2/lit/prog/fwlibs/White_Paper_mbed.pdf - http://www.mbed.org *FreeRTOS/CMSIS-RTOS* * Pseudo-Multitasking https://learn.adafruit.com/multi-tasking-the-arduino-part-1/overview * Using FreeRTOS in small embedded systems http://elk.informatik.hs-augsburg.de/es2/lit/prog/rtos/freertos-designguide/freertos-designtipps.html * 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: https://elk.informatik.hs-augsburg.de/es2/demo/es2-freertos/ * 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 http://elk.informatik.hs-augsburg.de/es2/lit/Buecher/8/ - Linker Skript - Debuggen mit GDB *Sonstiges* - Semihosting (Yiu, 2. Aufl., Kap. 10)