Probeklausur 5 - Lösungen
Zurück zu den Aufgaben · Formelsammlung
Teilpunkte für erkennbaren Rechenweg auch bei Zahlenfehler.
Aufgabe 1 - Systemstart, Thumb & APCS (16 P) [Kap. 11]
1.1 Reihenfolge:
- Interrupt-Controller initialisieren
- Vektortabelle Flash nach RAM kopieren
- Remapping (RAM über Adresse 0)
- Stacks je Modus setzen
- BSS/Variablen initialisieren
- Sprung nach
main()
Warum Remapping: Beim Reset startet die CPU bei 0x00000000; dort muss nicht-flüchtiger Speicher (ROM/Flash) mit dem ersten Code liegen. Im Betrieb möchte man an Adresse 0 aber RAM, damit die Vektortabelle veränderbar ist. Der Memory-Controller (EBI) blendet daher nach dem Start den RAM über Adresse 0 ein.
1.2 Thumb ≈ 65 % von 8 KByte → ca. 5,2 KByte. Vorteil: höhere Codedichte (weniger Speicher, energieeffizienter bei 16-Bit-Speicher). Nachteil: eingeschränkter Befehlssatz (meist nur R0-R7, keine bedingte Ausführung außer Sprüngen), auf 32-Bit-Speicher langsamer. (Thumb-2 beim Cortex-M3 hebt die meisten Einschränkungen auf.)
1.3 Die ersten vier Argumente stehen in den Registern R0-R3, weitere werden über den Stack übergeben. Der Rückgabewert steht in R0; die Rücksprungadresse im Link Register (R14/LR).
1.4 Zwei von: Startup-Code, Context-Switch im Betriebssystem, zeitkritische ISR, extreme Optimierung, Verstehen/Prüfen von Compiler-Ausgaben.
Aufgabe 2 - Power Management (12 P) [Kap. 2]
2.1 Nicht genutzte Peripherie muss nicht getaktet werden. Der dynamische Stromverbrauch wächst mit der Taktfrequenz (); das Abschalten ungenutzter Peripherietakte spart daher elektrische Leistung/Energie.
2.2
PMC->PMC_PCER0 = (1u << ID_PIOB); // ID_PIOB = 12
Ohne aktiven Peripherietakt ist das Modul nicht funktionsfähig: Registerzugriffe wirken nicht bzw. das Modul reagiert nicht. Der Takt muss daher vor der ersten Nutzung eingeschaltet werden.
2.3 Sleep/Wait: nur der CPU-/System-Teil wird angehalten, Peripherie und RAM bleiben versorgt → sehr schnelles Aufwachen und Zustandserhalt, aber höherer Reststrom. Backup: fast alles ist abgeschaltet (nur eine kleine Backup-Region bleibt aktiv) → minimaler Stromverbrauch, aber langes Aufwachen (reset-ähnlicher Wiederanlauf) und Verlust des normalen RAM-Zustands. Kompromiss: Stromersparnis gegen Aufwachzeit/Zustandserhalt.
Aufgabe 3 - SPI & DMA/PDC (14 P) [Kap. 4]
3.1 Leitungen: MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Takt), SS/CS (Slave/Chip Select). Unterschiede zu I²C (zwei genügen): SPI ist Vollduplex (getrennte MOSI/MISO), I²C halbduplex (eine SDA); SPI adressiert per Chip-Select-Leitung statt per 7-Bit-Adresse; SPI ist meist schneller, braucht aber mehr Leitungen.
3.2 8 Byte = 64 Bit. Bei SCK = 2 MHz dauert ein Bit → .
3.3
USART1->US_TPR = (uint32_t) buf; // (a) Transmit Pointer = Startadresse
USART1->US_TCR = len; // (b) Transmit Counter = Anzahl Byte
USART1->US_PTCR = US_PTCR_TXTEN; // (c) PDC-Sender aktivieren
Die Hardware dekrementiert US_TCR bei jedem gesendeten Byte selbstständig; erreicht der Zähler 0, wird der Interrupt ENDTX ausgelöst. Vorteil: die CPU ist während des Transfers frei (kein Byte-für-Byte-Polling).
Aufgabe 4 - Timer-Diagramm (PWM) (18 P) [Kap. 5]
Ablesen: steigende Flanken bei 0 ms und 5 ms; High von 0 bis 2 ms.
4.1 Periode = Abstand zweier steigender Flanken = T = 5 ms.
4.2 .
4.3 High-Zeit = 2 ms; Tastverhältnis .
4.4 (≤ 65536, passt in 16 Bit).
4.5 .
4.6 .
Aufgabe 5 - Watchdog & Registerzugriff (12 P) [Kap. 1]
5.1 Der Watchdog überwacht die Programmaktivität: das Programm muss ihn regelmäßig zurücksetzen („füttern"). Bleibt das aus (Absturz, Endlosschleife), nimmt der Watchdog einen Fehler an und löst einen Reset aus.
5.2 Die Berechnung dauert länger als die Watchdog-Ablaufzeit (2 s), ohne dass der Watchdog zwischendurch zurückgesetzt wird → er löst einen Reset aus. Behebung (zwei Möglichkeiten): (1) den Watchdog innerhalb der Schleife regelmäßig zurücksetzen (füttern), sodass das Intervall stets kürzer als 2 s bleibt; (2) die Ablaufzeit passend vergrößern oder, falls nicht benötigt, den Watchdog beim Start deaktivieren (z. B. WDT->WDT_MR = WDT_MR_WDDIS).
5.3 (a) . (b)
*(volatile uint32_t *)(0x400E1000 + 0x30) = (1u << 27); // PB27 High (SODR)
Aufgabe 6 - Leitungscode-Diagramm (NRZI) (12 P) [Kap. 10]
6.1 Startpegel Low. Pegelwechsel am Bitanfang = 1, kein Wechsel = 0. Der Signalverlauf ist H, H, L, H, H, H, L; Wechsel treten am Anfang von Bit 1, 3, 4 und 7 auf →
1 0 1 1 0 0 1.
6.2 NRZI hat weniger Pegelwechsel als Manchester (dort zwei pro Bit) und braucht damit nur die halbe Bandbreite von Manchester. (Gegenüber reinem NRZ ist es robuster gegen Pegel-/Polaritätsumkehr, da nur Wechsel zählen.)
6.3 Bei einer langen Nullfolge gibt es keine Flanken → der Empfänger bekommt keine Taktinformation und kann die Bitgrenzen verlieren (Synchronisationsverlust). Gegenmaßnahme: Bit-Stuffing (nach mehreren gleichen Bits wird künstlich ein Wechsel eingefügt) bzw. ein selbsttaktender Code.
Aufgabe 7 - Regelung (16 P) [Kap. 8]
7.1 Steuerung: offener Wirkungsablauf ohne Rückmeldung - die Stellgröße wird gesetzt, das Ergebnis aber nicht gemessen (Störungen bleiben unberücksichtigt). Regelung: geschlossener Kreis - die Regelgröße wird gemessen, mit dem Sollwert verglichen und die Regeldifferenz korrigiert; damit werden Störungen ausgeglichen.
7.2 Der Zweipunktregler schaltet die Heizung ein, wenn die Temperatur unter 19 °C (20 - 1) fällt, und aus, wenn sie über 21 °C (20 + 1) steigt; dazwischen bleibt der Zustand erhalten. Die Hysterese verhindert ständiges Hin- und Herschalten (Prellen/Chattering) um den Sollwert und schont so den Aktor.
7.3 P (Proportional): Stellgröße proportional zur Regeldifferenz - schnell, lässt aber eine bleibende Regelabweichung. I (Integral): summiert die Regeldifferenz über die Zeit - beseitigt die bleibende Abweichung, macht aber träger. D (Differential): reagiert auf die Änderungsgeschwindigkeit der Regeldifferenz - dämpft/beschleunigt, ist aber rauschempfindlich. Integral-Windup: Bei anhaltender Regeldifferenz (z. B. Stellgröße in der Begrenzung/Sättigung) läuft der I-Anteil immer weiter hoch; nach Erreichen des Sollwerts muss dieser große Wert erst wieder „abgebaut" werden → starkes Überschwingen.
7.4 Eine von: Anti-Windup durch Begrenzen (Clamping) des Integrators, Anhalten der Integration in der Stellgrößen-Sättigung oder Back-Calculation (Rückführung der Begrenzungsdifferenz auf den Integrator).