Hallo Gemeinde, ich arbeite auf einem STM32L496 (nucleo-144) Die USB-CDC-Schnittstelle hat mir CubeMx gebastelt. Senden und Empfangen geht, aber nur mit statischen Sendepuffer! Da ich aber zwischen 2 und 2k-Bytes senden werden, möchte ich dynamischen Speicher verwenden. Mit diesem Befehl werden die Daten versendet: CDC_Transmit_FS(pbuf, lenframe + SIZE_CRC); Das Verhalten ist komisch: Wenn Speicher erfolgreich (!NULL) allokiert wird (calloc()) und kein!!! free() verwendet wird geht das Senden bis das Allokieren fehlschlägt (heapsize = 0x400) Bis hierher normal... Wenn ich nach CDC_Transmit_FS() free() verwende friert die Anwendung ein. Ich prüfe auch auf (while(!hcdc->TxState)). Kann die USB-CDC-Schnittstelle nicht mit dyn. Memory umgehen? Ist es egal, ob der Pointer für calloc() lokal oder global deklariert wird? Komme hier nicht weiter. Grüße Runout
Hallo Uwe, danke für den Tipp. in ST-UM1021 ( On-The-Go host and device library) Dedicated FIFO transmission for each of the 4 device IN endpoints. Each FIFO can hold multiple packets "dedicated RAM" ist für mich erst mal Namedropping ;-) Der Nachteil des "HAL Generierens" ist des Fehlen des detaillierten Durchblicks. Wie es aussieht, muss ich meine Puffer schon beim Kompilieren wissen. Relativ blöd... Grüße Runout
Ich vermute, dein Problem wird dadurch ausgelöst, dass die Datenübertragung nach dem Aufruf von CDC_Transmit_FS() asynchron stattfindet. Der Puffer wird also noch länger benötigt, und zwar bis die Übertragung beendet ist.
Hallo Stefanus, war auch meine erste Vermutung. Deswegen: "Ich prüfe auch auf (while(!hcdc->TxState))" Ich schaue mal, ob es einen Int "Senden fertig / Sendpuffer leer" gibt. Einfach so mit Timer den Speicher freigeben wäre nur versuchsweise eine Lösung. Grüße Runout
Dynamische Speicherverwaltung auf einem Microcontroller… Klar, da muss man sich echt nicht mehr wundern warum neue Geräte immer instabiler werden.
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.