PTI06830 – Machine-/system-level programming

Module
Machine-/system-level programming
Hardwarenahe Programmierung
Module number
PTI06830
Version: 1
Faculty
Physikalische Technik / Informatik
Level
Bachelor
Duration
1 Semester
Semester
Summer semester
Module supervisor

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

Lecturer(s)

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

Course language(s)

German - 95.00%
in "Hardwarenahe Programmierung"

English - 5.00%
in "Hardwarenahe Programmierung"

ECTS credits

5.00 credits

Workload

150 hours

Courses

4.00 SCH (2.00 SCH Vorlesung | 2.00 SCH Internship)

Self-study time

90.00 hours
30.00 hours Vor-/Nachbereitung - Hardwarenahe Programmierung
60.00 hours Self-study - Hardwarenahe Programmierung

Pre-examination(s)

Attestation
in "Hardwarenahe Programmierung"

Examination(s)

mündliche Prüfungsleistung
Module examination | Examination time: 20 min | Weighting: 100%
in "Hardwarenahe Programmierung"

Media type
No information
Instruction content/structure
  • 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)
Qualification objectives

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).

Special admission requirements

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

Recommended prerequisites
No information
Continuation options
No information
Literature
  • 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
Notes
No information