Forum: Mikrocontroller und Digitale Elektronik STM32CubeMX USB-CDC Fehler im Code


von temp (Gast)


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.

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
Noch kein Account? Hier anmelden.