Eingebettete Systeme
Transcription
Eingebettete Systeme
Overview Multitasking in Embedded Systems • Software development with Linux • Using Multitasking in Microcontrollers • URL: http://hlb-labor.de/lehre Dipl. Informatiker Gregor Rebel 1 Multitasking in Embedded Systems Chapter 1 Software development under Linux OS Dipl. Informatiker Gregor Rebel 2 Multitasking in Embedded Systems Softwareentwicklung mit Linux • • • • • • • Was ist Linux? Das Linux Dateisystem Aufsetzen des Betriebssystems Installation von Softwarepaketen Werkzeuge ToolChain_STM32 Versionskontrollsysteme Dipl. Informatiker Gregor Rebel 3 Multitasking in Embedded Systems Historie von Linux 1991 begann Linus Torvalds in Helsinki (Finnland) mit der Entwicklung einer Terminal-Emulation, um unter anderem seinen eigenen Computer besser zu verstehen. Mit der Zeit merkte er, dass sich das System immer mehr zu einem Betriebssystem entwickelte und kündigte es daraufhin in der UsenetThemengruppe für das Betriebssystem Minix, comp.os.minix an.[3] Im September desselben Jahres sollte das System dann auf einem Server den Interessierten zur Verfügung gestellt werden. Da der damalige FTP-ServerAdministrator Ari Lemmke mit den von Torvalds vorgesehenen Namen Freax oder Buggix nicht einverstanden war, stellte jener es stattdessen in einem Verzeichnis mit dem Namen Linux zur Verfügung. Torvalds widersetzte sich anfangs dieser Namensgebung, gab seinen Widerstand aber schnell auf, da er nach eigener Aussage eingestehen musste, dass Linux einfach ein besserer Name war. Linux wurde zu dieser Zeit noch unter einer eigenen Lizenz veröffentlicht, welche die kommerzielle Nutzung verbot. Schnell merkte Torvalds aber, dass diese hinderlich war, und entschied sich dazu, allen Entwicklern deutlich mehr Freiraum zu geben. Er und seine Mitautoren stellten daraufhin im Januar 1992 Linux unter die GNU GPL[4]. Somit konnte man Linux in GNU integrieren und dies als das erste freie Betriebssystem vertreiben. Dieser Schritt machte das System für eine noch größere Zahl von Entwicklern interessanter, da es für diese die Modifizierung und Verbreitung vereinfachte. 1996 kündigte Torvalds an, dass er einen Pinguin als Maskottchen für Linux haben wolle, und schrieb einen Wettbewerb aus, aus dem schließlich der populäre Tux hervorging. Quelle: http://de.wikipedia.org/wiki/Linux#Historische_Entwicklung Dipl. Informatiker Gregor Rebel 4 Multitasking in Embedded Systems Was ist Linux? • • • • • • • • Kernel Das Programm init Shells Benutzerverwaltung Grafische Benutzeroberfläche Anwendungen Distributionen Community Dipl. Informatiker Gregor Rebel 5 Multitasking in Embedded Systems Der Linux Kernel • Oberboss im System • Lizensiert unter GNU General Public License 2 • Komponenten – Speicherverwaltung – Gerätetreiber – Multitasking Scheduler – Interprozesskommunikation – Paketfilter (Firewall) • Quelle: http://kernel.org/ Dipl. Informatiker Gregor Rebel 6 Multitasking in Embedded Systems GNU General Public License 2 • Copyleft Prinzip – Lizenznehmer: Alle abgeleiteten Werke auch GPL 2 – Autor: Darf Werk auch unter anderen Lizenzen veröffentlichen • Lizenznehmer muss Quelltext veröffentlichen! • Mehrere Gerichtsverfahren gegen Firmen z.B. 2006 Verfahren gegen D-Link http://dejure.org/dienste/vernetzung/rechtsprechung?Text=2-6+O+224/06 Dipl. Informatiker Gregor Rebel 7 Multitasking in Embedded Systems Das Programm /sbin/init • Erstes Programm bei jedem Systemstart • Startet alle weiteren Programme • verwaltet Runlevel 0. System anhalten 1. Einzelbenutzer (meistens root) 2. Mehrbenutzer ohne Netzwerk 3. Mehrbenutzer mit textueller Oberfläche 4. Reserviert/ Unbenutzt 5. Mehrbenutzer mit grafischer Oberfläche 6. Rechner wird neugestartet ● Befehle (als Superuser) > runlevel > init <N> gibt aktuellen Runlevel aus schaltet in Runlevel <N> Dipl. Informatiker Gregor Rebel 8 Multitasking in Embedded Systems Das Linux Dateisystem Dateisystem ist Zentralbibliothek des Rechners Linux Philosophie: Alles ist eine Datei! Laufwerke immer in Ordner eingehängt / ist die Wurzel von allem alles andere darunter Zugriff auf Hardware über virtuelle Dateien • Zugriffsrechte/ Schutzbits • Versteckte Dateien • • • • • • Dipl. Informatiker Gregor Rebel 9 Multitasking in Embedded Systems Laufwerke in Ordnern • keine Laufwerkbuchstaben! • Einhängen eines Laufwerks mittels mount – Benötigt oft Superuser Rechte (sudo) – sudo mount /dev/sda2 /media/home • Anzeige der Mountpoints mittels df oder mount > df -h Dateisystem rootfs devtmpfs tmpfs /dev/sda1 /dev/sda2 Größe Benut Verf Ben%% Eingehängt auf 20G 18G 2,9G 86% / 984M 228K 984M 1% /dev 990M 1,4M 988M 1% /dev/shm 20G 18G 2,9G 86% / 54G 46G 5,2G 90% /home Dipl. Informatiker Gregor Rebel 10 Multitasking in Embedded Systems / ist die Wurzel Immer ein Laufwerk in / eingehängt => Bei Neuinstallation reicht eine /-Partition • alle anderen Datenträger in Unterordnern • /-Verzeichnis (Beispiel openSuSE) • /bin Kommandos für root und normale Benutzer /boot Kernel und für Bootvorgang benötigte Dateien /dev Virtuelles Dateisystem devFS enthält Dateien für Zugriff auf Hardwaregeräte /etc Systemkonfiguration (globale Einstellungen für alle Benutzer) /home Jeder Benutzer für gewöhnlich ein eigenes Verzeichnis /lib Gemeinsam genutzte Programmbibliotheken /media Dynamische Datenträger wie z.B. USB-Sticks, CDROM Laufwerke, ... /opt Optional installierte Software (z.B. QtSDK) /proc Virtuelles Dateisystem mit Informationen zum laufenden System /root Das Heimatverzeichnis des Superusers /sbin Befehle zur Systemverwaltung (nur mit Superuser Rechten benutzbar) /sys Virtuelles Dateisystem sysFS eine erweiterte Darstellung von devFS (/dev) /usr Die meisten Anwendungen sind hier installiert /var Variable Informationsdateien und Datenbanken Quelle: http://fibel.org/linux/lfo-0.6.0/node63.html Dipl. Informatiker Gregor Rebel 11 Multitasking in Embedded Systems Der Ordner /dev • Hardwaregeräte in Form von Dateien sichtbar • Vom Kernel mittels devtmpfs automatisch gefüllt • Beispieleinträge – Ein Eintrag pro Festplatte und pro Partition • /dev/sda Festplatte 1 • /dev/sda1 Festplatte 1 Partition 1 – Serielle Schnittstellen • /dev/ttyS0 • /dev/ttyUSB0 – /dev/null Dipl. Informatiker Gregor Rebel interne serielle Schnittstelle erster USB-Seriell Wandler schluckt alle eingehenden Zeichen 12 Multitasking in Embedded Systems Zugriffsrechte/ Schutzbits • Für jede Datei drei Gruppen – (E) – (G) – (A) Eigentümer Gruppe Andere • Drei Arten von Schutzbits r darf lesen w darf schreiben x darf ausführen • Schutzbits in Textdarstellung EEEGGGAAA > ls -l -rw-r--r-- 1 gregor users 43 11. Okt 13:35 Quellen.txt > chmod g+w Quellen.txt > ls -l -rw-rw-r-- 1 gregor users 43 11. Okt 13:35 Quellen.txt Dipl. Informatiker Gregor Rebel 13 Multitasking in Embedded Systems Versteckte Dateien • Dateien/ Ordner die mit Punkt beginnen – Normalerweise nicht angezeigt – Enthalten oft Einstellungen – Bei Kopier- /Verschiebeaktionen ignoriert • Punkt Einträge anzeigen > ls -al -rw-r--r-- 1 gregor gregor 3973 2011-10-12 09:30 .springrc drwx------ 2 gregor gregor 480 2011-08-24 04:18 .ssh • Punkt Einträge kopieren – cp -R \.* Ziel/ – Im Dateiimanager versteckte Dateien anzeigen Dipl. Informatiker Gregor Rebel 14 Multitasking in Embedded Systems Aufsetzen des Betriebssystems • Wir machen uns die Hände schmutzig! • Beispiel anhand Distribution Xubuntu → http://xubuntu.org/ • Installation in VirtualBox Emulator → http://virtualbox.org/ Dipl. Informatiker Gregor Rebel 15 Multitasking in Embedded Systems Linux Distro herunterladen • 32 Bit Version (x86) optimal für Virtualisierung – weniger Speicherbedarf – einfacher zu emulieren • 64 Bit Version (x64) optimal bei nativer Installation Dipl. Informatiker Gregor Rebel 16 Multitasking in Embedded Systems Virtuelle Maschine erstellen Dipl. Informatiker Gregor Rebel 17 Multitasking in Embedded Systems Namen vergeben Dipl. Informatiker Gregor Rebel 18 Multitasking in Embedded Systems 1GB RAM mindestens Dipl. Informatiker Gregor Rebel 19 Multitasking in Embedded Systems Virtual Disk Image Dipl. Informatiker Gregor Rebel 20 Multitasking in Embedded Systems Bootfestplatte erzeugen Dipl. Informatiker Gregor Rebel 21 Multitasking in Embedded Systems Feste Größe ist schneller Dipl. Informatiker Gregor Rebel 22 Multitasking in Embedded Systems 20GB reichen zunächst Dipl. Informatiker Gregor Rebel 23 Multitasking in Embedded Systems Zeit für einen Kaffee Dipl. Informatiker Gregor Rebel 24 Multitasking in Embedded Systems ISO Image als virtuelle CD Dipl. Informatiker Gregor Rebel 25 Multitasking in Embedded Systems Start von virtueller CD Dipl. Informatiker Gregor Rebel 26 Multitasking in Embedded Systems Maus befreien: Strg Rechts Dipl. Informatiker Gregor Rebel 27 Multitasking in Embedded Systems Inklusive Online Updates Dipl. Informatiker Gregor Rebel 28 Multitasking in Embedded Systems Manuelle Partitionierung Dipl. Informatiker Gregor Rebel 29 Multitasking in Embedded Systems Neue Partitionstabelle Dipl. Informatiker Gregor Rebel 30 Multitasking in Embedded Systems Partition hinzufügen Dipl. Informatiker Gregor Rebel 31 Multitasking in Embedded Systems Eine / Partition ist Pflicht! Dipl. Informatiker Gregor Rebel 32 Multitasking in Embedded Systems Jetzt installieren Dipl. Informatiker Gregor Rebel 33 Multitasking in Embedded Systems Ohne Swap fortfahren • Auslagern auf virtuelle Festplatte langsam! • Besser mehr Speicher für Maschine Dipl. Informatiker Gregor Rebel 34 Multitasking in Embedded Systems Anmeldedaten Dipl. Informatiker Gregor Rebel 35 Multitasking in Embedded Systems Ein gutes Passwort wählen GROSS- und kleinbuchstaben Ziffern Sonderzeichen , . ! „ § $ % & / ( ) = + Einen leicht zu behaltenen Satz wählen: Mann was der wieder für einen Quatsch sagt • Sonderregeln (ein → 1, sagen → ;) → Mwdwf1Q; • Insgesamt 8 Zeichen! • • • • Dipl. Informatiker Gregor Rebel 36 Multitasking in Embedded Systems Das kann dauern! Dipl. Informatiker Gregor Rebel 37 Multitasking in Embedded Systems Neustart bestätigen Dipl. Informatiker Gregor Rebel 38 Multitasking in Embedded Systems Ein aufgeräumter Desktop Dipl. Informatiker Gregor Rebel 39 Multitasking in Embedded Systems Updates suchen Dipl. Informatiker Gregor Rebel 40 Multitasking in Embedded Systems Updates installieren Dipl. Informatiker Gregor Rebel 41 Multitasking in Embedded Systems Anwendungen installieren • Änderungen am System – nur als Superuser (root) • Verschiedene Optionen – Paketmanager – Installationsskripte – einzelne Pakete – Quelltext Dipl. Informatiker Gregor Rebel 42 Multitasking in Embedded Systems Der Superuser • • • • • Ich bin /root, ich darf das! Eigenes Homeverzeichnis /root Darf jede Datei verändern Nur zur Systemkonfiguration Superuser werden > sudo su • Etwas als Superuser ausführen > sudo reboot -n Dipl. Informatiker Gregor Rebel 43 Multitasking in Embedded Systems Installation per Paketmanager • Königlich einfache Bedienung • Große Auswahl vorkonfigurierter Softwarepakete • Abhängigkeiten automatisch aufgelöst • Automatische Updates • openSuSE: yast, kpackagekit • Debian: apt-get, aptitude, synaptic, kpackagekit Dipl. Informatiker Gregor Rebel 44 Multitasking in Embedded Systems Installationsskripte • • • • Ähnlich Installation unter Windows OS Ausführbares Programm von Webseite Oft Dateinamensendung .run Datei muss ausführbar gemacht werden – chmod +x DATEI – Eigenschaften/ Dateizugriff im Dateimanager • Oft als Superuser starten – sudo ./DATEI • Beispiele – QtCreator – Grafikkartentreiber (NVIDA/ AMD) Dipl. Informatiker Gregor Rebel 45 Multitasking in Embedded Systems Installation einzelner Pakete • Für Fortgeschrittene User • Per Suchmaschine suchen • Muss zur Distribution passen – openSuSE, RedHat: sudo rpm –install FILE.rpm – Debian: .deb Format sudo gdebi FILE.deb • Keine automatischen Updates! Dipl. Informatiker Gregor Rebel 46 Multitasking in Embedded Systems Installation aus Quellen • Pain in the Ass • Suchen der „richtigen“ Version – neueste Quellen oft instabil – Installationsanleitungen oft veraltet • Neu kompilieren – COMPILE.txt/ INSTALL.txt lesen! – Foren durchsuchen • Abhängigkeiten von Hand lösen – Fehlermeldungen lesen – Fehlende Software installieren • Installationsscript erstellen (Fortgeschritten) Dipl. Informatiker Gregor Rebel 47 Multitasking in Embedded Systems Gasterweiterungen Installieren • Ermöglichen – Gemeinsame Ordner – Geteilter Zwischenspeicher – 3D Grafikbeschleunigung – Größenänderungen des Fensters Dipl. Informatiker Gregor Rebel 48 Multitasking in Embedded Systems Skript nicht ausführbar • Typisches Problem • ISO Dateisystem hat keine Schutzbits Dipl. Informatiker Gregor Rebel 49 Multitasking in Embedded Systems Shell im Ordner starten Dipl. Informatiker Gregor Rebel 50 Multitasking in Embedded Systems autorun.sh direkt starten Dipl. Informatiker Gregor Rebel 51 Multitasking in Embedded Systems Gasterweiterungen installiert Dipl. Informatiker Gregor Rebel 52 Multitasking in Embedded Systems Wieder neustarten Dipl. Informatiker Gregor Rebel 53 Multitasking in Embedded Systems Übung: Installieren • Linux Distribution eigener Wahl installieren – openSuSE, Ubuntu/ Kubuntu, Debian, … – in virtueller Maschine oder als Dualboot System • Darauf folgende Software installieren: – QtCreator (http://qt.nokia.com/) – git – yakuake – STM32_ToolChain (http://hlb-labor.de/cortexm3) Dipl. Informatiker Gregor Rebel 54 Multitasking in Embedded Systems Console • Textuelles Eingabeinterface • Erste Console 1991 vom Kernel bereitgestellt • Ursprünglich Ausgabe direkt in Grafikkartenpuffer • Terminal ist Entsprechung unter grafischer Oberfläche • Immer noch erreichbar per Strg+F1, ... Dipl. Informatiker Gregor Rebel 55 Multitasking in Embedded Systems Shell • Jede Konsole startet eine Shell • Interpretiert menschliche Texteingaben • Es gibt verschiedene Shells – bash, csh, tcsh, … (unterschiedliche Kommandosyntax!) • Grundfunktionen – Starten von Programmen – Ausführen von Skripten – Vollständige Programmiersprache – Umsetzen von Pipe Anordnungen – Bereitstellung von Umgebungsvariablen – Umleitung von Textausgaben Dipl. Informatiker Gregor Rebel 56 Multitasking in Embedded Systems Shell • Jede Konsole startet eine Shell • Interpretiert menschliche Texteingaben • Es gibt verschiedene Shells – bash, csh, tcsh, … (unterschiedliche Kommandosyntax!) • Grundfunktionen – Starten von Programmen – Ausführen von Skripten – Vollständige Programmiersprache – Umsetzen von Pipe Anordnungen – Bereitstellung von Umgebungsvariablen – Umleitung von Textausgaben Dipl. Informatiker Gregor Rebel 57 Multitasking in Embedded Systems Programme starten • Goldene Regel: Dateien immer tabben! • Ausführbare Datei finden – absoluter/ relativer Pfad geht immer > /bin/less – Suche im Suchpfad • Variable $PATH zu durchsuchende Verzeichnisse > echo $PATH ./:/home/gregor/bin:/bin:/opt/QtSDK/QtCreator/bin/:... • ./ ist aktuelles Verzeichnis Dipl. Informatiker Gregor Rebel 58 Multitasking in Embedded Systems Ausführen von Skripten • Synonym: Batchdatei • Erste Zeile definiert Interpreter #!/bin/bash #!/usr/bin/perl … • x Bit gesetzt: chmod +x DATEI • Keine Dateinamensuffixe unter Linux! • Oft aktuelles Verzeichnis nicht im Pfad Dipl. Informatiker Gregor Rebel 59 Multitasking in Embedded Systems Shell Programmierung • Variablen VARIABLE=“WERT“ echo “$VARIABLE“ • Kontrollstrukturen if [ BEDINGUNG ]; then ... fi for A in “a b c ...“; do ... done • Kein goto in bash! Dipl. Informatiker Gregor Rebel 60 Multitasking in Embedded Systems Pipeanordnungen • Idee: – Kleine Befehle als Werkzeugkasten – Kombination einfacher Befehle ist mächtig • Pipe ist Verbindung zweier Befehle • Pipesymbol ist senkrechter Strich | • A|B – Textausgabe von A ist Texteingabe für B – cat hallo.txt | grep Welt • Lange Pipeketten möglich Dipl. Informatiker Gregor Rebel 61 Multitasking in Embedded Systems Umgebungsvariablen • • • • • Jede Shell erbt Variablen von Umgebung Neue Variablen in Elternshell unbekannt Variablen anzeigen: export (Bash) Nur exportierte Variablen weiter vererbt Variablen sterben mit ihrer Shell → permanent durch Eintrag in Startup Skript • Zuweisung: VARIABLE=“Wert“ Dipl. Informatiker Gregor Rebel 62 Multitasking in Embedded Systems Textausgaben umleiten • Jedes Programm – 1 Eingabestrom: STDIN – 2 Ausgabeströme: STDOUT, STDERR • Eingabe aus Datei: BEFEHL <DATEI • Ausgabe in Datei: – Zieldatei überschreiben: BEFEHL >DATEI1 2>DATEI2 – An Zieldatei anhängen: BEFEHL >>DATEI1 2>>DATEI2 • STDERR nach STDOUT umleiten: 2>&1 Dipl. Informatiker Gregor Rebel 63 Multitasking in Embedded Systems Shell Startup Skript • Bei Start/ Login automatisch ausgeführt – /etc/bash.bashrc – ~/.bashrc – ~/.profile – ~/.login • Beispiele: – Suchpfad zu qtcreator > echo 'export PATH=“/opt/QtSDK/QtCreator/bin/:$PATH' >>~/.bashrc – Permanenter alias > echo 'alias ll=“ls -lh“' >>~/.bashrc Dipl. Informatiker Gregor Rebel 64 Multitasking in Embedded Systems Werkzeuge • • • • • man cat less find grep Dipl. Informatiker Gregor Rebel gcc/ g++ ● make ● openocd ● gdb ● 65 Multitasking in Embedded Systems Befehl man (1) • • • • • Textbasiertes Anleitungssystem Ausführliche Beschreibungen Praktisch jeder Befehl beschrieben Programmierhandbuch Tastenzuordnungen – Pfeiltasten Blättern – / nach Text suchen Beenden –q • Alternative: info Dipl. Informatiker Gregor Rebel 66 Multitasking in Embedded Systems Befehl man (2) • Verschiedene Ebenen > man EBENE SCHLÜSSELWORT 1 2 3 4 5 6 7 8 9 Ausführbare Programme oder Shellbefehle Systemaufrufe (Kernelfunktionen) Bibliotheksaufrufe (Funktionen in System-Bibliotheken) Spezielle Dateien (gewöhnlich in /dev Dateiformate und Konventionen, z. B. /etc/passwd Spiele Makropakete und Konventionen, z. B. man(7), groff(7) Systemadministrationsbefehle (in der Regel nur für root) Kernelroutinen [Nicht Standard] > man 1 open > man 2 open Dipl. Informatiker Gregor Rebel 67 Multitasking in Embedded Systems Befehl cat • Dateiinhalt ausgeben • Oft Start einer Pipe > cat DATEI | grep FOO | less • Here-Skript in Shell-/ Perl-Skript cat <<“END_OF_TEXT“ Hello World END_OF_TEXT Dipl. Informatiker Gregor Rebel 68 Multitasking in Embedded Systems Befehl less • • • • Zeigt Dateiinhalt an Interaktives bidirektionales Blättern Suchfunktion: / Beenden: q Dipl. Informatiker Gregor Rebel 69 Multitasking in Embedded Systems Befehl find • Suchen von Dateien > find STARTPFAD -name MUSTER • Viele Optionen zur Suchkonfiguration – Verknüpfung mittels -and / -or • Expression für jede gefundene Datei – Default: -print – Externes Programm: -exec BEFEHL {} \; • Beispiele: > find /home -name “\.*“ | less > find ./ -name “*.txt“ -exec less {} \; • → man find Dipl. Informatiker Gregor Rebel 70 Multitasking in Embedded Systems Befehl grep • Universeller Suchbefehl – Sucht im Eingabestrom nach Muster – Gibt alle Zeilen aus, die Muster enthalten • Syntax: grep MUSTER DATEI > grep Hallo HalloWelt.txt > cat HalloWelt.txt | grep Hallo • Kombination mit find > find ./ -name “*.h“ | grep -n MUSTER • → man grep Dipl. Informatiker Gregor Rebel 71 Multitasking in Embedded Systems Befehl gcc/ g++ • Universeller Übersetzer – Preprozessor – C/ C++ Compiler – Linker – Assembler • Übersetzen: gcc -c DATEI.c • Linken: gcc DATEI1.o DATEI2.o -o OUT • → man gcc (10575 Zeilen) Dipl. Informatiker Gregor Rebel 72 Multitasking in Embedded Systems Befehl make • Führt makefile aus • Umsetzung von Abhängigkeiten • Einfache Regeln – A.x mittels BEFEHL aus A.y erstellt – Gegeben A.y, B.y, C.y, … – Für Ziel Z: Erstelle A.x, B.x, C.x, … • Ausnutzung Parallelität: make -jN (N = 2x CPU-Kerne) • Für C wesentliche Dateiendungen – .s – .c – .h – .o Assembler Quelltext C Quelltext C Headerdatei Objektdatei (aus .c oder .s erstellt) Dipl. Informatiker Gregor Rebel 73 Multitasking in Embedded Systems makefile • • • • Steuerdatei für make Regeln zur Übersetzung Konfigurationsoptionen Definition von – Übersetzungsziele (ZIEL:) – Quellverzeichnisse – Zu erzeugender Objektdateien – Name der Ausgabedatei – Übersetzungsoptionen Dipl. Informatiker Gregor Rebel 74 Multitasking in Embedded Systems GNU Make Quellen • Offizielles Handbuch → http://www.gnu.org/software/make/manual/make.pdf • Deutsches Tutorial → http://www.ijon.de/comp/tutorials/makefile.html Dipl. Informatiker Gregor Rebel 75 Multitasking in Embedded Systems ToolChain_STM32 • • • • • • Collection of Scripts Automatically downloads aprox. 500MB Sources patched and compiled Compiler binaries Programmer/ Debugger uC Libraries Dipl. Informatiker Gregor Rebel 76 Multitasking in Embedded Systems Features ToolChain Downloaded + installed automatically – FreeRTOS Multitasking Scheduler – STM-StdPeripheralsLibrary – Compiler Suite ARM NONE EABI – FTDI Treiber für JTAG Programmer – current OpenOCD (snapshot from SVN) – multiple Ethernet TCP/IP Stacks – LCD-Monitor Text + Graphic – Mathematic Fixpoint Library Dipl. Informatiker Gregor Rebel 77 Multitasking in Embedded Systems Creating a new project Start the adventure! 1. cd ToolChain_STM32 2. ./createNewProject.pl TEST FOO 3. cd ../TEST 4. configure Makefiles 5. configure Programmer 6. ./compile.sh 7. Debug Dipl. Informatiker Gregor Rebel 78 Multitasking in Embedded Systems Skript createNewProject.pl • • • • • ./createNewProject PROJECT AUTHOR copies template project Creates new folder in ../ Fills in name of project and author Created folder may be moved anywhere Dipl. Informatiker Gregor Rebel 79 Multitasking in Embedded Systems Template Project • Complete, standalone framework • Should run on most Cortex M3 boards • Support for QtSDK Editor → open file ProjektName.creator from QtCreator • Compile: > ./compile.sh • Missing ToolChain downloaded + installed Dipl. Informatiker Gregor Rebel 80 Multitasking in Embedded Systems Makefile • Parsed for every compile.sh run • Defines how to make things – Which object files to compile – Where to find .c/ .h/ .s -files – Which constants to define – Which files to include – Dependencies between build targets Dipl. Informatiker Gregor Rebel 81 Multitasking in Embedded Systems Configure Makefile (1) (2) (3) (4) (5) (6) (7) (8) (9) basic constants where to find h-files where to find c-files where to find s-files automagically collect files define uController to use minimize code size phony build targets add some general files Dipl. Informatiker Gregor Rebel 82 Multitasking in Embedded Systems Makefile - basic constants • Compileroptimizations (-O) – O0 – O1 – O3 – Os no Optimizations (for Debugging) simple Optimizations maximal Optimizations creates smallest Binary > man gcc Dipl. Informatiker Gregor Rebel 83 Multitasking in Embedded Systems Makefile where to find h-files • • • • • • Header files benötigt für #include gcc Parameter -I definiert einen Includepfad \ am Zeilenende: mit nächster Zeile fortfahren $(INCLUDE_DIRS) enhält viele -I Einträge $(INCLUDE_DIRS) direkt an gcc gegeben Headerfile finden: gcc durchläuft Liste der -I Einträge Dipl. Informatiker Gregor Rebel 84 Multitasking in Embedded Systems Makefile where to find c-files • • • • C-Sources compiled into separate .o files vpath.%c stores list of folders vpath.%c only used by make Whenever FOO.o should be created – Make searches all folders in vpath.%c – The first found file FOO.c will be compiled Dipl. Informatiker Gregor Rebel 85 Multitasking in Embedded Systems Makefile where to find s-files • • • • .s files contain assembler source code Often used for Bootloader vpath %.s stores relative paths of folders Whenever make should compile a FOO.s – All folders in vpath %.s are searched – First found file FOO.s is being compiled – FOO.s → FOO.o Dipl. Informatiker Gregor Rebel 86 Multitasking in Embedded Systems Makefile – collect files • Files with certain name suffix – .c – .cc – .cpp – .s • Only files in same folder as makefile • Every found file compiled into corresponding .o file → Not required to manually add these files to makefile Dipl. Informatiker Gregor Rebel 87 Multitasking in Embedded Systems Makefile - define uController • STM32 uCs are separated into classes • Classes differ by – Required bootcode file – Amount of RAM – Amount of Flash Memory – Functional units (GPIOs, Timer, UARTS, ..) Dipl. Informatiker Gregor Rebel 88 Multitasking in Embedded Systems Makefile - minimize code size • Optimize during Compile & Link – GCC can write Funktiones/ Data into separate Sektions of the objektfile – Unreferenced sections can be skipped during link stage – Important: All used interrupt handlers have to be marked as __attribute__((used)) → arm-none-eabi-gcc --help=optimizers | less → man gcc Dipl. Informatiker Gregor Rebel 89 Multitasking in Embedded Systems Makefile - phony build targets • .PHONY: clean all • Lists all Targets which are no files • Avoids ambiguity between build targets and files of same name • Example: „all“, „clean“ Dipl. Informatiker Gregor Rebel 90 Multitasking in Embedded Systems Makefile - add general files • $(MAIN_OBJS) stores list of all object files to create • Every mandatory .c file requires one .o entry in $(MAIN_OBJS)! • Exceptions: → page Collect Files • object files can be added to at any stage of makefile – E.g.: MAIN_OBJS += foo.o Dipl. Informatiker Gregor Rebel 91 Multitasking in Embedded Systems Makefile Extensions • Subfolders in project folder – extensions/ • Makefile fragments provided by ToolChain • No user created/ project related files here! – extensions.local/ • User created Makefile fragments go here – extensions.active/ • Symbolic links to extensions/ or extensions.local/ • all makefile.* files here are included automatically Dipl. Informatiker Gregor Rebel 92 Multitasking in Embedded Systems Folder extensions/ • Two types of files – makefile.NNN_NAME • Makefile fragment in rank NNN • provides some extra settings when activated – activate.NNN_NAME.sh • scripts that activate makefile fragments • will create one or more links in extensions.active/ • some scripts remove interferring links automatically (e.g. activate.100_board_XXX.sh) • Added to search PATH Just cd to your project folder and issue: > activate.700_example_threading_queues_led.sh Dipl. Informatiker Gregor Rebel 93 Multitasking in Embedded Systems Extensions in different Ranks • Extensions, Makefiles, Activate-Scripts • Filename shows three digit rank number • High ranked extensions depend on extensions with lower rank number • Lowest rank: Basic compiler libraries • Highest rank: Complex examples → ToolChain/ReadMe_Ranks.txt • Rule: No rank depends on higher ranks! Dipl. Informatiker Gregor Rebel 94 050 system libraries 100 basic definitions 200 basic libraries 300 public libraries 400 ToolChain libraries 600 simple examples 700 complex examples 999 external tools Multitasking in Embedded Systems Minimal SetUp > activate.600_example_leds.sh • Creates out of the egg: makefile.050_compiler_sourcery_g++ makefile.100_board_olimex_p107 makefile.200_std_peripherals_library makefile.300_scheduler_free_rtos makefile.300_scheduler_free_rtos_heap1 makefile.600_example_leds + more in future releases of ToolChain Dipl. Informatiker Gregor Rebel 95 Multitasking in Embedded Systems Extension 050_compiler_sourcery_g++ • • • • • Basic Libraries provided by Compiler Binary compiler suite from CodeSourcery No source code available Outdated (not updated by CodeSourcery) CodeSourcery provides updated commercial compiler suite > activate.050_compiler_sourcery_g++.sh Dipl. Informatiker Gregor Rebel 96 Multitasking in Embedded Systems Extension 100_board_XXX • Board description – CPU type – Memory Size and Types – Pin definitions • One board description is mandatory > activate.100_board_olimex_p107.sh Dipl. Informatiker Gregor Rebel 97 Multitasking in Embedded Systems Extension 200_std_peripherals_library • Common library to access Peripherals on CortexM3 chips • Mandatory for all example projects • Required by FreeRTOS > activate.200_std_peripherals_library.sh Dipl. Informatiker Gregor Rebel 98 Multitasking in Embedded Systems Extension 300_scheduler_free_rtos • • • • Multitasking scheduler Provides inter task communication Mandatory for all example projects Requires exactly one activated from – 300_scheduler_free_rtos_heap1 – 300_scheduler_free_rtos_heap2 – 300_scheduler_free_rtos_heap3 > activate.300_scheduler_free_rtos.sh Dipl. Informatiker Gregor Rebel 99 Multitasking in Embedded Systems Extension 400_debug_registers • Provides global variables for certain registers • Each variable is a pointer to detailed struct • Allows – easy reading of individual bit in hardware – named access to bitfields in hardware registers > activate.400_debug_registers.sh Dipl. Informatiker Gregor Rebel 100 Multitasking in Embedded Systems Extension 400_lcd_320x240_olimex • driver for LCD panel on prototype board STM32-LCD from Olimex • Basic graphical + text features • Makes use of demo code from Olimex > activate.400_lcd_320x240_olimex.sh Dipl. Informatiker Gregor Rebel 101 Multitasking in Embedded Systems Extension 400_fix_point_lib • Library for Fixed Point mathematic operations • CortexM3 CPUs have no Floating Point Unit • Fixed Point Math much faster than Floating Point Math in Software • Only low loss in accuracy • Need to choose range according to application! → Documentation/Math/ > activate.400_fix_point_lib.sh Dipl. Informatiker Gregor Rebel 102 Multitasking in Embedded Systems Extension 400_network_uip_ste101p • • • • • Basic TCP/IP network Stack uIP Includes demo software from Olimex Requires Protoboard Olimex P107 Only one socket at a time Packet resend to be implemented by application → Documentation/Network/ > activate.400_network_uip_ste101p.sh Dipl. Informatiker Gregor Rebel 103 Multitasking in Embedded Systems Extension 400_support_adc • Simple functions for ADC configuration – Configuration of single ADC-channels – DMA enabled data transfer into variables – single channel, blocking readout > activate.400_support_adc.sh Dipl. Informatiker Gregor Rebel 104 Multitasking in Embedded Systems Extension 600_example_leds • Simple Multitasking example • Two tasks communicate via shared Variables – taskBrightness periodically changes brightnes value – taskControlLed creates PWM on pin PB_LED1 to show current brightness > activate.600_example_leds.sh Dipl. Informatiker Gregor Rebel 105 Multitasking in Embedded Systems Extension 600_example_lcd • Basic example how to use LCD panel on prototype board STM32-LCD from Olimex • Shown Features – initialize panel – set background/ foreground color – print single characters at certain positions – printf() at certain/ current positions > activate.600_example_lcd.sh Dipl. Informatiker Gregor Rebel 106 Multitasking in Embedded Systems Extension 700_example_threading_queues_led • Example showing – several tasks communicating via queues – visualization via two LEDs – can run on any board that defines PB_LED1, PB_LED2 > activate.700_example_threading_queues_led.sh Dipl. Informatiker Gregor Rebel 107 Multitasking in Embedded Systems Extension 700_example_threading_queues_lcd • Example showing – several tasks communicating via queues – visualization on LCD panel • producer task: current value • consumer task: current value • Queue size > activate.700_example_threading_queues_lcd.sh Dipl. Informatiker Gregor Rebel 108 Multitasking in Embedded Systems Extension 700_example_threading_semaphores_led • Example showing – several tasks communicate via semaphores – several producer tasks give varying amount of tags to a semaphore – several consumer tasks take one tag each and do something for a while • Visualization – via two LEDs on PB_LED1, PB_LED2 > activate.700_example_threading_semaphores_led.sh Dipl. Informatiker Gregor Rebel 109 Multitasking in Embedded Systems Extension 700_example_threading_semaphores_lcd • Example showing – several tasks communicate via semaphores – several producer tasks give varying amount of tags to a semaphore – several consumer tasks take one tag each and do something for a while • Visualization – on LCD panel – two producer tasks – six consumer tasks > activate.700_example_threading_semaphores_led.sh Dipl. Informatiker Gregor Rebel 110 Multitasking in Embedded Systems Adapting linker script • Used when linking all objject files into final binary • Defines memory adresses and assignments in the uC • Memory divided into areas with attributes – Name – Access (r ead, w rite, x ecutable) – Start – Size • Sections defined with attributes – Name – Alignment (1, 2, 4, 8 Bytes) – Assigned memory area • . is current address counter • File stm32.ld contains linker script Dipl. Informatiker Gregor Rebel 111 Multitasking in Embedded Systems Configure Programmer • Programmer is a hardware device – JTAG-Connection between Desktop PC/ Laptop and uC – flashes binary file onto uC – Allows Incircuit Debugging – Must be supported by OpenOCD – Example: ARM-USB-TINY-H from Olimex Corp. • used programmer defined in _/interface.cfg • List of supported programmers to be found in ToolChain/OpenOCD/share/openocd/scripts/interface/ Dipl. Informatiker Gregor Rebel 112 Multitasking in Embedded Systems compile.sh • • • • • • • ./compile.sh downloads + installs missing ToolChain creates symbolic links to installed libraries may activate basic example framework compies current project updates QtCreator/PROJEKT.creator flashes binary onto uC Dipl. Informatiker Gregor Rebel 113 Multitasking in Embedded Systems Debugging • In which stage does the bug occur – During compilation (gcc -c) • Syntaxerror • Includefile not found → .c-Datei → makefile #02 – During linking after compilation • Objektfile missing • Objektfile from wrong path → makefile #09 → makefile #03 – During runtime • Wrong uC chosen • Too few/ much RAM • Stackoverflow Dipl. Informatiker Gregor Rebel → activate correct board → stm32.ld → xTaskCreate() call 114 Multitasking in Embedded Systems Versionskontrollsysteme • Erfassung von Änderungen an Dateien – Protokollierung von Änderungen – Wiederherstellung alter Zustände – Archivierung der gesamten Historie – Koordinierung des gemeinsamen Zugriffs – Verzweigung in mehrere Branches Dipl. Informatiker Gregor Rebel 115 Multitasking in Embedded Systems Funktionsweisen • Lokale Versionsverwaltung • Zentrale Versionsverwaltung • Verteilte Versionsverwaltung Dipl. Informatiker Gregor Rebel 116 Multitasking in Embedded Systems Lokale Versionsverwaltung • • • • Oft nur einzelne Datei versioniert Änderungen in Datei selbst gespeichert Werkzeuge: SCCS, RCS Beispiele – Technische Zeichnung mit Änderungsindex Dipl. Informatiker Gregor Rebel 117 Multitasking in Embedded Systems Zentrale Versionsverwaltung • Als Client-Server System aufgebaut • Ein zentraler Server speichert komplette Historie – optional: Read-Only Zugriff für Fremduser – optional: Web-Interface • Entwickler jeweils nur eine Version • Zugriff auch per Netzwerk möglich • Werkzeuge – cvs, svn (OpenSource) – AlienBrain, Perforce, Team Foundation, ... Dipl. Informatiker Gregor Rebel 118 Multitasking in Embedded Systems Verteilte Versionsverwaltung • Jeder Entwickler hat komplette Historie • Zusätzlich zentraler Server möglich – Änderungen zwischen Entwicklern austauschen – optional: Read-Only Zugriff für Fremduser – optional: Web-Interface • Werkzeuge – git, GNU arch, Mercurial, Bazaar (OpenSource) – BitKeeper Dipl. Informatiker Gregor Rebel 119 Multitasking in Embedded Systems Wie Git das? • • • • • • • • Übersicht Installation Dezentrale Verwaltung Verzweigte Entwicklung Datenaustausch Markierte Revisionen Interoperabilität Web-Interface Dipl. Informatiker Gregor Rebel 120 Multitasking in Embedded Systems Git - Übersicht • • • • Freie Software Verteilte Versionsverwaltung von Dateien Entwickelt zur Verwaltung des Linux Kernel Quelltextes Betriebsysteme – Linux, Solaris, Mac OS X, FreeBSD, … – Windows (Cygwin, Msysgit, TortoiseGit-Shell) • Aktuell eingesetzt in vielen OpenSource Projekten – Amarok, Android, BusyBox, Debian, DragonFly BSD, Eclipse, Erlang, Fedora, Git, Gnome, KDE, Qt, Ruby, … • Kurzanleitung: • Webseite: Dipl. Informatiker Gregor Rebel http://hlb-labor.de/git/ http://git-scm.com/ 121 Multitasking in Embedded Systems Git - Installation • Debian/ Ubuntu – sudo apt-get install git • openSuSE – sudo zypper install git • Windows – http://de.wikipedia.org/wiki/Cygwin – http://de.wikipedia.org/wiki/TortoiseGit Dipl. Informatiker Gregor Rebel 122 Multitasking in Embedded Systems Git - Dezentrale Verwaltung • Jeder Benutzer hat eigenes Repository > git pull – Holt neuesten Stand vom Zentralrepository – Kann Merge ausführen! > git commit – sichert aktuellen Stand lokal – kommentiert aktuellen Stand – erzeugt einzigartige Commit-ID (Hexzahl) > git push – kopiert neuesten Stand auf Zentralrepository Dipl. Informatiker Gregor Rebel 123 Multitasking in Embedded Systems Git - Verzweigte Entwicklung 1/3 4 • Verzweigung in der Entwicklung > git checkout -b B1 1 • Verzweigung ab einem älteren Zustand > git checkout -b B2 2 1 • Verzweigungspunkt: Branchname/ Commit-ID/ Tag • Alle verfügbaren Branches auflisten > git branch -r • Auf anderen Branch wechseln > git checkout BRANCH_NAME • Branch zum Server hochladen > git push origin BRANCH_NAME Dipl. Informatiker Gregor Rebel 124 B1 2 3 2 3 4 B2 5 Multitasking in Embedded Systems Git - Verzweigte Entwicklung 2/3 User B > git clone …:Repo → auf Branch origin master User A > git clone …:Repo → auf Branch origin master > git checkout -b B1 →Branch B1 lokal erstellt →Wechsel zu Branch B1 > git push origin B1 → Branch auf Server laden > git pull → neuer Branch entdeckt > git branch -r → alle Branches auflisten > git checkout B1 →Wechsel zu Branch B1 Dipl. Informatiker Gregor Rebel 125 Multitasking in Embedded Systems Git - Verzweigte Entwicklung 3/3 • Implizite Verzweigung • User A > git commit -a -m „C1“ • User B > git commit -a -m „C2“ > git push → C1 fehlt → Impliziter Branch • User B > git pull > git commit -a → automatischer Merge von C1 • User A > git pull → A jetzt auf Stand M Dipl. Informatiker Gregor Rebel 126 C C1 C C1 C2 C C1 M C2 Multitasking in Embedded Systems Git – Datenaustausch 1/2 • International durch verschiedene Protokolle – Git-Protokoll über TCP Port 9418 – SSH (verschlüsselt) – HTTP – HTTPS – FTP – rsync – EMail (Patches) Dipl. Informatiker Gregor Rebel 127 Multitasking in Embedded Systems Git – Datenaustausch 2/2 • Verschlüsselte Kommunikation per SSH – Benutzer erzeugt RSA Schlüsselpaar > ssh-keygen -t rsa -C VORNAME.NACHNAME ~/.ssh/id_rsa ~/.ssh/id_rsa.pub Private Key Public Key • Publickey auf Server kopieren • Bei Anmeldung wird Private Key benötigt > git clone [email protected]:REPOSITORY – Server verschlüsselt Rechenaufgabe mit Public Key – Client entschlüsselt mit Private Key und sendet Ergebnis – Server akzeptiert Client Dipl. Informatiker Gregor Rebel 128 Multitasking in Embedded Systems Git - Markierte Revisionen > git tag MARKIERUNG – Definiert Markierung für aktuellen Stand – Markierung beschreibt z.B. Releaseversion – Markierung später für Branch nutzbar > git tag – listet alle Markierungen auf > man git-tag Dipl. Informatiker Gregor Rebel 129 Multitasking in Embedded Systems Git - Interoperabilität • Git's das auch anders? • Kompatibilitätsinterface – GNU Arch (git-archimport) – svn (git-svn) – cvs (git-cvsexportcommit, git-cvsimport git-cvsserver) – Darcs (darcs-fastconvert, darcs2git) – Quilt (git-quiltimport) → manpages Dipl. Informatiker Gregor Rebel 130 Multitasking in Embedded Systems Git - Web-Interface • Nice looking access to git • OpenSource Software (some) – gitweb is part of git distribution → http://git-scm.com/ – ViewGit is a total PHP rewrite → http://viewgit.fealdia.org/ – CGit written in C → http://hjemli.net/git/cgit/ – gitalist is written in Perl → http://www.gitalist.com/ • Existing Webhoster (one) – GitHub – Closed Source hoster → http://github.com/ Dipl. Informatiker Gregor Rebel 131 Multitasking in Embedded Systems Chapter 2 Multitasking in Embedded Systems Dipl. Informatiker Gregor Rebel 132 Multitasking in Embedded Systems Multitasking in ES • • • • • • • • • What is Singletasking? What is Multitasking? Why Multitasking? Different approaches Realtime Operating Systems FreeRTOS Synchronization Example Project Debugging Multitasking Software Dipl. Informatiker Gregor Rebel 133 Multitasking in Embedded Systems What is Singletasking? • • • • • • • • Do only one thing at a time Most efficient way to solve problems Applicable to every algorithm No management overhead No internal synchronization required Easy to code Busy-wait for I/O No Interrupts Dipl. Informatiker Gregor Rebel 134 Multitasking in Embedded Systems Singletasking Example while (1) { if ( Byte = receiveByte() ) { // blocks! Buffer[Index++] = Byte; if ( Index >= MessageSize) { M_t* M = (M_t*) Buffer; switch (M->Type) { case mt_CommandA: ... case mt_CommandB: … default: break; } Index = 0; } } } Dipl. Informatiker Gregor Rebel 135 Multitasking in Embedded Systems What is Multitasking? • • • • • • • • • Aim for multiple targets Switch context often Management overhead Synchronization required Interrupts required Hard to code/ debug Implicit delays Increased memory usage Implementation difficult for many algorithms Dipl. Informatiker Gregor Rebel 136 Multitasking in Embedded Systems Multitasking Example main() { int Queue = xQueueCreate(...); xTaskCreate(Receive, Queue, …); xTaskCreate(Process, Queue, …); } void Process(int Q) { while (1) { M = (M_t*) xQueueReceive(Q); if (M) { switch (M->Type) { case mt_CmdA: ... case mt_CmdB: ... default: break; }}}} Dipl. Informatiker Gregor Rebel void Receive(int Q) { char Buffer[10][100]; int Index = 0; while (1) { char* Writer = &(Buffer[Index,0]); int Remaining = MessageSize; while (Remaining > 0) { if ( Byte = readByte() ) { // sleeps! *Writer++ = Byte; Remaining--; } xQueueSend(Q, &(Buffer[Index,0]);); Index++; if (Index > 99) Index = 0; } } 137 Multitasking in Embedded Systems Why Multitasking? • • • • • • Functions spawnable multiple times Eases handling of slow IO Benefits from multiple CPU-cores Only 1 central Timer required Short Interrupt Service Routines Less global variables required Dipl. Informatiker Gregor Rebel 138 Multitasking in Embedded Systems No life without Multitasking! • Every Embedded System needs MT • MT often implemented via Interrupts – Complex Service Routines – Data Exchange via Global Variables – Difficult to debug • Typical approach: Super-Loop – Periodically starts set of functions – Similar to task scheduler Dipl. Informatiker Gregor Rebel 139 Multitasking in Embedded Systems Different Approaches • Multiprogramming – Ancient mechanism for Periheral Access – Realized via Terminal Stay Ready (TSR) • Cooperative Multitasking – Central Scheduler manages Processes – Each process grants CPU to other processes – Single process can block whole system • Preemptive Multitasking – Scheduler interrupts each process periodically – Requires central Interrupt-Timer • Preemptible Multitasking – High priority Applications can interrupt others (OS/2, Linux, FreeRTOS) – Allows faster response times Dipl. Informatiker Gregor Rebel 140 Multitasking in Embedded Systems Realtime Scheduling • Definition of Realtime Real-time computing means a hardware + software system that must response within a strict time constraint. • Realtime constraint – Hard Violation causes hazardous results – Firm Infrequent violations tolerable but degrade system's quality of service – Soft Usefullness of results degrade after their deadline → http://en.wikipedia.org/wiki/Real-time_computing Dipl. Informatiker Gregor Rebel 141 Multitasking in Embedded Systems FreeRTOS • Multitasking Scheduler – Premptible Multitasking – High triority tasks block low priority ones • Inter Thread Communication – Semaphores – Queues • • • • Developed specially for Embedded Systems Open Source FreeWare with Commercial Support Ported to several μC Architectures → http://www.freertos.org/ Dipl. Informatiker Gregor Rebel 142 Multitasking in Embedded Systems FreeRTOS – Queues • Base of inter task communication • Send message Task A – Task → Task – Interrupt Service Routine → Task • Call by value • Reading from empty queue – Function call waits until Queue is filled – No CPU time is wasted during Wait 2 1 Task B → FreeRTOS Queues Dipl. Informatiker Gregor Rebel 3 143 Multitasking in Embedded Systems FreeRTOS - Semaphores • Binary ∎ Task B ∎ ∎ ∎ Task B Task A – Implemented as Queue of fixed size 1 – Best suited for inter thread signaling – Task B waits until Task A activates once • Counting Task A – Implemented as Queue of fixed size N – Task A can activate B up to N times at once – Data in Queue is of no interest → FreeRTOS - Semaphores Dipl. Informatiker Gregor Rebel 144 Multitasking in Embedded Systems FreeRTOS - Mutex • best suited for Resource locking • Semaphore + Priority inheritance • Non recursive Task A – Can be locked only once • Recursive ∎ Task B – thread can lock multiple times – must be unlocked as often as being locked → FreeRTOS - Mutexes Dipl. Informatiker Gregor Rebel 145 Multitasking in Embedded Systems Multithreading with Queues • Activate Extensions for Queues example on STM32-P107 > cd extensions.active/ > rm * > ln -s ../extensions/makefile.free_rtos . > ln -s ../extensions/makefile.example_threading_queues . > ln -s ../extensions/makefile.free_rtos . > ln -s ../extensions/makefile.example_leds . Dipl. Informatiker Gregor Rebel 146 Multitasking in Embedded Systems Multithreading with Queues • Activate Extensions for Queues example on STM32-LCD > cd extensions.active/ > rm * > ln -s ../extensions/makefile.free_rtos . > ln -s ../extensions/makefile.example_threading_queues . > ln -s ../extensions/makefile.free_rtos . > ln -s ../extensions/makefile.lcd_320x240_olimex . Dipl. Informatiker Gregor Rebel 147 Multitasking in Embedded Systems Multithreading with Queues • Spawning Tasks Producer threading_start() Consumer Print Dipl. Informatiker Gregor Rebel 148 Multitasking in Embedded Systems Multithreading with Queues • Communicate via Queues s8_t Column; s8_t Row; char Text[10]; s16_t Value; Producer LED1 6 5 PJ PJ PJ 4 3 Consumer Dipl. Informatiker Gregor Rebel Print enqueue/ dequeue LED2 setPort()/ clrPort() 149 Multitasking in Embedded Systems Multithreading with Semaphores • Activate Extensions for Semaphores example on STM32-P107 > activate.700_example_threading_semaphores_led.sh • Activate Extensions for Semaphores example on STM32-LCD > activate.700_example_threading_semaphores_lcd.sh Dipl. Informatiker Gregor Rebel 150 Multitasking in Embedded Systems Multithreading with Semaphores • Spawning Tasks Producer1 Producer2 threading_start() Consumer1 Consumer2 Print Dipl. Informatiker Gregor Rebel 151 Multitasking in Embedded Systems Multithreading with Semaphores • Communicate via Semaphore enqueue/ dequeue Producer1 Data irrelevant 0-10/s • • • 0-10/s Semaphore Producer2 setPort()/ clrPort() 5/s 5/s 5/s 5/s Consumer1 LED1 Consumer2 LED2 Consumer3 Consumer4 PJ PJ PJ Dipl. Informatiker Gregor Rebel 152 Print Multitasking in Embedded Systems Debugging Multitasking Software • Different types of Memories • Multitasking & Stacks • objdump Dipl. Informatiker Gregor Rebel 153 Multitasking in Embedded Systems Different types of Memories • Storage – RAM – Heap – Stack • Datatypes – Constants – Global Variables – Local Variables Dipl. Informatiker Gregor Rebel 154 Multitasking in Embedded Systems Constants • Stored in Flashmemory along code • Automatically initialized 0x4000 0000 (initial value contained in binary) Peripherals • Reference to value points to 0x2000 0000 address > 0x0800 0000 RAM • Example: char* HelloWorld = „Hello world“; Dipl. Informatiker Gregor Rebel 155 „Hello World“ 0x0800 0000 Flash Multitasking in Embedded Systems Global Variables • Stored in RAM • Initialized by code at program start • Reference to value points to address > 0x2000 0000 0x4000 0000 Peripherals • Example: int V = 42; 0x2000 0000 RAM void main() { V++; } Dipl. Informatiker Gregor Rebel 0x0800 0000 Flash 156 Multitasking in Embedded Systems Lokal Variables Dipl. Informatiker Gregor Rebel 157 Multitasking in Embedded Systems Multitasking & Stacks • • • • • Stacks in Singletask Applications Stacks in Multitasking Applications Stacks in FreeRTOS Stackoverflow Dipl. Informatiker Gregor Rebel 158 Multitasking in Embedded Systems Debug: objdump Dipl. Informatiker Gregor Rebel 159 Multitasking in Embedded Systems