FSST - Hardwarenahe Programmierung

Aufgaben Vererbung

Klasendesign und Konstruktor

1. Schreiben Sie die Klasse DigitalOut (siehe DigitalOut.h) auf Deutsch um :

/media/uploads/fpucher/digitalaus_.jpg

Lösung?

2. Fügen Sie der von DigitalOut abgeleiteten Klasse DigitalAus die Operation blink10Mal() hinzu, sodass die Led 10 Mal im Abstand von 500ms ein-/ausgeschaltet wird.

  • Überladen Sie die Operation blink10Mal() so dass Sie die Zeit einstellen können.
  • Überladen Sie die Operation blink10Mal() ein weiteres Mal so dass Sie zur Zeit auch die Blinkanzahl einstellen können.
  • Zeichnen Sie ein UML Diagramm. Lösung?

Siehe auch Neue Methoden hinzufügen und überladen

3. Schreiben Sie eine Klasse MyTimer die abgeleitet wird von der Timer-Klasse und benennen Sie alle Methoden so um, dass sie mit großem Anfangsbuchstaben beginnen. Testen Sie Ihre MyTimer-Klasse, indem Sie ein MyTimer-Objekt tm erzeugen, mit tm.Start() den Timer starten und mit tm.Stop() anhalten und das Ergebnis mit tm.CheckTimerMS() auf die serielle Schnittstelle mit pc.printf() ausgeben. (wirft im Simulator eine Exception!)

Lösung?

4. Wie unter Punkt 1. (zeichnen Sie auch das dazugehörige UML-Klassendiagramm) nur für "alle" Klassen aus Drivers, wie z.B.:

  • BusInOut, BusInOut, BusIn
  • DigitalInOut, DigitalIn
  • PortOut, PortInOut, PortIn
  • usw.

5. Erweitern Sie Klassen wie z.B. BusOut um die Operationen aus den Beispielen für Leds und Klassen

Überladen von Methoden der Basisklasse

Überschreiben von Methoden der Basisklasse

Statische Elemente

Erweitern von Methoden der Basisklasse

8. Schreiben Sie zu folgendem Hauptprogramm die entsprechende Klasse, wobe sid von BusOut abgeleitet werden soll:

Methodenaufrufe

HexLeds hexleds(LED1, LED2, LED3, LED4);
 
main() {

   hexleds.eingabe(0x05)     // konstanter Integer-Wert
   hexleds.eingabe()     // einlesen eines Integer-Wertes von der Tastatur mit scanf("%d", &ein);
   hexleds.ausgabe('L')     // ausgabe des Wertes auf --> L ...LED, H...hexadezimal, I... Integer auf Console
   hexleds.hexOut()      // Ausgabe des Wertes in Hex-Darstellung an den 4 Leds und die Console
   hexleds.printStatus() // Anzeigen ob Leds ein oder aus
   hexleds.printStatus(1) // Anzeigen ob Led 1 (bzw. 2, 3, 4) ein oder aus
}

9. Erweitern Sie bestehende Operationen um die Funktion des Debuggens, in dem Sie bei Aufruf einer Operation z.B. die Operation bzw. den Wert eines Parameters mit printf() auf die Konsole schreiben. (Siehe Debugginfo auf LCD-Display C12832)

Example DigitalOut/write

    void write(int value) {
        printf("deb.write: %d", value);
        DigitalOut::write(value);
    }

10. Erweitern Sie die Klasse DigitalOut (siehe DigitalOut.h) um das Argument zustand, dass den aktuellen Wert des Output-Pins zwischenspeichern soll. Überladen Sie die Operation read() so, dass der gpio-Wert zurückgegeben wird und in einem neuen Parameter der Wert des Arguments zustand. Überladen Sie die Operation write() so, dass auch der zustand entsprechend gesetzt wird. Überladen Sie den Konstruktor so, dass zusätzlich zum Pinnamen auch das Argument zustand auf einen bestimmten Wert gesetzt werden kann. Überladen Sie den Operator = sodass eine Zuweisung wie z.B. eine Invertierung (led=!led;) möglich ist. Berücksichtigen Sie auch hier das Argument zustand.


All wikipages