Performance-Test der Klasse RS232 mittels AVR-Simulator und Vergleich der Größe der Maschinenprogramme miteinander
- Um im Cycle-Counter zu sehen,wieviele Taktzyklen zum Senden einer 8-Bit-Zahl benötigt werden, muß
die Warteschleife auskommentiert werden, die darauf wartet, dass der Sendepuffer frei wird:
- //while( !(UCSRA & (1<<UDRE)) );
- performance.zip enthält noch einmal alle vier untersuchten Projekte und jedes Projekt noch einmal mit dem Zusatz _zeichen, wo für den Performancetest die Auskommentierung vorgenommen wurde.
|
performance.zip - Download aller nachfolgend beschriebenen Projekte
Projektname |
Beschreibung |
Größe .hex-File in Byte |
Anzahl Taktzyklen, um eine 8-Bit-Zahl in Zeichen zu senden |
rs232_senden |
Prozedurale Variante zum Senden von 8-Bit-Zahlen, alles in main-Methode. |
1347 |
363 |
rs232_senden_funktion |
Prozedurale Variante unter Verwendung von Funktionen. |
1617 |
399 |
rs232_senden_makro |
Prozedurale Variante unter Verwendung eines Makros, das wie eine Funktion verwendet werden kann. |
1425 |
351 |
rs232_oop_senden |
Objektorientierte Variante mit "aufwändigem" Konstruktor und ohne Vererbung |
1478 |
335 |
rs232_oop_senden_erben |
Objektorientierte Variante mit einfachem Konstruktor und mit Vererbung |
1494 |
335 |
rs232_oop_senden_statisch |
Objektorientierte Variante mit statischen Methoden und Vererbung |
1494 |
335 |
rs232_oop_senden_statisch2 |
wie zuvor, jedoch wird hier kein Aufruf keiner Unterfunktion in sendeZahl(...) vorgenommen. |
1486 |
335 |
rs232_oop_senden_statisch3 |
wie rs232_oop_senden_statisch, jedoch werden wie bei der prozeduralen Varaiante die Ziffern vorberechnet und in den Variablen l, m, r gespeichert. |
1494 |
337 |
Tabelle 0-1: Vergleich der prozeduralen Variante zum Senden von 8-Bit-Zahlen mit drei objektorientierten Varianten.
Fazit
- Den geringsten Speicherplatz verbraucht die Variante, die nur aus einer main-Methode besteht.
- Jedoch variiert der Speicherplatzbedarf gar nicht so stark: Maximum=Variante mit C-Funktionen 100% , Minimum=Variante mit main-Methode 83%, kleinste C++-Varianten: 91%
- Das Kompilat der C++-Programme ist generell performanter, d.h. schneller, als alle C-Kompilate.
- Ob mit statischen Methoden oder Vererbung gearbeitet wird, oder nicht, spielt sowohl für den Speicherbedarf, als auch für die Performance kaum eine Rolle.
- Das Inlinen von Unterfunktionsaufrufen bringt überraschenderweise gar keine Perfortmance-Verbesserung.
- Der C++-Compiler arbeitet sehr effizient und hat keinerlei Einbußen gegenüber dem C-Compiler und wird deshalb für die weiteren Projekte bevorzugt verwendet.
|