Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| dtlab_t11 [2025/06/01 20:09] – created beckmanf | dtlab_t11 [2025/10/08 13:12] (current) – [Ausführung Primzahlensuche] typo beckmanf | ||
|---|---|---|---|
| Line 4: | Line 4: | ||
| ===== Aufgabenstellung ===== | ===== Aufgabenstellung ===== | ||
| - | Bei diesem Thema untersuchen Sie wie schnell der ARM Cortex M0 auf dem Raspberry Pi Pico arbeitet. Dazu wird der Ausgang an einem GPIO geändert und die Änderung wird mit dem Oszilloskop gemessen. Dazu kommt dann die Messung der Ausführungszeit einer Primzahlensuche auf dem RP2040 und der Vergleich mit einer Ausführung auf dem Hostsystem. | + | Bei diesem Thema untersuchen Sie wie schnell der ARM Cortex M0 auf dem Raspberry Pi Pico arbeitet. Dazu wird der Ausgang an einem GPIO geändert und die Änderung wird mit dem Oszilloskop gemessen. Dazu kommt dann die Messung der Ausführungszeit einer Primzahlensuche auf dem RP2040 und der Vergleich mit einer Ausführung auf dem Hostsystem. Der Code ist in Rust geschrieben. |
| ===== Vorbereitung ===== | ===== Vorbereitung ===== | ||
| Line 15: | Line 15: | ||
| * Installieren Sie [[https:// | * Installieren Sie [[https:// | ||
| * In Codium: [[https:// | * In Codium: [[https:// | ||
| + | |||
| + | Unter LINUX noch folgende Packages installieren: | ||
| + | |||
| + | < | ||
| + | sudo apt update | ||
| + | sudo apt install libudev-dev pkg-config | ||
| + | </ | ||
| Für Rust noch | Für Rust noch | ||
| Line 22: | Line 29: | ||
| cargo install elf2uf2-rs | cargo install elf2uf2-rs | ||
| </ | </ | ||
| + | |||
| ==== Projekt ==== | ==== Projekt ==== | ||
| Line 50: | Line 58: | ||
| Auf dem Pi Pico sollte jetzt die LED blinken. | Auf dem Pi Pico sollte jetzt die LED blinken. | ||
| - | Die blinkende LED dient zur Überprüfung, | + | Die blinkende LED dient zur Überprüfung, |
| ==== prime ==== | ==== prime ==== | ||
| - | Das Projekt " | + | Das Projekt " |
| < | < | ||
| Line 60: | Line 68: | ||
| </ | </ | ||
| - | starten. Das Programm in [[https:// | + | starten. Das Programm in [[https:// |
| < | < | ||
| Line 72: | Line 80: | ||
| </ | </ | ||
| - | Das Programm dient dazu eine etwas Berechnung durchzuführen, | + | Das Programm dient dazu eine Berechnung durchzuführen, |
| Kompilieren Sie das Programm jetzt im " | Kompilieren Sie das Programm jetzt im " | ||
| Line 108: | Line 116: | ||
| * Ä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 126: | ||
| </ | </ | ||
| - | den Assemblercode generieren lassen. Der Assemblercode ist im Verzeichnis target/ | + | den Assemblercode generieren lassen. Der Assemblercode ist im Verzeichnis target/ |
| - | < | ||
| - | target/ | ||
| - | </ | ||
| Ö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 150: | ||
| </ | </ | ||
| - | finden. Sie sehen die " | + | finden. Sie sehen die " |
| ==== Vergleich RP2040 Datenblatt ==== | ==== Vergleich RP2040 Datenblatt ==== | ||
| Line 166: | Line 172: | ||
| * Verändern Sie die Werte für die Zahl n, messen Sie die Highphasen am Oszilloskop und notieren Sie die Zeiten | * Verändern Sie die Werte für die Zahl n, messen Sie die Highphasen am Oszilloskop und notieren Sie die Zeiten | ||
| * Erstellen Sie einen Graphen, der die Ausführungszeit gegen die Zahl n darstellt. | * Erstellen Sie einen Graphen, der die Ausführungszeit gegen die Zahl n darstellt. | ||
| - | * Vergleichen Sie den Graphen mit den Überlegungen aus Vorbereitung für " | + | * Vergleichen Sie den Graphen mit den Überlegungen aus der Vorbereitung für " |
| * 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 " | ||
| + | |||
| + | * 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? | ||