Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dtlab_t11 [2025/06/01 20:22] beckmanf [Analyse des Assemblercodes] delay |
dtlab_t11 [2025/06/02 15:28] (current) beckmanf [Analyse des Assemblercodes] pfad |
||
---|---|---|---|
Line 108: | Line 108: | ||
* Ändern Sie den Pin von GP25 für die LED auf GP15 für den Pin links unten. | * Ändern Sie den Pin von GP25 für die LED auf GP15 für den Pin links unten. | ||
* Messen Sie mit dem Oszilloskop die Frequenz und das an/aus Verhältnis des Signals am Pin 15. | * Messen Sie mit dem Oszilloskop die Frequenz und das an/aus Verhältnis des Signals am Pin 15. | ||
+ | * Testen Sie "cargo run" und "cargo run --release" | ||
==== Analyse des Assemblercodes ==== | ==== Analyse des Assemblercodes ==== | ||
Line 117: | Line 118: | ||
</code> | </code> | ||
- | den Assemblercode generieren lassen. Der Assemblercode ist im Verzeichnis target/thumbv6m-none-eabi/release/deps und fängt mit dem Projektnamen "blinky" and und endet mit der Endung ".s". Z.B.: | + | den Assemblercode generieren lassen. Der Assemblercode ist im Verzeichnis target/thumbv6m-none-eabi/release/deps und fängt mit dem Projektnamen "blinky" and und endet mit der Endung ".s". Ein Pfad kann z.B. so aussehen: "target/thumbv6m-none-eabi/release/deps/blinky-cbc27bc4200d17af.s". |
- | <code> | ||
- | target/thumbv6m-none-eabi/release/deps/blinky-cbc27bc4200d17af.s | ||
- | </code> | ||
Öffnen Sie die Datei mit Codium. Die Datei enthält sehr viel Code... Finden Sie die Schleife. Fügen Sie dazu die delay Funktionen nochmal in den Code ein und kompilieren Sie nochmal. Dann sollten Sie etwas ähnliches wie das hier: | Öffnen Sie die Datei mit Codium. Die Datei enthält sehr viel Code... Finden Sie die Schleife. Fügen Sie dazu die delay Funktionen nochmal in den Code ein und kompilieren Sie nochmal. Dann sollten Sie etwas ähnliches wie das hier: | ||
Line 168: | Line 166: | ||
* Vergleichen Sie den Graphen mit den Überlegungen aus Vorbereitung für "prime" | * Vergleichen Sie den Graphen mit den Überlegungen aus Vorbereitung für "prime" | ||
* Vergleichen Sie die Ausführungszeit auf dem Pi Pico mit der Ausführungszeit auf dem Host. | * Vergleichen Sie die Ausführungszeit auf dem Pi Pico mit der Ausführungszeit auf dem Host. | ||
+ | |||
+ | ==== Direkter Registerzugriff ==== | ||
+ | |||
+ | Um die Pins ein- und auszuschalten haben wir im Code die Funktionen wie "led_pin.set_low().unwrap()" aus dem "Hardware-Abstraction-Layer" HAL verwendet. Jetzt soll direkt auf die Register geschrieben werden. Das kann mit der Funktion "write_volatile(REG, 1<<25)" gemacht werden. Die Funktion muss als "unsafe" markiert werden. Kommentieren Sie den Code für die Definition des REG Wertes und das "write_volatile" aus und ersetzten so den "led_pin.set_low()" Code. | ||
+ | |||
+ | * Ersetzten Sie led_pin.set_low() durch einen direkten Registerzugriff | ||
+ | * Prüfen Sie ob der Code noch funktioniert | ||
+ | * Schreiben Sie nun Code, der gleichzeitig GP15 und GP25 in der Loop ändert. | ||
+ | * Schreiben Sie eine Variante mit direktem Registerzugriff und eine Variante mit HAL. | ||
+ | * Gibt es einen Unterschied in der Ausführungszeit? | ||