Ein Audioplayer mit "Speki" auf dem CARME-M4-Kit unter Zuhilfenahme der diskreten Fourier Transformation. Erstellt als Projekt für das Modul BTE5053 Hardwarenahe Softwareentwicklung.
Infos über das Was?
finden sich im Pflichtenheft.
Über das Wie?
informiert das DFD und der Doxygen annotierte Quellcode.
Die Dokumentation lässt sich per Doxygen mit doxygen doc/Doxyfile
in den Ordner doc/doxygen/html
generieren.
Alternativ findet sich das aktuellste Exemplar auf GitLab-Pages.
make
- Kompilieren mit arm-none-eabi-gcc Toolchain- (optional)
make test
- statische Tests ausführen /bin/speki.bin
mit ST-LINK Utility oder STM32Cube auf das CARME-M4-Kit flashen- Geeignete Songs gemäss Anleitung erstellen und auf SD-Karte laden
- Kopfhörer oder Lautsprecher an der HEAD Buchse des CARMEs anschliessen
- Per Menü ein Song auswählen:
- Im Hauptmenü:
- Button T3: Auswahl um eine Zeile nach unten verschieben
- Button T2: Auswahl um eine Zeile nach oben verschieben
- Button T0: Aktuell ausgewählter Song abspielen
- Währendem ein Song abspielt:
- Button T1: Song stoppen und zum Hauptmenü zurück
- Potentiometer (Analog In 0): Lautstärkeregulierung
- Im Hauptmenü:
- Musik & Speki geniessen!
Nach Einrichten des Devcontainers unter WSL2 lässt sich per usbipd den USB-Port des physischen STM32-Debugger an WSL2 weiterleiten. Dazu in einem Windows Terminal mit Administratorrechten folgende Befehle verwenden:
usbipd wsl list
- Auflisten aller verfügbaren USB Geräteusbipd wsl attach --busid <X-Y>
- Weiterleiten des per busid ausgewählten Geräts- (optional)
sc start usbipd
- bei Fehlermeldung hiermit den Service starten - Das Flashen und das Debugging funktioniert nun direkt aus VSCode heraus: Dazu die vordefinierten Aufgaben
flash
oderopenocd
verwenden. - Weiteres Vorgehen wie im vorherigen Abschnitt.
Die grundlegenden Funktionen gemäss Pflichtenheft wurden alle umgesetzt. Einige der genannten Erweiterungen wurden implementiert:
- mehrere Audiosignale auswählbar: indem ab SD-Karte belibige Songs abspielbar sind
- schöne Darstellung: Albumcover, Vortschrittsanzeige und Song-Metatinformationen werden übersichtlich dargestellt
Das neuschreiben sinnvoller Teile in Assembler sollte gemäss Profiling (siehe hier) ermittelt werden um die kritischen und langsamen Teile des C Codes zu optimieren. Das Profiling ergab aber, dass die meiste Zeit > 60% in der BSP und sGUI Library verweilt wird. Hauptsächlich wurde auf die SD-Karte gewartet oder Pixel an das LCD gesendet. Der von uns als langsam vermutete Teil des DFT-Algorithmus beanspruchte lediglich ~ 20% der CPU. Da wir nicht zu fest mit den Librarys kämpfen wollten, optimierten wir dennoch den DFT-Algorithmus. In folgender Tabelle ist die relativ beansprchte CPU Zeit mit C oder ASM Implementierung und O0 oder O4 Optimisierungslevel vermerkt.
Optimisierungslevel | C | ASM |
---|---|---|
O0 | 22% | 5% |
O4 | 6% | 5% |
Somit wurde das von uns gesetzte Ziel erreicht! Die ASM Implementierung ist schneller als der optimierte Code des Compilers.
Welche Implementierung die DFT verwendet, lässt sich per DFT_USE_ASM
Makro in dft.h auswählen.
carme-template - Vorlage für STM32CubeIDE unabhängige CARME Projekte.