Autor: DH1AKF K. (wolfgang_kiefer) Datum: 01.04.2015 11:52 Angehängte Dateien: fft.c (917 Bytes, 21 Downloads) | Codeansicht Hallo Experten! Es steht ein Programm zur Verfügung, das für einen Microchip Controller und die zugehörige (Firmware-) Library geschrieben wurde. Ich möchte es auf einen anderen Prozessor (Cortex- M3) portieren, und dabei die CMSIS- DSP- Library- Funktionen benutzen. Frage: Hat einer von Euch schon mal so etwas probiert? Oder gibt es Beispiele, wie man die DSP- Funktionen der CMSIS anwendet? Bin für alle Hinweise dankbar.
:
Bearbeitet durch User
Das was du da gepostet hast, besteht praktisch nur aus ein paar Aufrufen von Funktionen, die es im MicroChip-Portfolio gibt. Sowas kann man nicht portieren. Du müßtest dich stattdessen mit der Doku zu den CMSIS-DSP-Routinen vertraut machen und die Aufrufe der dort vorhandenen Funktionen dir selber neu schreiben - aber das Aufrufen von fertigen Bibliotheksroutinen ist ja nur Kleinkram. Gehe ich recht in der Annahme, daß du dir nen Bandpaß (300..2700 Hz oder so) programmieren willst? W.S.
W.S. schrieb: > Gehe ich recht in der Annahme, daß du dir nen Bandpaß (300..2700 Hz oder > so) programmieren willst? Nein, es soll eine kleine FFT- Anwendung für einen Demodulator (PSK31 und CW) werden. Das Spektrum, auf einem GLCD angezeigt, soll die exakte Frequenzeinstellung im o.g. Frequenzbereich ermöglichen. Ich habe schon ein CMSIS- Beispiel versucht zu übersetzen, aber meine IDE - es ist der PSoC Creator 2.2 von Cypress - erzeugt ihrerseits "Firmware"- Quellcode, der mit CMSIS kollidiert. So einfach, wie ich mir das vorgestellt habe, geht es leider nicht: Ich muss die ganzen Hardware- Eigenschaften meines Prozessors definieren, damit CMSIS vernünftig laufen kann. Ein Bandpass 300..2700 wäre mit der IDE in 5 Minuten fertig ... Danke für die Antwort, W.S. !
DH1AKF K. schrieb: > habe schon ein CMSIS- Beispiel versucht zu übersetzen, aber meine > IDE - es ist der PSoC Creator 2.2 von Cypress - erzeugt ihrerseits > "Firmware"- Quellcode, der mit CMSIS kollidiert. Jetzt habe ich mal den Keil uVision5 installiert --> das Beispielprogramm von CMSIS (FFT32) ließ sich fehlerfrei compilieren... ...aber nicht als Target auf meinen PSoC5...
Es funktioniert mit dem PSoC Creator 3.1 nach dem Schema http://www.cypress.com/?app=forum&id=2492&rID=89612 Der Trick ist dabei die Mathebibliotheken nur als m einzubinden . ich habs händisch bei Linker Custom Flags -lm gemacht
Vielen Dank, Dieter für den guten Hinweis! Nach etlichen Versuchen hat es nun auch bei mir geklappt mit dem fehlerfreien Compilieren. Ich habe erst einmal das mitgelieferte Beispiel (FFT 1024 Samples, Float32) ausprobiert. Aber ein Flash- Verbrauch von ca. 230 kB ist nicht akzeptabel. Da bleibt ja kaum Platz für irgend etwas Anderes! Vielleicht habe ich auch etwas falsch gemacht...
Respekt ich mußte an den bitreversal Assemblerquellen rumfummeln und komme auf Flash used: 248238 of 262144 bytes (94,7%). Vermutlich muß man die Datei arm_common_tables.c ausmisten da ist alles mit const auf Flash gesetzt.
Wie wurde kompiliert? Die DSP Lib ist riesig, für FFT braucht es nur ein oder zwei der C Files. Bei GCC muss u.U. -ffunction-sections und bei LD -gc-sections als Parameter übergeben werden, damit ungenutzte Funktionen auch wirklich rausfliegen.
Wenn ich alle Tabellen lösche die für die Demo nicht gebraucht werden komm ich auf Flash used: 51030 of 262144 bytes (19,5%). SRAM used: 14957 of 65536 bytes (22,8%). Stack: 2048 bytes. Heap: 128 bytes. --------------- Build Succeeded: 04/02/2015 23:25:41 --------------- ich hab in der Datei arm_const_structs.c alles auskommentiert außer const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024 = { 1024, twiddleCoef_1024, armBitRevIndexTable1024, ARMBITREVINDEXTABLE1024_TABLE_LENGTH }; die Common tables aus dem Projekt entfernt und dann anhand der fehlermeldungen geschaut was fehlt
Nach dem Auskommentieren überflüssiger Tabellen komme ich auf ähnliche Werte wie Du, Dieter. Nun hat mich mal das Zeitverhalten interessiert. Ergebnis: ca. 55 ms bei 1024 Punkten, Float 32. (Der Chip hat leider keine FPU). Mit den Datenformaten q31 und q15 werde ich weitertesten.
:
Bearbeitet durch User
Entschuldigung, so kommen keine Timer- Interrupts! Habe das Progrämmchen korrigiert. Das Messergebnis : 23,5 ms je reine FFT (ohne die Magnitudenberechnung) bei 60 MHz Prozessortakt, 1024 komplexe Datenpunkte, 32 Bit Float Mit PSoC5 (Cypress) getestet.
Weitere Ergebnisse für die FFT- Berechnung, diesmal mit dem Festkomma- Format q_15: - Format q_15 ( 16 Bits) - 1024 Punkte 11 ms 512 5 ms 256 2 ms 128 1 ms 64 0.4 ms
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.