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:20] beckmanf [prime] host |
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 144: | Line 142: | ||
</code> | </code> | ||
- | finden. Sie sehen die "cortex_m5delay" Funktionen. Das sind die Aufrufe. Nehmen Sie dann die Delayaufrufen wieder aus dem Code. Die Loop sollte jetzt kürzer sein. Erläutern Sie den Code, der den Pin 15 an- und ausschaltet. | + | finden. Sie sehen die "cortex_m5delay" Funktionen. Das sind die Aufrufe für die delay Funktion. Nehmen Sie dann die Delayaufrufe wieder aus dem Code. Die Loop sollte jetzt kürzer sein. Erläutern Sie den Code, der den Pin 15 an- und ausschaltet. |
==== Vergleich RP2040 Datenblatt ==== | ==== Vergleich RP2040 Datenblatt ==== | ||
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? | ||