kramann.info
© Guido Kramann

Login: Passwort:










1.6 Basiskonzept für die objektorientierte Programmierung des ATmega32

Forderungen

Wiederverwendbarkeit: Reibungsfreies Zusammenarbeiten

  • Bei Mikrocontroller-Programmen greifen viele Programmteile auf die integrierte Peripherie des Mikrocontrollers zu.
  • Beispiele für diese Peripherie sind die A/D-Wandler, die RS232-Schnittstelle, Timerfunktionen etc.
  • Es ist dabei wichtig zu gewährleisten, dass diese Programmteile reibungsfrei zusammenarbeiten.

Reversibilität: Zurücksetzen von Einstellungen

  • Timer können z.B. sowohl benutzt werden, um PWM-Signale zu erzeugen, als auch dazu die Dauer von Ereignissen zu stoppen.
  • Manchmal ist es erforderlich Ressourcen dieser Art auf mehrfache Weise in einer bestimmten zeitlichen Abfolge zu benutzen.
  • Wie eine Ressource benutzt wird, wird über Registereinstellungen auf dem Mikrocontroller gesteuert.
  • Ein sinnvolles Konzept sollte die Möglichkeit vorsehen, diese Registereinstellungen nach Verwendung einer Ressource auch wieder zurücksetzen zu können.

Transparenz: Einblick in die innere Konfiguration

  • Im Gegensatz zum PC besitzen Mikrocontroller keinen Bildschirm, an dem alle Systemeinstellungen eingesehen werden können.
  • Eine Alternative bietet die RS232-Schnittstelle des ATmega32.
  • Diese kann genutzt werden, Daten an eine PC-Konsole zu schicken.
  • Insbesondere können beim Starten des Mikrocontroller Angaben über die verwendeten Ressourcen / Peripherie gesendet werden.
  • Das entspricht in etwa der Rückmeldung bei einem Bootvorgang am PC.
Umsetzung

Wiederverwendbarkeit: Verwendung von Klassen

  • Grundsätzlich bietet die objektorientierte Programmierung bessere Möglichkeiten an, Teilprogramme voneinander zu kapseln und gegenseitige Störungen zu vermeiden.
  • Eine große Gefahr geht in der prozeduralen Programmoierung von globalen Variablen und Funktionen aus.
  • Werden zwei Programmteile getrennt entwickelt, wie die Verwendung der RS232-Schnittstelle und die des AD-Wandlers, erfordert es Mühe beide prozeduralen Programme miteinander zu verschmelzen, wenn man beide Features gleichzeitig einsetzen will.
  • Methoden und Attribute in Klassen sind eindeutig den von der Klasse gebildeten Objekten zugeordnet.
  • Bei konsequenter Anwendung der OOP können somit solche Schwierigkeiten nicht auftreten.
  • Die Konfiguration des Mikrocontrollers und die Verwendung einzelner Peripherie soll deshalb in Klassen mit entsprechenden Methodne verborgen werden.
  • Darüberhinaus kann eine spezielle Klasse PinWatchdog dazu eingesetzt werden, Konflikte bei Pinbelegungen zu überprüfen.

Reversibilität: start- und stop-Methoden

  • Der derzeitige Compiler ist nicht in der Lage Objekte dynamisch zu erzeugen und wieder zu zerstören, wenn sie nicht gebraucht werden.
  • Hier wäre auch der Speicherbedarf nicht immer vorhersehbar und es kann zu Programmabstürzen durch Speicherüberschreitung kommen.
  • Der benötigte Speicher für alle benötigten Variablen und Objekte sollte deshalb beim Start festgesetzt werden.
  • Statt dessen soll die notwendige Konfiguration und deren Zurücksetzung durch eine start- und eine stop-Methode realisiert werden, die nach Erzeugung eines Objektes für dieses beliebig oft benutzt werden können.
  • Sa kann eine Objekt der Klasse Timer2PWM und eines der Klasse Timer2Stopuhr im Wechsel benutzt werden.

Transparenz: Konstruktoren schicken Informationen an den PC

  • Jede Klasse soll einen Konstruktor haben, dem ein Zeiger auf ein Objekt vom Typ RS232 übergeben werden kann.
  • Wird dieser Konstruktor ausgewählt, so soll das entstehende Objekt Auskünfte über sich an den PC erteilen, z.B.:
  • Welche Funktion hat das Objekt, Welche Pins werden benutzt, welche Teilerrate für einen Timer wurde eingestellt.
UML Klassendiagramm
  • Mit UML ist es u.a. möglich Klassen unabhängig von der Programmiersprache grafisch darzustellen.
  • Eine Klasse hat einen Namen und beinhaltet Methoden und Attribute.
  • Genau dies ist in den drei übereinanderliegenden Kästen des UML-Klassendiagramms zu sehen.
  • Und wir finden die oben beschriebenen Elemente hierin wieder.
UML-Klassendiagramm

Bild 1.6-1: UML-Klassendiagramm für den Entwurf einer geeigneten Klassenstruktur bei allen verwendeten Klassen.