Hallo Leute, ich arbeite mit einem STM32F4-Discovery Board. Ich habe ein Array und muss die Daten vom Beginn des Arrays in einen Bereich weiter hinten im selben Array kopieren. Ich habe versucht das über DMA zu realisieren, da ich ca. 15000 Bytes kopieren muss und den Prozessor für andere Aufgaben freihalten will. DMA funktioniert, wenn sich die Bereiche nicht überlappen. Andernfalls funktioniert es mit DMA nicht, weil src und dest immer inkrementiert werden und daher den Bereich mit den bereits kopierten Daten weiterkopieren. Wenn ich das ganze in einem Loop mache, in welchem ich die Daten von hinten nach vorne kopiere, funktioniert das einwandfrei. Meine Frage: Gibt es eine Möglichkeit, dies auch über DMA zu realisieren? Ich habe nur die Auswahl gefunden MIT increment oder OHNE inkrement, aber nicht mit decrement. Oder vielleicht gibt es auch noch einen anderen Ansatz. Vielen Dank im Voraus Eugen
Eugen schrieb: > Meine Frage: Gibt es eine Möglichkeit, dies auch über DMA zu > realisieren? Ich denke, das geht nicht. Leider kann der STM32F4 auch nicht mit einem 32 bit Offset arbeiten, sodass ein Inkrement mit -1, -2 oder -4 programmierbar wäre. Wenn ich mir dagegen die aktuellen Renesas µCs ansehe, die können beides. Fazit: Augen auf bei der Prozessorwahl :-)
Hallo M.N. danke für deinen Beitrag und deine Bestätigung, dass dies scheinbar wirklich nicht geht. Eigentlich bin ich erst vom Atmel AT91SAM7X umgestiegen und dachte mit dem STM32F4 bestens bedient zu sein. Aber scheinbar hat halt jeder Hersteller seine Vor (und auch) Nachteile. Grüsse Eugen
Würg-around: kleinen (zB 256Byte) Buffer zusätzlich anlegen und dann per mehrfachem DMA blockweise rückwärts hin- und hertransferieren. Nachteil: Doppelte DMA Last und ein bisschen IRQ. Vorteil: Immer noch besser als komplett mit CPU ;-)
Eugen schrieb: > den Prozessor für andere Aufgaben freihalten will. viel wird der Prozessor nicht machen können, wenn der Speicher gerade vom DMA gebraucht wird. MfG Klaus
Danke für den Tip, hilft mir weiter, das Problem ein bisschen zu entschärfen. Grüsse Eugen
Klaus schrieb: > viel wird der Prozessor nicht machen können, wenn der Speicher gerade > vom DMA gebraucht wird. Getrennte Busse für Flash und RAM. WIMRE, bleibt im schlimmsten Fall noch ca. 50% Durchsatz.
Eugen schrieb: > Eigentlich bin ich erst vom Atmel AT91SAM7X > umgestiegen und dachte mit dem STM32F4 bestens bedient zu sein. Aber > scheinbar hat halt jeder Hersteller seine Vor (und auch) Nachteile. Es hängt immer davon ab, was man zu erledigen hat. Der STM32F4xx ist richtig schnell! Da gibt's nichts zu meckern. Aber wenn es um die Aufgaben geht, die man von einem Controller erwartet, fehlt immer der Punkt auf dem i. Einer der Nachfolger, der STM32F439, hat immerhin schon einen SDRAM-Controller auf dem Chip. An Deiner Stelle würde ich die Kopierfunktion mit Software erledigen und dabei uint32_t Zugriffe nehmen und den Speicher entsprechend ausrichten, dass jeder Zugriff auch nur einen Takt braucht. Gut, das braucht auch seine Zeit, aber sehr viel schneller wird DMA auch nicht laufen.
ich probier mal aus, ob die Kopierfunktion mit uint32_t Zugriffen schnell genug ist. Grüsse Eugen
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.