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 gitosis@hlb-labor.de: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