kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

8.5.6 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 8.5.6-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.