Die Klasse HardwareSerial ist für das Ausgeben und Einlesen von Daten über die in den ATmega integrierten UARTs zuständig. Für die in Stream und Print deklarierten abstrakten Methoden werden hardwarespezifisch implementiert. Über HardwareSerial.cpp werden außerdem Objekte für jede vorhandene UART angelegt. Dieses heißt ist im Regelfall Serial. Existieren weitere Schnittstellen werden diese mit Serial1, Serial2, usw. angelegt.
Die Ansteuerung der Hardware erfolgt interruptgetrieben. Zur Zwischenpufferung der Daten wird sowohl ein Empfangspuffer als auch ein Sendepuffer von jeweils 64 Byte angelegt (Beträgt die Größe des SRAM weniger als 1000 Byte wird nur jeweils 16 Bytes große Puffer genutzt).
Methoden | |||
constructor | HardwareSerial
(ring_buffer *rx_buffer, ring_buffer *tx_buffer, volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, volatile uint8_t *ucsra, volatile uint8_t *ucsrb, volatile uint8_t *ucsrc, volatile uint8_t *udr, uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x) |
Initialisiert eine neune Instanz der Klasse HardwareSerial. Übergeben werden Pointer auf die angelegten Puffer, die Adressen der entsprechenden UART-Register und die Position diverser Control-Bits innerhalb der Register. | In HardwareSerial.cpp wird für jede vorhandene UART ein entsprechendes Pufferpaar angelegt. Ein Pointer auf diese Puffer (struct ring_buffer) wird bei der Anlage der Serialx-Objekte übergeben. |
void | begin (unsigned long baud) | Initialisiert die Schnittstelle mit der angegebenen Baudrate und der Konfiguration 8N1. | Sendefunktion, Empfangsfunktion
und die zugehörigen Interrupts werden freigegeben. Siehe auch Arduino-Referenz |
void | begin (unsigned long baud, byte config) | Initialisiert die Schnittstelle mit der angegebenen Baudrate und der angegebenen Konfiguration. Die sinnvollen Konfigurationen stehen als vorbelegte Konstanten zur Verfügung (SERIAL_5N1...SERIAL_8O2). | s.o. |
void | end () | Beendet die Übertragung und gibt die Übertragungs-Pins zur Nutzung als allgemeine IO-Pins frei. | Wartet ab, bis der Sendepuffer geleert ist
und schaltet dann die Sendefunktion, Empfangsfunktion und die Interrupts
ab. Löscht den Empfangspuffer. Siehe auch Arduino-Referenz |
virtual int | available () | Liefert die Anzahl Bytes, die aktuell eingelesen werden können, also bereits gepuffert wurden. | Siehe auch Arduino-Referenz |
virtual int | read () | Liest ein Byte aus dem Puffer und liefert es zurück. Der Rückgabewert -1 signalisiert, dass das aktuell keine Daten zur Verfügung stehen. | Diese Funktion muss von einer auf die
Hardware zugeschnitten Klasse überschrieben werden. Siehe auch Arduino-Referenz |
virtual int | peek () | Liest ein Byte aus dem Stream ohne es zu entfernen. Ein mehrfaches Aufrufen von peek() liefert immer das gleiche Ergebnis, das auch ein Aufruf von read() liefern würde. Der Rückgabewert -1 bedeutet, dass kein Zeichen zum auslesen vorhanden ist. | Siehe auch Arduino-Referenz |
virtual int | write (uint8_t c) | Übergibt ein Byte in den Sendepuffer und startet die Übertragung. Der Rückgabewert ist 1. | Ist der Puffer voll, wird gewartet,
bis wieder ein Byte frei ist. Siehe auch Arduino-Referenz |
inline size_t | write (unsigned long n) | Das letzte Byte von n wird als uint8_t behandelt. | Vorsicht mögliche Seiteneffekte: Konterkariert die C++-Typ-Prüfung! |
inline size_t | write (long n) | s.o . | s.o. |
inline size_t | write (unsigned int n) | s.o. | s.o. |
inline size_t | write (int n) | s.o. | s.o. |
operator | bool | Zeigt an, ob die angegebene serielle
Schnittstellebereit ist. Bei einem Leonardo zeigt if (Serial) an, ob die USB CDC Serial Connection geöffnet ist. In allen anderen Fällen, einschließlich |
|
virtual void | flush () | Löscht alle Puffer für diesen Stream und veranlasst die Ausgabe aller gepufferten Daten an das zugrunde liegende Gerät. | Diese Funktion muss von einer auf die
Hardware zugeschnitten Klasse überschrieben werden. Siehe auch Arduino-Referenz |
Siehe auch:
Klasse
Print
Klasse Stream
Arduino-Referenz
Arduino-Anatomie: How
to Print!?