[[dtlab_t11]]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dtlab_t11 [2025/06/01 20:15]
beckmanf [blinky] Wifi
dtlab_t11 [2025/06/02 15:28] (current)
beckmanf [Analyse des Assemblercodes] pfad
Line 54: Line 54:
 ==== prime ==== ==== prime ====
  
-Das Projekt "​prime"​ enthält ein Programm zur Suche nach Primzahlen. Wechseln Sie in das Verzeichnis "​picofirst/​prime"​. Sie können das Programm direkt mit+Das Projekt "​prime"​ enthält ein Programm zur Suche nach Primzahlen. Das Programm soll nicht auf dem Pi Pico, sondern auf dem Host - also ihrem Rechner oder dem Laborrechner - ausgeführt werden. Wechseln Sie in das Verzeichnis "​picofirst/​prime"​. Sie können das Programm direkt mit
  
 <​code>​ <​code>​
Line 60: Line 60:
 </​code>​ </​code>​
  
-starten. Das Programm in [[https://​caeis.etech.fh-augsburg.de/​beckmanf/​picofirst.git/​tree/​prime/​src/​main.rs|main.rs]] sucht die nächstkleinere Primzahl ​ausgehende ​von einer Zahl, die im Programm festgelegt ist. Die Zahl n ist "​1<<​56"​ = 2^56 = 72057594037927936. Sie sollten auf dem Terminal eine ähnliche Ausgabe wie diese sehen:+starten. Das Programm in [[https://​caeis.etech.fh-augsburg.de/​beckmanf/​picofirst.git/​tree/​prime/​src/​main.rs|main.rs]] sucht die nächstkleinere Primzahl ​ausgehend ​von einer Zahl, die im Programm festgelegt ist. Die Zahl n ist im Code im Repository auf "​1<<​56"​ = 2^56 = 72057594037927936 ​festgelegt. Sie sollten auf dem Terminal eine ähnliche Ausgabe wie diese sehen:
  
 <​code>​ <​code>​
Line 72: Line 72:
 </​code>​ </​code>​
  
-Das Programm dient dazu eine etwas Berechnung durchzuführen,​ die etwas länger dauert. Starten Sie das Programm einige Male und notieren Sie die Ausführungszeiten. In "​blinky"​ ist die Suchfunktion ​auch schon integriert, aber noch nicht aktiv.+Das Programm dient dazu eine Berechnung durchzuführen,​ die etwas länger dauert. Starten Sie das Programm einige Male und notieren Sie die Ausführungszeiten. In "​blinky"​ ist diese Primzahlensuchfunktion ​auch schon integriert, aber noch nicht aktiv.
  
 Kompilieren Sie das Programm jetzt im "​Release"​ Modus. Damit wird der Rustcompiler eine höhere Codeoptimierung durchführen. Kompilieren Sie das Programm jetzt im "​Release"​ Modus. Damit wird der Rustcompiler eine höhere Codeoptimierung durchführen.
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?​
  
  
  
  
  • dtlab_t11.1748801703.txt.gz
  • Last modified: 2025/06/01 20:15
  • by beckmanf