balluff2019-09ch
Dienstag 2019-09-10
- Mini-Beispiele vom Anfang des Kapitels 2
http://coliru.stacked-crooked.com/a/b24aeb58fce294af - Beispiel mit Online-Compiler: OOP mit C
http://coliru.stacked-crooked.com/a/284a0c7cb5d67972 - Aufgabe: Schrittweise umstellen auf C++-Klasse
http://coliru.stacked-crooked.com/a/d2b43b41c0dca64b
Mittwoch 2019-09-11
- Aufgabe: Unterschied überladene Funktion und Defaultwert
http://coliru.stacked-crooked.com/a/2c89f5f54a629bd4
https://godbolt.org/z/ImWOc7 (Assembler Vergleich) - Beispiele für Array-Initialisierung (C++98 und C++11)
http://coliru.stacked-crooked.com/a/a8303b6a99752ca3 - Beispiele zur Verwendung von `const`:
http://coliru.stacked-crooked.com/a/e339651878d7d2cf - Vergleich Zeiger und Referenzen
https://godbolt.org/z/aMODvi
Donnerstag 2019-09-12
- Beispiel mit über Zeiger verbundener Zählerkette
http://coliru.stacked-crooked.com/a/4903f62552c21cfe - Beispiel mit über Referenz verbundener Zählerkette
http://coliru.stacked-crooked.com/a/5e4c57b98a99be53
http://coliru.stacked-crooked.com/a/55a6bd393f6e1d4c (versteckter Fehler!!) - Anwendung des NVI-Idiom (Non-Virtual Interface aus "101 C++ Style-Guides")
http://coliru.stacked-crooked.com/a/547c544996213c56 (Loesung 1 - nur für count())
http://coliru.stacked-crooked.com/a/81047a7b23669086 (Loesung 2 - auch für reset()) - Beispiel: `NamedInt`-Klasse im Vergleich mit direkter Ausgabe
http://coliru.stacked-crooked.com/a/112196b8fae27e41 - Beispiel: `NamedInt` und `NamedFloat` "copy&paste"-Programmierung
http://coliru.stacked-crooked.com/a/7cb6fd1f52230cd5 - Beispiel: `NamedVar`-Klassen-Template
http://coliru.stacked-crooked.com/a/ef10c4290f884e0b - Beispiel aus Kapitel 8 (Kopplung von Architktur-Schichten)
http://coliru.stacked-crooked.com/a/5c206e753d936b0e - Variante mit Referenz von Architektur-Komponente 1 zu Architektur-Komponente 2
http://coliru.stacked-crooked.com/a/eab163a8479d25b4
Freitag 2019-09-13
- State-Machine Beispiel aus Kapitel 9
http://coliru.stacked-crooked.com/a/2f981d33d3ed8556
Abschluss-Übung:
- Nehmen Sie die notwendigen Ergänzungen vor (an der Exercise_Template_5 oder dem letzten Stand Ihrer bisherigen Lösung) um den Timer-Interrupt an die `update`-Funkion der `Clock_Application` zu knüpfen
- ODER gehen Sie direkt in die Musterlösung und beantworten Sie unter Zuhilfenahme der Aufgabenbeschreibung die folgenden Fragen:
- Welche Klasse implementiert das Callback-Interface, über das der Sekundentakt an die beiden Clocks weitergereicht wird (unter Nutzung von deren Interface `I_Clock`)?
- Welche Struktur (in welchem Header-File) beschreibt das Register-Layout, das zur Konfiguration des Timers (Faktor für den Frequenzteiler festlegen) sowie den Start und Stopp dieses Timers dient?
- An welcher Hardware-Adresse sind die Register des verwendeten Timers abgebildet?
- Wo wird diese Adresse zunächst als Hexadezimal-Wert vorliegenden per Cast-Operation zu einem Zeiger gemacht?
- Durch Setzen oder Löschen welcher Bits an welcher Adresse wird
- der Timer gestartet?
- der Timer gestoppt?
- Welche Funktion wird direkt vom Interrupt-Controller jede Sekunde aufgerufen?
Hinweis: Sie sehen im Projekt nur deren Definition(!) und NICHT deren Aufruf, da letzterer per Hardware und NICHT aus dem Programm heraus erfolgt.- Warum ist diese Funktion in C implementiert?
- Könnte man sie auch als Member-Funktion eine Klasse implementieren?
- Wenn ja, wie und warum?
- Wenn nein, warum nicht?
- Wie geht es nach Aufruf dieser ersten Funktion (direkt durch die Hardware) weiter, bis diese schließlich nach Update aller Zähler in den beiden Clocks inkl. der eventuellen Ausgabe eines Alarms wieder zurückkehrt und die Interrupt-Bearbeitung endgültig abgeschlossen ist?
- Fortgeschrittene Frage - nur für diejenigen Teilnehmer, welche den gesamten Vorgang der Interrupt-Behandlung auch HARDWARE-nah nachvollziehen wollen, (z.B. um den Overhead gegenüber einer extrem "sparsamen" Lösung abzuschätzen, bei welcher der Interrupt-Handler direkt einen Zähler in einer globalen Variablen inkrementiert):
- Wie oft muss der Maschinen-Code einen Zeiger im Speicher auslesen um weiter zu kommen bis zu der Stelle, an der schließlich der Sekundenzähler einer Uhr hochgezählt wird?
- Wer sehr fleißig sein will und noch viel Zeit zur Verfügung hat, kann dazu ggf. auch eine Handskizze dazu anfertigen. Berücksichtigen Sie dabei
- dass ein Zeiger auf ein Interface immer auf ein real vorhandenes Objekt einer Klasse zeigt, welches dieses Interface implemeniert;
- dass eine Klasse, die virtuelle Member-Funktionen hat, einen Zeiger enthält, welcher auf eine Einsprung-Tabelle (VMT) zeigt;
- dass die VMT wiederum (nur) die Adressen im Maschinen-Code enthält, auf die der Program-Counter zu Beginn dieser Funktion zeigen muss. (Zuvor müssen noch wichtigeCPU-Register gesichert werden, wozu neber dem vorherigen Wert des Program-Counters auch der aktuelle Stack-Pointer gehört, damit bei Rückkehr aus der Funktion hinter deren Aufruf fortgesetzt werden kann.)
ENDE der Übung.
Weiterhin noch etwas "auf Vorrat" vorbereiteter aber bislang nicht besprochener Stoff:
- Einfacher RingBuffer (als praktischer Anwendungsfall für Templates)
coliru.stacked-crooked.com/a/9b94c197839ea25e (mit festem Typ und fester Größe)
coliru.stacked-crooked.com/a/2ae3449f77639d25 (Typ und Größe generalisiert mit Template) - Operation für alle existierenden Objekte einer Klasse ausführen (als praktischer Anwendungsfall für `static` Member Daten und Funktionen)
coliru.stacked-crooked.com/a/e98fee31f0900cf0 (nur für festgelegten Typ: `int`)
coliru.stacked-crooked.com/a/e7d9018ba7d98138 (Typ generalisiert mit Template)
coliru.stacked-crooked.com/a/f66c2ee9ff907a60 (Code-Duplizierung vermieden)
ARBEITSBEREICH
(Coliru-Links die nicht verloren gehen sollen, falls der Browser versehentlch geschlossen wird)
http://coliru.stacked-crooked.com/a/c76dcd2c247a19db
http://coliru.stacked-crooked.com/a/7017b90de792c8ae
Beispiele zum "weg-casten" von `const`
http://coliru.stacked-crooked.com/a/5e265a9014b22f59
http://coliru.stacked-crooked.com/a/184decb988d58b3b
http://coliru.stacked-crooked.com/a/d69f3a58cd9c5999
http://coliru.stacked-crooked.com/a/2beaeeb6c2230932