Hallo. Ich sizte gerade an einen Projekt mit einem STM32F407 mit externem RAM. Darauf läuft FreeRtos, zZ mit Heap_2.C, wobei der Heap im CCM Speicher liegt. Nun brauche ich aber für eine Ethernet Anwendung mehr Speicher auf dem Heap. Extern habe ich genug RAM dran. Jetzt Wollte ich auf Heap_5.c unsteigen und den alten CCM Speicher sowie den Externen Speicher da eintragen. Das wird mit sicherheit auch sofort gehen. Aber ich hätter gerne das die ganzen Ethernet Sachen (Pakete) nicht im CCM Bereich landen, also nur im 2. Heap-Bereich. Ist das überhaupt möglich? Oder muss ich besser Heap2 und Heap4 (nach umbenennen) parallel beteiben und dann die ganzen Heap Aufrufe aus dem TCP Code darauf anpassen? VG, Peter
Naja, FreeRTOS benutzt pvPortMalloc(), wenn es ein Stückchen Heap benötigt. Du kannst natürlich einen zweiten Mechanismus einführen, der parallel einen anderen Speicherbereich verwaltet und diesen z.B. über eine andere Funktion bereitstellen. Diese kannst du dann innerhalb der Ethernet-Tasks nutzen. Die Funktionalität beim Allozieren einen bestimten Speicherbereich zu nutzen -- wie etwa im Linux Kernel kmalloc [1] -- hat FreeRTOS meines Wissens nach nicht. Du solltest unbedingt im Hinterkopf behalten, dass die DMA nicht auf den CCM zugreifen kann. Aus diesem Grund fällt leider immer dessen Verwendung flach, wenn es um Datenstrukturen geht, die direkt von einem Gerätetreiber verwendet werden. [1] https://www.safaribooksonline.com/library/view/linux-device-drivers/0596005903/ch08.html
Das mit dem DMA war auch einer der Gründe warum ich die ETH Daten nicht da drin haben will. Ich denke auch das 2 Heap Funktionen das einfachste ist, das bisschen mehr an Code kann ich verkraften.
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.