PTI06830 – Hardwarenahe Programmierung

Modul
Hardwarenahe Programmierung
Machine-/system-level programming
Modulnummer
PTI06830
Version: 1
Fakultät
Physikalische Technik / Informatik
Niveau
Bachelor
Dauer
1 Semester
Turnus
Sommersemester
Modulverantwortliche/-r

Prof. Dr. Frank Grimm
Frank.Grimm(at)fh-zwickau.de

Dozent/-in(nen)

Prof. Dr. Frank Grimm
Frank.Grimm(at)fh-zwickau.de

Lehrsprache(n)

Deutsch - 95.00%
in "Hardwarenahe Programmierung"

Englisch - 5.00%
in "Hardwarenahe Programmierung"

ECTS-Credits

5.00 Credits

Workload

150 Stunden

Lehrveranstaltungen

4.00 SWS (2.00 SWS Vorlesung | 2.00 SWS Praktikum)

Selbststudienzeit

90.00 Stunden
30.00 Stunden Vor-/Nachbereitung - Hardwarenahe Programmierung
60.00 Stunden Selbststudium - Hardwarenahe Programmierung

Prüfungsvorleistung(en)

Testat
in "Hardwarenahe Programmierung"

Prüfungsleistung(en)

mündliche Prüfungsleistung
Modulprüfung | Prüfungsdauer: 20 min | Wichtung: 100%
in "Hardwarenahe Programmierung"

Medienform
Keine Angabe
Lehrinhalte/Gliederung
  • Fortgeschrittene Konzepte der Computerarchitektur (Pipelining, Superskalarität, GPUs und Heterogeneous Computing) und deren Relevanz in Bezug auf systemnahe Programmierung
  • Modernes C und C++
  • C++
    • Objektorientierte Programmierung mit C++
      • Klassenhierarchien, Schnittstellen, Vererbung und virtuelle Methoden
    • Lebenszeit von Speicherobjekten
    • Abbildung primitiver und Objekt-Typen im Arbeitsspeicher
    • Speicherverwaltung
      • Smart Pointer
      • RAII
      • Unterschiede zu Java
    • Templates
    • Softwaretests
    • Sichere, effiziente und aussagekräftige Datentypen und Schnittstellen
    • Compile-Zeit-Konstrukte (z.B. constexpr)
    • Typumwandlungen mit C++-Casts
  • C
    • Unterschiede zu C++
    • Dynamische Speicherverwaltung (malloc/free, generische Zeiger)
  • Entwicklung portabler Hardware-naher Software
  • Entwicklung und Portierung von Software für unterschiedliche Hardware-Architekturen (Compiler/Cross-Compiler, Assembler, Linker und Debugger für verschiedene Plattformen)
  • Sicherheitsaspekte
    • Erkennung und Vermeidung typischer C/C++-Programmierfehler
    • Speicherüberläufe und -löcher
    • Dangling Pointers
  • Typsicherheit, Zeiger und Casts
  • Erkennung und Vermeidung typischer C/C++-Programmierfehler (Speicherüberläufe, -löcher)
  • Entwicklung portabler Hardware-naher Software
  • Entwicklung und Portierung von Software für unterschiedliche Hardware-Architekturen (Compiler/Cross-Compiler, Assembler, Linker und Debugger für verschiedene Plattformen)
  • Einsatz von Hardware-Emulatoren für die plattformübergreifende Entwicklung
  • Funktionsweise, Verwendung und Programmierung von Sensoren und Aktuatoren
  • Grundlagen der Softwareentwicklung für Bare-Metal-Systeme (ohne Betriebssystem und Laufzeitumgebung) und Mikrokontroller
  • Grundlagen und Durchführung von Laufzeit-Performance-Tests für Hardware-nahe Software
  • Aktuelle Entwicklungen im Bereich von Systemprogrammiersprachen (z.B. D und Rust)
Qualifikationsziele

Dieser Kurs verfolgt das Ziel, Studierenden eine Einführung in die Maschinen-nahe Programmierung zu geben. Kennenlernen und Bewerten der Eigenschaften und Mechanismen, die Software besitzen bzw. anwenden muss, um die Fähigkeiten moderner Rechnerarchitekturen auszunutzen. Die Studierenden können die in hardwarenahen Grundlagenmodulen erworbenen Kenntnisse praktisch umsetzen. Sie beherrschen wesentliche Sprachstrukturen von C und C++ und können diese betriebssystemunabhängig anwenden. Typische Fallstricke der beiden Programmiersprachen werden sicher vermieden. Entwicklungswerkzeuge können hinsichtlich ihrer Eignung richtig eingeschätzt werden. Der Einfluss der Rechnerarchitektur auf programmtechnische Besonderheiten ist bekannt. Sie können mithilfe von Sensoren und Aktuatoren mit der Umwelt interagierende Software-Hardware-Systeme erstellen (beispielsweise unter Verwendung von Mikrokontrollern wie Arduino).

Besondere Zulassungsvoraussetzung

Kenntnisse der Inhalte der Module
Grundlagen der Programmierung 1 und 2, Betriebssysteme und Computerarchitektur

Empfohlene Voraussetzungen
Keine Angabe
Fortsetzungsmöglichkeiten
Keine Angabe
Literatur
  • John L. Hennessy und David Patterson: Rechnerorganisation und -entwurf
  • Andrew S. Tanenbaum und Todd Austin: Rechnerarchitektur
  • Ben Clemens: 21st Century C
  • Bjarne Stroustrup: Einführung in die Programmierung mit C++
  • Bjarne Stroustrup: Die C++-Programmiersprache
  • Bjarne Stroustrup: A Tour of C++
  • Clemens Valens: Mikrokontroller verstehen und anwenden
  • Jason D. Bakos: Embedded Systems
Hinweise
Keine Angabe