diff --git a/20171109/es-20171109.pdf b/20171109/es-20171109.pdf
index 338358f02eb66f98401067d8e18a973ac968d565..49ad1b3758f02c3d46d60ad04840d11d1e593d49 100644
Binary files a/20171109/es-20171109.pdf and b/20171109/es-20171109.pdf differ
diff --git a/20171109/es-20171109.tex b/20171109/es-20171109.tex
index 2ab58f85cecc457c753d8bf3b4960cb0fb41b180..00de850716866cf946deb15cbed875388e0d2e99 100644
--- a/20171109/es-20171109.tex
+++ b/20171109/es-20171109.tex
@@ -219,7 +219,7 @@
 
   \medskip
 
-  synchron
+  asynchron
   \begin{itemize}
     \item
       \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen
@@ -306,9 +306,9 @@
   seriell
   \begin{itemize}
     \item
-      \newterm{MISO\/}: Master Out, Slave In
+      \newterm{MOSI\/}: Master Out, Slave In
     \item
-      \newterm{MOSI\/}: Master In, Slave Out
+      \newterm{MISO\/}: Master In, Slave Out
     \item
       \newterm{SCLK\/}: Taktleitung (Clock)
     \item
diff --git a/20171116/I2C_data_transfer.pdf b/20171116/I2C_data_transfer.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0d5b8a241c624391cbf6f3a30f26320559358e1d
Binary files /dev/null and b/20171116/I2C_data_transfer.pdf differ
diff --git a/20171116/I2C_data_transfer.svg b/20171116/I2C_data_transfer.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4dba5a7e2ac2388dd69e52c8da66667716ed66f8
--- /dev/null
+++ b/20171116/I2C_data_transfer.svg
@@ -0,0 +1,216 @@
+<?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/20171116/RS-232_timing-no-text.png b/20171116/RS-232_timing-no-text.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb877b4e33bfb87f6a3230c82373db9f7470344d
Binary files /dev/null and b/20171116/RS-232_timing-no-text.png differ
diff --git a/20171116/Retribution_Engine_Screenshot_120807.jpg b/20171116/Retribution_Engine_Screenshot_120807.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7
--- /dev/null
+++ b/20171116/Retribution_Engine_Screenshot_120807.jpg
@@ -0,0 +1 @@
+../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20171116/SPI_single_slave.pdf b/20171116/SPI_single_slave.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6f724dad4a8ed23b262b0b1c672bf85b72405155
Binary files /dev/null and b/20171116/SPI_single_slave.pdf differ
diff --git a/20171116/SPI_single_slave.svg b/20171116/SPI_single_slave.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b20e01c319aaa346f92e8921a37b5cf2c88ef19d
--- /dev/null
+++ b/20171116/SPI_single_slave.svg
@@ -0,0 +1,293 @@
+<?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/20171116/SPI_three_slaves.pdf b/20171116/SPI_three_slaves.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b67dc94c790a62935c7b353449e2ce8c75a7d9fe
Binary files /dev/null and b/20171116/SPI_three_slaves.pdf differ
diff --git a/20171116/SPI_three_slaves.svg b/20171116/SPI_three_slaves.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c24a19730fd4bcd4b0305e255fadc772cca5ceeb
--- /dev/null
+++ b/20171116/SPI_three_slaves.svg
@@ -0,0 +1,546 @@
+<?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/20171116/SPI_three_slaves_daisy_chained.pdf b/20171116/SPI_three_slaves_daisy_chained.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..46ac2027cfcbd598a609e43ce74e19e75d374ead
Binary files /dev/null and b/20171116/SPI_three_slaves_daisy_chained.pdf differ
diff --git a/20171116/SPI_three_slaves_daisy_chained.svg b/20171116/SPI_three_slaves_daisy_chained.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5256fcff4a1fe1c6e70a5e4926623944c47b9e5a
--- /dev/null
+++ b/20171116/SPI_three_slaves_daisy_chained.svg
@@ -0,0 +1,537 @@
+<?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/20171116/Telefon_t-sinus-700.jpg b/20171116/Telefon_t-sinus-700.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..27c322c50b0f05edc8b07cfb0cc99b1876eb506d
--- /dev/null
+++ b/20171116/Telefon_t-sinus-700.jpg
@@ -0,0 +1 @@
+../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20171116/Zeichen_123.pdf b/20171116/Zeichen_123.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116
--- /dev/null
+++ b/20171116/Zeichen_123.pdf
@@ -0,0 +1 @@
+../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20171116/a380.jpg b/20171116/a380.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..33a5d1fd18843bf7385e5a6d90f69af9fd8720da
--- /dev/null
+++ b/20171116/a380.jpg
@@ -0,0 +1 @@
+../common/a380.jpg
\ No newline at end of file
diff --git a/20171116/curiosity.jpg b/20171116/curiosity.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..4452844da537414b751c5283ca8468b3ced9afb3
--- /dev/null
+++ b/20171116/curiosity.jpg
@@ -0,0 +1 @@
+../common/curiosity.jpg
\ No newline at end of file
diff --git a/20171116/dsc_8208.jpg b/20171116/dsc_8208.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..5796341ebc774aa09965a3a29854c65ce1144fb8
--- /dev/null
+++ b/20171116/dsc_8208.jpg
@@ -0,0 +1 @@
+../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20171116/es-20171116.pdf b/20171116/es-20171116.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e0fd1fe2cfcc18f261509b849357bcab3db98942
Binary files /dev/null and b/20171116/es-20171116.pdf differ
diff --git a/20171116/es-20171116.tex b/20171116/es-20171116.tex
new file mode 100644
index 0000000000000000000000000000000000000000..b6d4ae9f1ac2fab461d16455d5f0ecf34cbd2e42
--- /dev/null
+++ b/20171116/es-20171116.tex
@@ -0,0 +1,2230 @@
+% es-20171116.pdf - Lecture Slides on 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/>.
+
+% README: Bus-Systeme, evtl. Echtzeit
+
+\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}{\vspace*{-5cm plus 1filll}%
+  \begin{picture}(0,0)
+    \put(9,1.3){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
+    \put(9,1.0){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
+  \end{picture}}
+
+\title{Vertiefung Systemtechnik\\Eingebettete Systeme}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{16.\ November 2017}
+
+\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
+
+\begin{document}
+
+\newlength{\normalpdfpageheight}
+\setlength{\normalpdfpageheight}{\pdfpageheight}
+
+\maketitleframe
+
+\nosectionnonumber{Vertiefung Systemtechnik -- Eingebettete Systeme}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \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{medgreen}
+        \item[5.1] Was ist Echtzeit?
+        \item[5.2] Echtzeitprogrammierung
+        \color{orange}
+        \item[5.3] Multitasking
+        \color{red}
+        \item[5.4] Ressourcen
+        \item[5.5] Prioritäten
+      \end{itemize}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+    \underconstruction
+  \end{itemize}
+
+\end{frame}
+
+\setcounter{section}{3}
+\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
+
+  asynchron
+  \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{MOSI\/}: Master Out, Slave In
+    \item
+      \newterm{MISO\/}: 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{Vertiefung Systemtechnik -- Eingebettete Systeme}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \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{medgreen}
+        \item[5.1] Was ist Echtzeit?
+        \item[5.2] Echtzeitprogrammierung
+        \color{orange}
+        \item[5.3] Multitasking
+        \color{red}
+        \item[5.4] Ressourcen
+        \item[5.5] Prioritäten
+      \end{itemize}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+    \underconstruction
+  \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}
+
+\nosectionnonumber{Vertiefung Systemtechnik -- Eingebettete Systeme}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+      \begin{itemize}
+        \color{medgreen}
+        \item[4.1] Was sind Bus-Systeme?
+        \item[4.2] RS-232
+        \item[4.3] \ItwoC\ (TWI)
+        \item[4.4] SPI
+        \item[4.5] Beispiel: Benutzung des \ItwoC-Busses
+      \end{itemize}
+    \item[\textbf{5}] \textbf{Echtzeit}
+      \begin{itemize}
+        \color{medgreen}
+        \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}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+    \underconstruction
+  \end{itemize}
+
+\end{frame}
+
+\end{document}
diff --git a/20171116/herzschrittmacher.jpg b/20171116/herzschrittmacher.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..92d8f0053003cc555aec83f5d088f1cec822ad81
--- /dev/null
+++ b/20171116/herzschrittmacher.jpg
@@ -0,0 +1 @@
+../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20171116/kompass-messung.png b/20171116/kompass-messung.png
new file mode 120000
index 0000000000000000000000000000000000000000..85cfa0d3840e7542ebb6dd2092be6c2a6e08fbb1
--- /dev/null
+++ b/20171116/kompass-messung.png
@@ -0,0 +1 @@
+../common/kompass-messung.png
\ No newline at end of file
diff --git a/20171116/kompassmodul-an-roboter.jpg b/20171116/kompassmodul-an-roboter.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..dab8b38c1a92bf8072d42dc3abcc07be54a58c7b
--- /dev/null
+++ b/20171116/kompassmodul-an-roboter.jpg
@@ -0,0 +1 @@
+../common/kompassmodul-an-roboter.jpg
\ No newline at end of file
diff --git a/20171116/kompassmodul.jpg b/20171116/kompassmodul.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..be108a5341df13a693959dbe69b7b9541b36fc4c
--- /dev/null
+++ b/20171116/kompassmodul.jpg
@@ -0,0 +1 @@
+../common/kompassmodul.jpg
\ No newline at end of file
diff --git a/20171116/logo-hochschule-bochum-cvh-text.pdf b/20171116/logo-hochschule-bochum-cvh-text.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..a05946126bc0ce6a2818740da2893f59eb0c659c
--- /dev/null
+++ b/20171116/logo-hochschule-bochum-cvh-text.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20171116/logo-hochschule-bochum.pdf b/20171116/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20171116/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20171116/make-zombies.c b/20171116/make-zombies.c
new file mode 100644
index 0000000000000000000000000000000000000000..3e1418aa5567a38d274cbb2ba1588d7e765823d4
--- /dev/null
+++ b/20171116/make-zombies.c
@@ -0,0 +1,39 @@
+#include <sys/wait.h>
+#include <stdio.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 ("BRAINS! ");
+            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/20171116/motherboard-anschluesse.jpg b/20171116/motherboard-anschluesse.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..07335d7dff65c71a683588d2ed108485c4653fb7
--- /dev/null
+++ b/20171116/motherboard-anschluesse.jpg
@@ -0,0 +1 @@
+../common/motherboard-anschluesse.jpg
\ No newline at end of file
diff --git a/20171116/pathfinder.jpg b/20171116/pathfinder.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..23c6444fee26e0cf0dd2f8639484b00aa5021b59
--- /dev/null
+++ b/20171116/pathfinder.jpg
@@ -0,0 +1 @@
+../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20171116/pgslides.sty b/20171116/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20171116/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20171116/philosophenproblem.jpg b/20171116/philosophenproblem.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..26591b2ac2dddfd4786814baf3f19ecb67f1f5ee
--- /dev/null
+++ b/20171116/philosophenproblem.jpg
@@ -0,0 +1 @@
+../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20171116/photo-20171116-152713.jpg b/20171116/photo-20171116-152713.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5dcca28aba3dab5d07c1e6e638ed696ed05f03e2
Binary files /dev/null and b/20171116/photo-20171116-152713.jpg differ
diff --git a/20171116/quadrocopter.jpg b/20171116/quadrocopter.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c
--- /dev/null
+++ b/20171116/quadrocopter.jpg
@@ -0,0 +1 @@
+../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20171116/rp6.jpg b/20171116/rp6.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..2a0ecff23845770c3a98178eca6dce3ec73aca58
--- /dev/null
+++ b/20171116/rp6.jpg
@@ -0,0 +1 @@
+../common/rp6.jpg
\ No newline at end of file
diff --git a/20171116/rs-232.pdf b/20171116/rs-232.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..236ef5bf182048842613c5416b91afb68f451fa6
Binary files /dev/null and b/20171116/rs-232.pdf differ
diff --git a/20171116/rs-232.tex b/20171116/rs-232.tex
new file mode 100644
index 0000000000000000000000000000000000000000..a174692f177abe0d0ff1afd7e6783160485b5a22
--- /dev/null
+++ b/20171116/rs-232.tex
@@ -0,0 +1,97 @@
+% 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/20171116/xbee.jpg b/20171116/xbee.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..ff0adff2eadf3d9b775d03cea8cf1f118534e2b9
--- /dev/null
+++ b/20171116/xbee.jpg
@@ -0,0 +1 @@
+../common/xbee.jpg
\ No newline at end of file
diff --git a/20171123/Retribution_Engine_Screenshot_120807.jpg b/20171123/Retribution_Engine_Screenshot_120807.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7
--- /dev/null
+++ b/20171123/Retribution_Engine_Screenshot_120807.jpg
@@ -0,0 +1 @@
+../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20171123/Telefon_t-sinus-700.jpg b/20171123/Telefon_t-sinus-700.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..27c322c50b0f05edc8b07cfb0cc99b1876eb506d
--- /dev/null
+++ b/20171123/Telefon_t-sinus-700.jpg
@@ -0,0 +1 @@
+../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20171123/Zeichen_123.pdf b/20171123/Zeichen_123.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116
--- /dev/null
+++ b/20171123/Zeichen_123.pdf
@@ -0,0 +1 @@
+../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20171123/a380.jpg b/20171123/a380.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..33a5d1fd18843bf7385e5a6d90f69af9fd8720da
--- /dev/null
+++ b/20171123/a380.jpg
@@ -0,0 +1 @@
+../common/a380.jpg
\ No newline at end of file
diff --git a/20171123/curiosity.jpg b/20171123/curiosity.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..4452844da537414b751c5283ca8468b3ced9afb3
--- /dev/null
+++ b/20171123/curiosity.jpg
@@ -0,0 +1 @@
+../common/curiosity.jpg
\ No newline at end of file
diff --git a/20171123/dsc_8208.jpg b/20171123/dsc_8208.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..5796341ebc774aa09965a3a29854c65ce1144fb8
--- /dev/null
+++ b/20171123/dsc_8208.jpg
@@ -0,0 +1 @@
+../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20171123/env.cgi b/20171123/env.cgi
new file mode 100755
index 0000000000000000000000000000000000000000..221c600b2510c4847b16c33db2788a13ce1a5549
--- /dev/null
+++ b/20171123/env.cgi
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+echo Content-Type: text/plain
+echo
+
+echo "Hello, world!"
+echo
+
+echo "Hier meine Eingabedaten:"
+echo
+cat
+echo
+echo
+
+echo "Hier meine Umgebungsvariablen:"
+echo
+set
+echo
+
+echo "Tschüs!"
diff --git a/20171123/es-20171123.pdf b/20171123/es-20171123.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e90c6ca2c57135ab8eed85c595f76600d7a12709
Binary files /dev/null and b/20171123/es-20171123.pdf differ
diff --git a/20171123/es-20171123.tex b/20171123/es-20171123.tex
new file mode 100644
index 0000000000000000000000000000000000000000..ac929c8483ed39923262f612207fe82a61247ec0
--- /dev/null
+++ b/20171123/es-20171123.tex
@@ -0,0 +1,1522 @@
+% es-20171123.pdf - Lecture Slides on 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/>.
+
+% README: Bus-Systeme, evtl. Echtzeit
+
+\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}{\vspace*{-5cm plus 1filll}%
+  \begin{picture}(0,0)
+    \put(9,1.3){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
+    \put(9,1.0){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
+  \end{picture}}
+
+\title{Vertiefung Systemtechnik\\Eingebettete Systeme}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{23.\ November 2017}
+
+\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
+
+\begin{document}
+
+\newlength{\normalpdfpageheight}
+\setlength{\normalpdfpageheight}{\pdfpageheight}
+
+\maketitleframe
+
+\nosectionnonumber{Vertiefung Systemtechnik -- Eingebettete Systeme}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+    \item[\textbf{6}] \textbf{Echtzeit}
+      \begin{itemize}
+        \item[5.1] Was ist Echtzeit?
+        \item[5.2] Echtzeitprogrammierung
+        \item[5.3] Multitasking
+        \color{medgreen}
+        \item[5.4] Ressourcen
+        \item[5.5] Prioritäten
+        \color{red}
+        \item[5.6] Echtzeitbetriebssysteme
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Web-Interfaces}
+      \begin{itemize}
+        \color{red}
+        \item[6.1] HTTP, HTML und CGI
+        \item[6.2] Externe CGI-Skripte, GET und POST
+        \item[6.3] Skript im Server: PHP
+        \item[6.4] Server im Skript: Twisted
+      \end{itemize}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+    \underconstruction
+  \end{itemize}
+
+\end{frame}
+
+\setcounter{section}{4}
+\section{Echtzeit}
+\setcounter{subsection}{3}
+\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}
+
+\subsection{Echtzeitbetriebssysteme}
+
+\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}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Beispiele
+
+  \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. & -- & mehrfach zertifiziert \\\hline
+      eCos & GPL & Unix & stark konfigurierbar \\\hline
+      QNX & prop. & Unix & im Automobilbereich beliebt \\\hline
+      VxWorks & prop. & Unix & mehrfach zertifiziert \\\hline
+      RTAI & GPL & Unix (Linux) & Linux als Hintergrundprozeß \\\hline
+      RT\_PREEMPT & GPL & Unix (Linux) & angepaßter Kernel \\\hline
+      Xenomai & GPL & Unix (Linux) & Dual-Kernel \\\hline
+      Windows CE / Em- & & & \\[-3pt]
+      bedded Compact & prop. & MS-Windows & \\\hline
+    \end{tabular}
+  \end{center}
+  \vspace*{-1cm}
+
+\end{frame}
+
+\nosectionnonumber{Vertiefung Systemtechnik -- Eingebettete Systeme}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+    \item[\textbf{5}] \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
+        \color{medgreen}
+        \item[5.6] Echtzeitbetriebssysteme
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Web-Interfaces}
+      \begin{itemize}
+        \color{red}
+        \item[6.1] HTTP, HTML und CGI
+        \item[6.2] Externe CGI-Skripte, GET und POST
+        \item[6.3] Skript im Server: PHP
+        \item[6.4] Server im Skript: Twisted
+      \end{itemize}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+    \underconstruction
+  \end{itemize}
+
+\end{frame}
+
+\section{Web-Interfaces}
+\subsection{HTTP, HTML und CGI}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{lstlisting}[style=terminal]
+    $ ¡nc -C localhost 80¿
+    GET / HTTP/1.1
+    Host: localhost
+
+    HTTP/1.1 200 OK
+    Date: Wed, 22 Nov 2017 19:58:55 GMT
+    Server: Apache/2.4.25 (Debian)
+    [...]
+    Content-Type: text/html
+
+    <html>
+     <body>
+      <h1 align="center">Vertiefung<br>Vertiefung Systemtechnik &ndash; Eingebettete Systeme</h1>
+      <p align="center">23. November 2017</p>
+      <p align="center">Prof. Dr. Peter Gerwinski</p>
+     </body>
+    </html>
+  \end{lstlisting}
+  \vspace*{-1cm}
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      \newterm{Hypertext Transport Protocol (HTTP)}: Netzwerk-Protokoll\\
+      HTML-Inhalt + zusätzliche Daten
+    \pause
+    \item
+      \newterm{Hypertext Markup Language (HTML)}: Markup-Sprache\\
+      Inhalte + Formulare
+      \begin{onlyenv}<2>
+        \bigskip
+        \begin{lstlisting}[language=html,gobble=10]
+          <form action="/cgi-bin/welcome.cgi" method="get">
+            Your name: <input type="text" name="name"><br>
+            <input type="submit">
+          </form>
+        \end{lstlisting}
+        \vspace*{-2cm}
+      \end{onlyenv}
+    \pause
+    \item
+      \newterm{Common Gateway Interface (CGI)}: Schnittstelle zu Programmen\\
+      Liste von Variablen mit Werten
+      \par\smallskip
+      \begin{itemize}
+        \item
+          \newterm{GET-Methode}: Umgebungsvariable \lstinline{QUERY_STRING}
+        \smallskip
+        \item
+          \newterm{POST-Methode}: Standardeingabe
+      \end{itemize}
+  \end{itemize}
+  \bigskip
+  \lstinline[style=terminal]{http://localhost/cgi-bin/welcome.cgi?name=Peter&answer=42}
+\end{frame}
+
+\subsection{Externe CGI-Skripte, GET und POST}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}\itemsep\medskipamount
+    \item
+      HTML-Formular verweist auf CGI-Programm ("`CGI-Skript"')
+      \par
+      \lstinline[language=html]{<form action="/cgi-bin/welcome.cgi"}
+      \lstinline[language=html]{method="get">}
+    \item
+      Web-Server ruft CGI-Programm auf
+    \item
+      CGI-Programm wertet Variablenliste aus
+      \begin{itemize}
+        \item
+          GET-Methode: Umgebungsvariable \lstinline{QUERY_STRING}
+        \smallskip
+        \item
+          POST-Methode: Standardeingabe
+      \end{itemize}
+    \item
+      CGI-Programm gibt HTTP-Header und Inhalt aus
+      \par\smallskip
+      \begin{lstlisting}[language=bash]
+        #!/bin/bash
+        echo Content-Type: text/plain
+        echo
+        echo "Hello, world!"
+      \end{lstlisting}
+    \item
+      speziell: Inhalt ist \lstinline{text/html}
+  \end{itemize}
+\end{frame}
+
+\subsection{Skript im Server: PHP}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Interpreter in Web-Server integriert
+  \end{itemize}
+
+  \bigskip
+
+  \begin{lstlisting}[language=php]
+    <html>
+      <body>
+        Hello, <?php echo $_POST["name"]; ?>!
+      </body>
+    </html> 
+  \end{lstlisting}
+\end{frame}
+
+\subsection{Server im Skript: Twisted}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      individuell geschriebener Web-Server
+    \item
+      "`Baukasten"' in JavaScript: \file{node.js}
+    \item
+      "`Baukasten"' in Python: \file{Twisted}
+  \end{itemize}
+
+  \bigskip
+
+  \begin{lstlisting}[language=python]
+    def render_GET(self, request):
+        return '<html><body><form method="POST">Your name: ' \
+               + '<input name="name" type="text" /><br/>' \
+               + '<input type="submit"></form></body></html>'
+
+    def render_POST(self, request):
+        return '<html><body>Hello, %s!</body></html>' \
+               % (cgi.escape(request.args["name"][0]),)
+  \end{lstlisting}
+\end{frame}
+
+\nosectionnonumber{Vertiefung Systemtechnik -- Eingebettete Systeme}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+    \item[\textbf{5}] \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
+        \color{medgreen}
+        \item[5.6] Echtzeitbetriebssysteme
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Web-Interfaces}
+      \begin{itemize}
+        \color{medgreen}
+        \item[6.1] HTTP, HTML und CGI
+        \item[6.2] Externe CGI-Skripte, GET und POST
+        \item[6.3] Skript im Server: PHP
+        \item[6.4] Server im Skript: Twisted
+      \end{itemize}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+    \underconstruction
+  \end{itemize}
+
+\end{frame}
+
+\end{document}
diff --git a/20171123/filepos-1.c b/20171123/filepos-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..d4525c84a17e0c5e9cdedca31c8368a0581e139d
--- /dev/null
+++ b/20171123/filepos-1.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+int main (void)
+{
+  FILE *f = fopen ("filepos-1.txt", "w+");
+  fprintf (f, "Hello, world!\n");
+  char buffer[100] = "";
+  fgets (buffer, sizeof (buffer), f);
+  printf ("buffer = \"%s\"\n", buffer);
+  return 0;
+}
diff --git a/20171123/filepos-1.txt b/20171123/filepos-1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..af5626b4a114abcb82d63db7c8082c3c4756e51b
--- /dev/null
+++ b/20171123/filepos-1.txt
@@ -0,0 +1 @@
+Hello, world!
diff --git a/20171123/filepos-2.c b/20171123/filepos-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..c0af4d972d2c5ca4057952dae9f749e430aa560e
--- /dev/null
+++ b/20171123/filepos-2.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+int main (void)
+{
+  FILE *f = fopen ("filepos-1.txt", "w+");
+  fprintf (f, "Hello, world!\n");
+  char buffer[100] = "";
+  fseek (f, 0, SEEK_SET);
+  fgets (buffer, sizeof (buffer), f);
+  printf ("buffer = \"%s\"\n", buffer);
+  return 0;
+}
diff --git a/20171123/grep-find-1.log b/20171123/grep-find-1.log
new file mode 100644
index 0000000000000000000000000000000000000000..f45a33b08af556c7d972748594d7677d90fa0111
--- /dev/null
+++ b/20171123/grep-find-1.log
@@ -0,0 +1,9 @@
+$ grep "Hello" $(find . -type f -name "*.[ch]")
+
+Falls Argument-Liste zu lang wird:
+
+$ find . -type f -name "*.[ch]" -exec grep "Hello" {} +
+
+Das "{}" steht für die von "find" gefundene Datei.
+"+" bedeutet, daß "find" das Programm "grep" auch für mehrere gefundene Dateien aufruft.
+Mit "\;" statt "+" wird "grep" für jede Datei einzeln aufgerufen.
diff --git a/20171123/herzschrittmacher.jpg b/20171123/herzschrittmacher.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..92d8f0053003cc555aec83f5d088f1cec822ad81
--- /dev/null
+++ b/20171123/herzschrittmacher.jpg
@@ -0,0 +1 @@
+../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20171123/logo-hochschule-bochum-cvh-text.pdf b/20171123/logo-hochschule-bochum-cvh-text.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..a05946126bc0ce6a2818740da2893f59eb0c659c
--- /dev/null
+++ b/20171123/logo-hochschule-bochum-cvh-text.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20171123/logo-hochschule-bochum.pdf b/20171123/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20171123/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20171123/pathfinder.jpg b/20171123/pathfinder.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..23c6444fee26e0cf0dd2f8639484b00aa5021b59
--- /dev/null
+++ b/20171123/pathfinder.jpg
@@ -0,0 +1 @@
+../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20171123/pgslides.sty b/20171123/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20171123/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20171123/philosophenproblem.jpg b/20171123/philosophenproblem.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..26591b2ac2dddfd4786814baf3f19ecb67f1f5ee
--- /dev/null
+++ b/20171123/philosophenproblem.jpg
@@ -0,0 +1 @@
+../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20171123/photo-20171116-152713.jpg b/20171123/photo-20171116-152713.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5dcca28aba3dab5d07c1e6e638ed696ed05f03e2
Binary files /dev/null and b/20171123/photo-20171116-152713.jpg differ
diff --git a/20171123/quadrocopter.jpg b/20171123/quadrocopter.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c
--- /dev/null
+++ b/20171123/quadrocopter.jpg
@@ -0,0 +1 @@
+../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20171123/rp6.jpg b/20171123/rp6.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..2a0ecff23845770c3a98178eca6dce3ec73aca58
--- /dev/null
+++ b/20171123/rp6.jpg
@@ -0,0 +1 @@
+../common/rp6.jpg
\ No newline at end of file
diff --git a/20171123/sed-screenshot-1.log b/20171123/sed-screenshot-1.log
new file mode 100644
index 0000000000000000000000000000000000000000..2dfce306c155d042bfc5735ae0f0a7528a415006
--- /dev/null
+++ b/20171123/sed-screenshot-1.log
@@ -0,0 +1,26 @@
+cassini/usr/lib/cgi-bin> QUERY_STRING="name=Peter&answer=42"
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING
+name=Peter&answer=42
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/=/FISCH/'
+nameFISCHPeter&answer=42
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/=/FISCH/g'
+nameFISCHPeter&answerFISCH42
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/[=&]/FISCH/g'
+nameFISCHPeterFISCHanswerFISCH42
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/[^=&]/X/g'
+XXXX=XXXXX&XXXXXX=XX
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/^[^=&]/X/g'
+Xame=Peter&answer=42
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/[^=&]$/X/g'
+name=Peter&answer=4X
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e '\<s/[^=&]\>/X/g'
+sed: -e Ausdruck #1, Zeichen 15: Nicht beendeter regulärer Adressausdruck
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/\<[^=&]\>/X/g'
+name=Peter&answer=42
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/\<[^=&]/X/g'
+Xame=Xeter&Xnswer=X2
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/[^=&]\>/X/g'
+namX=PeteX&answeX=4X
+cassini/usr/lib/cgi-bin> echo $QUERY_STRING | sed -e 's/\([^=&]\)/X\1/g'
+XnXaXmXe=XPXeXtXeXr&XaXnXsXwXeXr=X4X2
+cassini/usr/lib/cgi-bin>
diff --git a/20171123/templates-1.c b/20171123/templates-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..07f1c2097247baf3db831ff8ecff8a52e0c78024
--- /dev/null
+++ b/20171123/templates-1.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+
+#define PRINT_FUNC(name, type, spec) \
+  void print_##name (type x)         \
+  {                                  \
+    printf (spec "\n", x);           \
+  }
+
+PRINT_FUNC (int, int, "%d")
+PRINT_FUNC (string, char *, "%s")
+
+int main (void)
+{
+  print_string ("Hello, world!");
+  print_int (42);
+  return 0;
+}
diff --git a/20171123/twisted-get.py b/20171123/twisted-get.py
new file mode 100755
index 0000000000000000000000000000000000000000..0c9e3d61b999cb542b9094f81ba79a7067888e4b
--- /dev/null
+++ b/20171123/twisted-get.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python2
+
+from twisted.web.server import Site
+from twisted.web.resource import Resource
+from twisted.internet import reactor, endpoints
+
+import cgi
+
+class FormPage(Resource):
+    def render_GET(self, request):
+        return '<html><body><form action="/welcome" method="GET">Your name: ' \
+               + '<input name="name" type="text" /><br/>' \
+               + '<input type="submit"></form></body></html>'
+
+class WelcomePage(Resource):
+    def render_GET(self, request):
+        return '<html><body>Hello, %s!<br/></body></html>' \
+               % (cgi.escape(request.args["name"][0]),)
+
+root = Resource()
+root.putChild("form", FormPage())
+root.putChild("welcome", WelcomePage())
+factory = Site(root)
+endpoint = endpoints.TCP4ServerEndpoint(reactor, 8880)
+endpoint.listen(factory)
+reactor.run()
diff --git a/20171123/twisted-post.py b/20171123/twisted-post.py
new file mode 100755
index 0000000000000000000000000000000000000000..5b4dbd98a90fdbe316ce0c1c4ed0923baae4a42f
--- /dev/null
+++ b/20171123/twisted-post.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python2
+
+from twisted.web.server import Site
+from twisted.web.resource import Resource
+from twisted.internet import reactor, endpoints
+
+import cgi
+
+class FormPage(Resource):
+    def render_GET(self, request):
+        return '<html><body><form method="POST">Your name: ' \
+               + '<input name="name" type="text" /><br/>' \
+               + '<input type="submit"></form></body></html>'
+
+    def render_POST(self, request):
+        return '<html><body>Hello, %s!</body></html>' \
+               % (cgi.escape(request.args["name"][0]),)
+
+root = Resource()
+root.putChild("form", FormPage())
+factory = Site(root)
+endpoint = endpoints.TCP4ServerEndpoint(reactor, 8880)
+endpoint.listen(factory)
+reactor.run()
diff --git a/20171123/welcome-post.cgi b/20171123/welcome-post.cgi
new file mode 100755
index 0000000000000000000000000000000000000000..85ba7f42ca297c14085859f24a977475c872e3ed
--- /dev/null
+++ b/20171123/welcome-post.cgi
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+echo Content-Type: text/plain
+echo
+
+name=$(cut -d '&' -f 1 | sed -e "s/\<name=\(.*\)/\1/")
+
+echo "Hello, $name!"
diff --git a/20171123/welcome.cgi b/20171123/welcome.cgi
new file mode 100755
index 0000000000000000000000000000000000000000..fb90a257d20970931fad7cc5497e98301749e2c6
--- /dev/null
+++ b/20171123/welcome.cgi
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+echo Content-Type: text/plain
+echo
+
+name=$(echo $QUERY_STRING | cut -d '&' -f 1 | sed -e "s/\<name=\(.*\)/\1/")
+
+echo "Hello, $name!"
diff --git a/20171123/welcome.php b/20171123/welcome.php
new file mode 100644
index 0000000000000000000000000000000000000000..de6e75cb85dc696080b2320ae3d767460d847303
--- /dev/null
+++ b/20171123/welcome.php
@@ -0,0 +1,5 @@
+<html>
+  <body>
+    Hello, <?php echo $_POST["name"]; ?>!
+  </body>
+</html> 
diff --git a/20171123/xbee.jpg b/20171123/xbee.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..ff0adff2eadf3d9b775d03cea8cf1f118534e2b9
--- /dev/null
+++ b/20171123/xbee.jpg
@@ -0,0 +1 @@
+../common/xbee.jpg
\ No newline at end of file