Forum: Mikrocontroller und Digitale Elektronik Problem externe Funktion in C einzubinden


von Flo89 (Gast)


Lesenswert?

Hallo Experten,

ich programmiere gerade meinen STM32F4 und habe folgendes Problem:
In der Datei usbd_cdc.c ist folgende Funktion:

static uint16_t cdc_DataTx (uint8_t* Buf, uint32_t Len)
{

  uint32_t i;
  for( i = 0; i < Len; i++ )
  {
    APP_Rx_Buffer[APP_Rx_ptr_in] = Buf[i] ;
    APP_Rx_ptr_in++;
    if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
    {
      APP_Rx_ptr_in = 0;
    }
  }
  return USBD_OK;
}

Der Funktionsprototyp ist nstürlich folglich:
static uint16_t cdc_DataTx   (uint8_t* Buf, uint32_t Len);

Nun versuche ich in meiner stm32f4xx_it.c die funktion von oben zu 
verwenden:
cdc_DataTx(&test[0], 2);

Nun ist klar dass ich ihm einen Funktionprototypen geben muss.
Also habe ich folgendes Probiert:
extern uint16_t cdc_DataTx   (uint8_t* Buf, uint32_t Len);

Da mault er aber:
THUMB Debug/stm32f4xx_it.o: In function `TIM3_IRQHandler':
undefined reference to `cdc_DataTx'

Was mach ich falsch beim Funktionsprototypen??

Vielen Dank für Antworten!
Florian

von Jürgen S. (starblue) Benutzerseite


Lesenswert?

Du musst das static weglassen.

von Fabian O. (xfr)


Lesenswert?

Die Funktion ist static definiert, deshalb ist sie nur innerhalb von 
usbd_cdc.c sichtbar. Sie ist also nicht dazu gedacht, von außen 
aufgerufen zu werden.

Wenn die usbd_cdc.c von Dir ist, dann mach das static weg. Wenn sie 
nicht von Dir ist, hat sich derjenige sicherlich etwas dabei gedacht. 
Das heißt, Du verwendest die Schnittstelle nicht richtig und willst 
eigentlich eine andere Funktion aufrufen.

von Flo89 (Gast)


Lesenswert?

Ales klar!
Die Antworten haben mir geholfen und nun funktioniert es!

Vielen Dank!

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.