Einführung ========== * Was sind eingebettete Systeme? "Die stille Mehrheit von allen Computern" (T. Broy) * Wo gibt es eingebettete Systeme? - Konsumgüter - Automaten im öffentlichen Raum - 3D Drucker - Türzugang - Sensoren - Steuerungen - Auto - viele weitere ... * Trends - Embedded Systeme nehmen stärker zu als der PC-Rechner. Verstärkt durch aktuelle Entwicklung zu **"Internet of Things"** (IoT). - PC bedeutet oft "Intel Inside". - Embedded bedeutet oft "ARM inside". - Die Leitungsaufnahme nimmt ab, die Rechenleistung nimmt zu. * Ein paar Fakten zu ARM ([YIUDG]_, 1.5 Background and History, pp. 15-24). - Gegründet 1990 als Advanced RISC Machines Ltd. - Sie verkaufen das *Wissen* wie man 32-Bit RISC CPU-Kerne baut. Das wird auch *IP knowledge* (IP = intellectual property) genannt. Die Pläne werden in VHDL Code beschrieben. The aktuelle CPU-Familie besteht aus *Cortex-M*, *Cortex-A* und *Cortex-R*. See :numref:`arm-arch`. - Halbleiterfirmen kaufen Lizenzen von ARM um Mikrocontroller mit ARM-Kern zu bauen. Den Kern umgeben *Peripheriemodule* die von den Halbleiterfirmen stammen und die mit dem Kern über genormte Schnittstellen zusammenspielen. See the web pages of the companies below. - Homepage: http://www.arm.com * Eigenschaften von eingebetteten Systemen - Oft nicht-standardisierte Hardware, kundenspezifisches Design - Nur kleine User-Interfaces, oder sogar "deeply embedded" ohne UI - Oft reaktive Systeme - Schnittstellen mit Sensoren, "cyberphysical systems" - Kommunikation über UART, RS-458, CAN, I2C, SPI, ... - Anforderungen an Timing (Latenz, Durchsatz) - Anforderungen an möglichst kleinen Aufbau - Anforderungen an möglichst geringe Leistungsaufnahme, z.B. wegen Batteriebetrieb - Anforderungen an die Sicherheit ("safety", "security") - Anforderungen an den Preis * Schwieriger zu programmieren als ein PC - Interdisziplinäres Feld - Elektrotechnik (Schaltplan, Platine, Aufbau des Prototypen, Test) - Informatik (Programmierung) - Sehr dicke Manuals (1000 Seiten und mehr) - Typische low-level Programmiersprachen sind C, C++ und Assembler. - "Bare metal" Programmierung (= ohne Betriebssystem) - Kleine Speicher (Flash 1K bis 1M, SRAM 512B bis 256K) - Kein Bildschirm, keine Tastatur - Kein Filesystem - Debuggen ist schwierig (meist über Debug-Schnittstellen wie JTAG oder SWD) - Probleme bei gleichzeitigem Datenzugriff ("shared data problems") * Vergleich Embedded System <---> PC Verwende die folgenden Kriterien beim Vergleich: - Standard-Hardware - Rechenleistung - Speichergrösse - Programmiersprache - Echtzeit-Anforderungen - Netzwerk (Ethernet) - Sensoren - Leistungsaufnahme - Sicherheit - Zuverlässigkeit - Preis * Kategorien von eingebetteten Systemen (die Kategorie bestimmt in etwa, wie komplex die Software sein kann) Kategorie 1 8-Bit, 10 MHz, 0-1K SRAM, 1-8K FLASH. Hauptsächlich für bare-metal Programmierung. Software-Komplexität ca. 10 bis 1000 Zeilen Code in C. Beispiel: AVR Microcontroller Mega8 (Arduino) Kategorie 2 8-Bit, 10 MHz, 1-4K SRAM, 8K-128K FLASH. Einfaches/kleines Multitasking Betriebssystem möglich; Die Libc kann wegen des kleinen RAMs meist nicht verwendet werden. Software-Komplexität ca. 1000 bis 10.000 Zeilen Code in C. Beispiel: AVR Microcontroller Mega32 (Arduino) Kategorie 3 32-Bit (nur wenige mit 8- und 16-Bit), 16 - 100 MHz, 8K-256K SRAM, 128K-2M FLASH. Verwendbar mit Echtzeit-Betriebssystem, z.B. FreeRTOS, ChibiOS, RIOT und libc sowie anderen Bibliotheken ("Middleware"). Unser Nucleo STM32L476 32-bit Cortex-M4 Board läuft mit 80 MHz and hat 1M Flash sowie 128 KByte RAM, somit fällt es in die Kategory 3. Software-Komplexität ca. 1000 bis 200.000 Zeilen Code in C. Beispiele: viele STM32F1/F2/F4/L4-Boards, ESP8266, ESP32 Kategorie 4 32-Bit mit Speicherverwaltungseinheit (MMU), 60 MHz bis 1 GHz, externes SDRAM 16M bis 1G, externer Flash Speicher 1M-1G. Geeignet für grosse Betriebssysteme, z.B. Linux und Windows. Software-Komplexität bis maximal mehrere 1.000.000 Zeilen Code in C (ähnlich wie ein PC). Beispiele: * Beagle Bone http://beagleboard.org * Raspberry Pi https://www.raspberrypi.org **Wichtig:** * Die Kategorien 1 bis 3 eignen sich *nicht*, um Linux oder Windows drauf laufen zu lassen! Dazu sind diese Betriebssysteme zu komplex. * Mit steigender Komplexität (Anzahl Transistoren) und steigender Taktfrequenz nimmt auch die Stromaufnahme zu! Die Kategorien 1 bis 3 liegen bei der Leistungsaufnahme im Betrieb noch im Bereich von 0,01 bis 0.05 Watt, die Kategorie 4 meist schon bei 0.1 bis 2 Watt. * Tendenz zu preiswerten **"Community Boards"** mit freier Hardware Lizenz und Open-Source Software, z.B. Arduino (2005), Raspberry Pi (2012), Beagleboard (2010) und viele weitere. * Die Programmierung erfolgt bei allen Kategorien meist in einer systemnahen Hochsprache wie C oder C++, eventuell mit ein wenig Assembler. Ab einer Programmspeichergrösse von 100K bis 200K (also Kat. 3) werden auch Interpreter verwendet, z.B. für Lua, JavaScript oder Python. * Ein paar grosse Halbleiterfirmen, die Mikrocontroller herstellen * Microchip, http://www.microchip.com (haben Atmel aufgekauft) * NXP, http://www.nxp.com (haben Freescale aufgekauft) * ST Microelectronics, http://www.st.com * Texas Instruments, http://www.ti.com * Typische Komponenten von eingebetteten Systemen - Microcontroller (MCU = MiCrocontroller Unit) - Peripherie (Sensoren und Aktuatoren) - Interaktion mit dem Anwender (LED, Button, Display, Beeper, ...) - Stromversorgung - Gehäuse **Aufgaben und Fragen** 1. Lesen Sie den Wikipedia Artikel zu Eingebetteten Systemen (deutsch oder englisch): * Deutsch: https://de.wikipedia.org/wiki/Eingebettetes_System * English: http://en.wikipedia.org/wiki/Embedded_system und extrahieren Sie den Inhalt in eine Mindmap. Unter Linux gibt es dazu z.B. das freie "FreeMind" Programm. #. Was sind die Unterschiede zwischen einem PC und einem eingebetteten System? Schauen Sie sich den obigen Abschnitt zu diesem Thema an. #. Was sind die Hauptteile eines eingebetteten Systems? #. Vergleichen Sie die Festplatte des PC mit dem Flash-Speicher eines eingebetteten Systems. Was für Gemeinsamkeiten und Unterschiede gibt es? #. Welche Variabilität haben eingebettete Systeme hinsichtlich * Bitbreite * Taktfrequenz * Speicher - Flash - SRAM * Betriebssystem * Leistungsaufnahme #. Mit welchen eingebetteten Systemen kommen Sie in Kontakt während eines Tages? Denken Sie an zu Hause, an Verkehrsmittel, Fahrrad, Türen und so weiter. #. Bauen Sie ein eingebettetes System Ihrer Wahl auseinander und beschreiben Sie die Bestandteile die Sie finden. #. Welche Zahl ist grösser? Die Anzahl der Desktop-CPUs, oder die Anzahl der CPUs für eingebettete Systeme, die jedes Jahr hergestellt werden? #. Warum werden Intel x86 CPUs nicht in jedes eingebettete System gebaut? #. Welche "Community Boards" kennen Sie? Haben Sie schon mal ein Projekt damit gemacht? #. Was ist sehr störend in der täglichen Verwendung von vielen mobilen eingebetteten Systemen? #. Warum sind eingebettete Systeme in der Regel schwieriger zu programmieren als ein PC? #. Sortieren Sie die Mikrocontroller die Sie kennen in die vier verschiedenen Kategorien, die oben genannt wurden. #. Wie viele Zeilen C Code können Sie in einen Mikrocontroller der Kategorie 3 in etwa speichern? Es geht nur um die Grössenordnung 1, 10, 100, 1000, ...