Functions and formatted printing of time and date for RTC8563

Dependencies:   mbed

You are viewing an older revision! See the latest version

Klasse Date von RTC8563 ableiten

Table of Contents

  1. Klasse Date
  2. Aufgabe

Inhalt

Das UML Diagramm zeigt die Ableitung der Klasse Date von der Basisklasse RTC8563

/media/uploads/bulmecisco/uml_date.jpg

Klasse Date

Die Klasse Date erbt alle Membervariable (i2c) und Methoden (rtc_read, ...) von der Basisklasse RTC8563:

Klassendeklaration in einer Header-Datei Date.h:

#include "mbed.h"
#include "const.h"
#include "RTC8563.h"

#ifndef DATE_H
#define DATE_H
class Date : public RTC8563
{
private:
    uint8_t bcdToUint(uint8_t const nybbles);
public:
    uint8_t GetDay();
};

#endif
  1. Es werden die notwendigen Header-Dateien mit den Praeprozessor-Direktiven inkludiert. (Zeile 1 bis 3)
  2. Ist die Konstante DATE_H nicht definiert, liefert diese Direktivet 1 zurück, DATE_H wird definiert (Zeile 6) und der Code wird inkludiert bis zum #endif in Zeile 15, sonst nicht. Somit wird die Klassendeklaration nur einmal vom Praeprozessor im Projekt eingebunden. Zeile 5 und 15
  3. Erzeugung neuer Klassen: In Zeile 7 erfolgt die Deklaration der Klasse Date abgeleitet von der Klasse RTC8563 mittels ":" und public.
  4. In Zeile 10 erfolgt die Deklaration der Methode (Prototyping) bcdToUint, privat also nur innerhalb der Klasse sichtbar.
  5. In Zeile 12 erfolgt die Deklaration der öffentlichen Methode (Prototyping) GetDay, public also im ganzen Programm sichtbar.
  6. Die Klassendeklaration wird mit } und einem Strichpunkt (;) abgeschlossen.

Klassendefinition bzw. die Definition der Methoden in der Source-Datei Date.cpp:

#include "mbed.h"
#include "const.h"
#include "Date.h"

uint8_t Date::bcdToUint(uint8_t const nybbles) // Wandelt BCD-Wert in Integer um
{
    uint8_t result;
    result = (nybbles >> 4) * 10 + (nybbles & 0x0F);
    return result;
}

uint8_t Date :: GetDay()
{
    uint8_t s = rtc_read(DAYS);
    return bcdToUint(s&0x3F);
}
  1. Es werden wieder die notwendigen Header-Dateien mit den Praeprozessor-Direktiven inkludiert. (Zeile 1 - 3)
  2. Erzeugung neuer Methoden: In Zeile 5 erfolgt die Definition der Methoden mittels Scope-Operator (::) für die entsprechende Klasse (hier: Date :: bcdToUint()) und in Zeilen 7 - 9 steht der auszuführende Code.
  3. In den Zeilen 12 bis 16 wird die öffentliche Methode (steht in der Klassendeklaration in Date.h) GetDay() definiert.

Hauptprogramm in der Source-Datei main.cpp:

int main()
{
    Date rtc;  // instanziieren des Objektes rtc
 
    pc.printf("Day: %i\n", rtc.GetDay());
  1. Es werden wieder die notwendigen Header-Dateien benötigt (nicht angezeigt)
  2. Instantiierung der Klasse: in Zeile 11 wird in main() ein Objekt karel der Klasse de_Bertl erzeugt (instatiiert).
  3. Aufruf der Befehle mittels Objektname (karel) einem Punkt (".") und dem Methodennamen (Bewege) den runden Klammern () und einem ";" zum Trennen weiterer Befehle. Zeile 13-15

Aufgabe

  • Task_Date: Erweitern Sie die Date-Klasse nach folgendem UML-Diagramm um die Mehtoden GetMonth und GetYear. Überprüfen Sie mit der Abbildung Register organisation die UND-Verküpfungen, sodass nicht falsche Werte zurück gegeben werden.

/media/uploads/bulmecisco/uml_date_aufgabe.jpg


All wikipages