STM32CubeMX USB-CDC Fehler im Code

Gast #4629863
Lesenswert?
• ▲
▼
Ich habe gerade mal mit Stm32CubeMX auf einem Stm32F103C8 ein Projekt 
generieren lassen mit einer minimalen USB-CDC Initialisierung. Leider 
kam es immer wieder zu Hardfaults. Grund ist ein definitiver Fehler im 
Code den CubeMx generiert. Falls jemand auch schon mal daran fast 
verzweifelt ist hier die Lösung:

In der Datei usbd_conf.c wurden die beiden Funktionen USBD_static_malloc 
und USBD_static_free implementiert die intern aus der USB-Lib gerufen 
werdern. Dabei wird aber kein dynamischer Speicher allociert sondern den 
einen einzigen nötigen Aufruf auf statischen Speicher gemappt. Blöd nur 
wenn man das dann dynamisch mit free wieder frei gibt:
1
/**
2
  * @brief  static single allocation.
3
  * @param  size: size of allocated memory
4
  * @retval None
5
  */
6
void *USBD_static_malloc(uint32_t size)
7
{
8
  static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];//On 32-bit boundary
9
  return mem;
10
}
11

12
/**
13
  * @brief  Dummy memory free
14
  * @param  *p pointer to allocated  memory address
15
  * @retval None
16
  */
17
void USBD_static_free(void *p)
18
{
19
  free(p);
20
}

die Zeile mit free(p) sollte auskommentiert werden, dann geht es. Je 
nachdem welche Umgebung zum Einsatz kommt ist free nicht oder als dummy 
implementiert. Da fällt dann dieser Fehler nicht auf. Anderenfalls sucht 
man sich blöd, da es nicht im free() abschmiert sondern erst im nächsten 
Interrupt.
Eventuell hilft das ja jemanden, das wird sicher auch alle anderen STM32 
mit USB betreffen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.