Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

SPiC - Vorlesung im WS 2020/21

UnivIS Informationen

Im Wintersemester wird keine SPiC Vorlesung stattfinden - die hier angezeigten Informationen und Folien beziehen sich auf das vorherige Semester.
Es werden jedoch Übungen angeboten, die eine Wiederholung des Übungsstoffs ermöglichen. Durch Bearbeitung der Aufgaben ist der Erwerb von Bonuspunkten möglich.

Vorlesungsüberblick

Die Vorlesung soll aufbauend auf den Informatik-Kenntnissen aus GdI und ersten Programmiererfahrungen mit der Programmiersprache Java grundlegende Kenntnisse der systemnahen Programmierung vermitteln.

Während sich moderne Anwendungsprogrammierung primär an den Zusammenhängen und Begriffen des Anwendungsproblems orientiert und von den tatsächlichen Abläufen im Rechner weitgehend abstrahiert wird, sind bei systemnaher Programmierung gerade diese Abläufe im Rechner/Mikrocontroller das zu lösende Problem. Damit stehen die mächtigen Abstraktionen eines Betriebssystems, einer Middleware oder einer virtuellen Maschine nicht oder zumindest nur in geringerem Umfang zur Verfügung.

Eine in diesem Umfeld weit verbreitete Programmiersprache ist C, die im Rahmen der Lehrveranstaltung als Grundlage für Vorlesung und praktische Übungen dienen wird.

Obwohl C aus softwaretechnischer Sicht nicht mehr aktuell ist und für den Aufbau größerer Anwendungssoftwaresysteme äußerst kritisch gesehen werden muss, ist ein großer Teil der heute in Betrieb befindlichen Software in dieser Sprache geschrieben und man ist dadurch häufig mit der Wartung oder Weiterentwicklung solcher Software konfrontiert.

Vor allem im Bereich von eingebetten Systemen und allen anderen Arten von systemnaher Programmierung wird C auch heute noch häufig für Neuentwicklungen eingesetzt. Viele Entwicklungswerkzeuge sind auf diese Sprache ausgerichtet und in den Entwicklergruppen ist die Erfahrung mit der Programmiersprache und der damit verbundenen Art der systemnahen Programmierung nach wie vor sehr weit verbreitet.

Der Fokus der Lehrveranstaltung liegt einerseits auf der Architektur systemnaher Software und den Zusammenhängen zwischen den Abstraktionen der Programmiersprache und den tatsächlichen Strukturen und Abläufen in der Hardware (z.B. Zeiger in C, virtueller Speicher, Speicherzellen des Hauptspeichers). Andererseits wird besprochen, wie man bei der gerade im ingenieurwissenschaftlichen Bereich wichtigen systemnahen Programmierung - z.B. für für eingebettete Systeme - vorgeht und diskutiert, wann und wo man eine sinnvolle Grenze zwischen systemnaher Software und der immer umfangreicher und komplexer werdenden Anwendungssoftware ziehen sollte. Im Vergleich zu Java sollen dabei vor allem auch die aus programmiertechnischer Sicht problematischen Seiten von C und die daraus resultierenden Gefahren beleuchtet werden.

Übungen

Die ersten Übungsaufgaben sind "zum Warmwerden" mit der Sprache und der Hardware gedacht. Die Entwicklung findet unter Linux und unter Verwendung der SPiC IDE statt und programmiert wird das SPiCboard. Leider kann dieses Semester kein SPiCboard selbst gelötet werden. Stattdessen werden die Übungen mit Hilfe des SPiCsim Simulators durchgeführt. Ziel der Übungen ist es, dass die typischen Probleme und Lösungen für hardwarenahe Mikrocontrollerprogrammierung erkannt und verstanden werden. Dazu gehört auch der effiziente Umgang mit Ressourcen (z.B. Speicher und Energie) und das Erstellen von korrekter und robuster Software.

Im zweiten Teil der Veranstaltung werden die Erfahrungen auf die systemnahe Programmierung unter Verwendung eines Betriebssystems (Linux) angewandt. Es wird der Umgang mit Schnittstellen des Betriebssystemkerns geübt und Parallelen zur Entwicklung ohne Betriebssystem auf dem Mikrocontroller gezogen.

Folien der Vorlesung

Die Folien bilden den roten Faden durch die Vorlesung. Für die komfortable Anzeige am Bildschirm und als Referenz stehen sowohl das Handout als auch die Präsentationsfolien (mit Einblendeanimationen) in einer Gesamtversion im PDF-Format zur Verfügung (durchsuchbar, mit klickbaren Querverweisen und Links). Zur Zuordnung der Folien zu den einzelnen Vorlesungen (sowohl Planung im Voraus als auch Protokoll im Nachhinein) siehe die Terminübersicht (Semesterplanung) auf der SPiC-Hauptseite.

Neben den Screencasts aus dem Sommersemester 2020 gibt es auch eine Vorlesungsaufzeichnung des Sommersemesters 2019 (Videoportal).


Folienvarianten
(Letzte Änderung: 03.07.2020)
Videolink Annotiertes
PDF
Gesamtes Skriptum
   Handout
   Präsentation
 
Teil A: Konzept und Organisation
   Kapitel 1: Einführung Kapitel 01 (Video) PDF
   Kapitel 2: Organisation Kapitel 02 (Video) PDF
Teil B: Einführung in C
   Kapitel 3: Java versus C Kapitel 03 (Video)
   Kapitel 4: Softwareschichten und Abstraktion Kapitel 04 (Video)
   Kapitel 5: Sprachüberblick Kapitel 05 (Video)
   Kapitel 6: Einfache Datentypen Kapitel 06 (Video)
   Kapitel 7: Operatoren und Ausdrücke Kapitel 07 (Video)
   Kapitel 8: Kontrollstrukturen Kapitel 08 (Video)
   Kapitel 9: Funktionen Kapitel 09 (Video)
   Kapitel 10: Variablen Kapitel 10 (Video)
   Kapitel 11: Präprozessor Kapitel 11 (Video)
Teil C: Systemnahe Softwareentwicklung
   Kapitel 12: Programmstruktur und Module Kapitel 12 (Video)
   Kapitel 13: Zeiger und Felder Kapitel 13 (Video)
   Kapitel 14: Verbundtypen Kapitel 14 (Video)
   Kapitel 15: Mikrocontroller Vorbemerkungen Kapitel 15 (Video)
   Kapitel 16: Mikrocontroller Prozessor Kapitel 16 (Video)
   Kapitel 17: Mikrocontroller Peripherie Kapitel 17 (Video)
   Kapitel 18: Unterbrechungen Kapitel 18 (Video)
   Kapitel 19: Unterbrechungen Beispiel Kapitel 19 (Video)
   Kapitel 20: Unterbrechungen Nebenläufigkeit Kapitel 20 (Video)
Teil D: Betriebssystemabstraktionen
   Kapitel 21: Ergänzungen Zeiger Kapitel 21 (Video)
   Kapitel 22: Ergänzungen Ein-/Ausgabe Kapitel 22 (Video)
   Kapitel 23: Ergänzungen Fehlerbehandlung Kapitel 23 (Video)
   Kapitel 24: Betriebssysteme Kapitel 24 (Video)
   Kapitel 25: Dateisysteme Einleitung Kapitel 25 (Video)
   Kapitel 26: Dateisysteme Unix Kapitel 26 (Video)
   Kapitel 27: Programme und Prozesse Kapitel 27 (Video)
   Kapitel 28: Programme und Prozesse Unix Kapitel 28 (Video)
   Kapitel 29: Signale Kapitel 29 (Video)
   Kapitel 30: Multiprozessoren Kapitel 30 (Video)
   Kapitel 31: Nebenläufige Fäden Kapitel 31 (Video)
   Kapitel 32: Nebenläufige Fäden Praxis Kapitel 32 (Video)
Teil E: Speicher
   Kapitel 33: Dynamische Speicherallokation Kapitel 33 (Video)
   Kapitel 34: Speicherorganisation Kapitel 34 (Video)
   Kapitel 35: Speicherorganisation Stack Kapitel 35 (Video)
   Kapitel 36: Speicherorganisation Zusammenfassung Kapitel 36 (Video)
   
Wir behalten uns vor, das Skript regelmäßig zu verbessern und aktualisieren. Änderungen betreffen jedoch in der Regel nicht das gesamte Skript. Auf den Folien ist jeweils aufgeführt, wann sich das entsprechende Kapitel zuletzt geändert hat Datum der letzten Änderung

All slides are copyrighted © 2006–2020 by Daniel Lohmann, Jürgen Kleinöder, and Volkmar Sieh, University of Erlangen-Nürnberg, Germany. Use without prior written permission of the authors is not permitted!