ESP32 multi threading shared memory deklaration

Für ein kleines Projekt muss ich ein Audiosignal kontinuierlich in seine Frequenzen zerlegen (FFT). Der ESP32 bietet sich wegen seines Preises und seiner niedrigen Stromaunahme für ein portables Gerät an.
Das Problem bei einer single-thread-Lösung ist, das, während die FFT läuft, das Audiosignal nicht gesampelt werden kann. Auf dem ESP32 braucht die FFT mit 1024 Bin's immerhin 33 Millisekunden.Da gehen viele Samples verloren. Da es sich um ein Messsignal handelt, ist das nicht gut.
Was bietet sich also mehr an, als die zwei Cores des ESP32 zu nutzen.
Ich habe mir das so gedacht. Das sampeln läuft auf Core 1 und FFT läuft auf Core 0.
Während die Samples in Buffer A geschrieben werden, läuft die FFT mit Buffer B. Wenn FFT fertig ist, werden die Buffer getauscht usw.
Die FFT funktioniert schon und das Erzeugen von Threads ist auch kein Problem. Was ich trotz Recherche im Internet noch nicht herausgefunden habe ist, wie und wo ich die Buffer deklarieren muss. Hab was von "Ques" und "shared memory" gelesen. Mit Ques möchte ich nicht arbeiten, aber "shared memory" hört sich gut an. Die generelle Problematik von shared Memory ist mir auch geläufig (Lese/Schreibkonfikte usw), das krieg ich schon hin. Es geht rein um die Deklaration der Buffer.
Hat da jemand Erfahrung?

Die generelle Problematik von shared Memory ist mir auch geläufig (Lese/Schreibkonfikte usw), das krieg ich schon hin. Es geht rein um die Deklaration der Buffer.

Dann hast du kein Problem!

Die Verriegelung, ist das Problem.
Die Buffer nicht.

volatile int buffer[gewuenschteGroesse];

Der ESP32 bietet sich wegen seines Preises und seiner niedrigen Stromaunahme für ein portables Gerät an

Da gibt es noch eine Alternative!

Der Kendryte K210

2 Kerne
64 Bit
bis zu 600MHz
FFT in Hardware, unabhängig von den beiden Kernen
usw.

Als Sipeed M1W auch mit Wlan.

Hallo Combie
danke für die schnelle Antwort.
Hab den ESP32 hier liegen und versuchs mal mit dem.

Werde mir den Kendryte natürlich ansehen.
FFT in Hardware klingt zu verlockend.

Beim Zugriff auf die Buffer sollte es eigentlich keine Konflickte geben, da beide threads nie gleichzeitig auf den selben Buffer zugreifen. Immer nur abwechselnd.

Habe früher in anderen Systemen mit shared memory gearbeitet. Aber die Systeme und die Language unterscheiden sich natürlich in Aufbau und Syntax.

Da ich erst seit drei Wochen mit dem ESP32 arbeite, kenne ich dessen Eigenheiten natürlich noch nicht.
Wenn Du Erfahrung mit shared memory im ESP32 hast, wäre ich um Tips, wie das mit dem Verriegeln beim ESP32 gelöst hat, sehr dankbar. Die Frage ist, muss man überhaupt verriegeln, wenn zwei thread nie gleichzeitig auf den selben Memorybereich zugreifen?

Die Frage ist, muss man überhaupt verriegeln, wenn zwei thread nie gleichzeitig auf den selben Memorybereich zugreifen?

Ist nicht gerade dafür die Verrieglung zuständig, um das zu gewährleisten.

Wenn Du Erfahrung mit shared memory im ESP32 hast, wäre ich um Tips, wie das mit dem Verriegeln beim ESP32 gelöst hat, sehr dankbar.

FreeRTOS hat ein Semaphor/Mutex Konzept

shared memory

Der Begriff kommt nicht "nur" aus dem Multitasking Bereich, sondern auch aus der Multi Prozess Ecke.
Wir haben aber beim ESP32 und K210 keine Prozesse.
Also kannst du mit einfachen Speicherbereichen arbeiten.

Hallo Combie,

alles klar, danke für die Info.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.