LUFA ohne makefile

OP #5993077
Lesenswert?

Hallo zusammen.
Ich möchte gerne für einen ATMEGA32U4 eine USB-Kommunikation aufbauen. 
Soll ja mit LUFA alles recht simpel sein, aber es klappt bei mir nicht.

Ich habe ein neues Projekt in Eclipse angelegt, und den LUFA-Ordner 
importiert. Dann habe ich die Dateien aus dem Demoordner von LUFA 
(Demo/Device/ClassDriver/VirtualSerial) importiert. Unter den 
Einstellungen hab ich MCU richtig eingestellt.
Unter Path and Symbols hab ich USE_LUFA_CONFIG_HEADER hinzugefügt (weil 
ich ohne das LUFA-makefile arbeiten will), LUFAConfig.h ins 
root-Verzeichnis gelegt und in LUFAConfig.h F_USB = F_CPU eingetragen.
Ein paar Anpassungen musste ich machen, weil manchen Headerdateien nicht 
gefunden wurden, aber da ließen sich die Pfadangaben einfach 
korrigieren.

Beim Compilieren erhalte ich jetzt die Fehlermeldung „too many arguments 
to function ‚USB_Init‘.“ in der Datei HostApplication.c.  Das wundert 
mich, da ich ja ein Device sein möchte. In der LUFAConfig.h hab ich noch 
USB_DEVICE_ONLY definiert. Wieso hab ich also diesen Fehler, und was 
muss ich machen, um ihn loszuwerden?

Besten Dank, wenn mir hier jemand weiterhelfen kann!!!!
Ein schönes Wochenende allen……
Sebastian
Gast #5994090
Lesenswert?

Hallo,

ohne Makefileabarbeitung, wird der Compiler nicht glücklich.

Ohne das gesamte Projekt von Dir, kann niemand mit einer textlichen 
Beschreibung etwas anfangen.

Also mache es so, wie es vorgesehen ist!
Gast #5996183
Lesenswert?

Sebastian R. schrieb:
> Ich nehme an, dass über die
> LUFAConfig.h (bzw. das Makefile) die Infos weitergegeben werden, was
> benötigt wird und was nicht.

Wie soll das funktionieren? Woher soll eclipse wissen für welche 
Source-Datei der Compiler aufgerufen werden soll und für welche nicht? 
Wenn du das makefile nicht benutzt, musst du selber die nicht 
benötigten Dateien vom Build-Prozess ausschließen.
OP #5996302
Lesenswert?

Ich glaube es liegt nicht an der Funktion direkt, sondern an den 
Einstellungen, die die Konfiguration bestimmen, mit der diese Funktion 
aufgerufen wird.

In der LUFAConfig.h gibt es den Parameter USE_STATIC_OPTIONS 
(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLE | USB_OPT_AUTO_PLL)

Wenn ich den weglasse habe ich den Fehler 'too few arguments to function 
'USB_Init'
Mit diesem Parameter habe ich eine Menge Meldungen 'undefined reference 
to ....'

Das ist die Funktion:
1
void USB_Init(
2
               #if defined(USB_CAN_BE_BOTH)
3
               const uint8_t Mode
4
               #endif
5

6
               #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS))
7
               ,
8
               #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS))
9
               void
10
               #endif
11

12
               #if !defined(USE_STATIC_OPTIONS)
13
               const uint8_t Options
14
               #endif
15
               )
16
{
17
  #if !defined(USE_STATIC_OPTIONS)
18
  USB_Options = Options;
19
  #endif
20

21
  #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
22
  /* Workaround for AVR8 bootloaders that fail to turn off the OTG pad before running
23
   * the loaded application. This causes VBUS detection to fail unless we first force
24
   * it off to reset it. */
25
  USB_OTGPAD_Off();
26
  #endif
27

28
  if (!(USB_Options & USB_OPT_REG_DISABLED))
29
    USB_REG_On();
30
  else
31
    USB_REG_Off();
32

33
  if (!(USB_Options & USB_OPT_MANUAL_PLL))
34
  {
35
    #if defined(USB_SERIES_4_AVR)
36
    PLLFRQ = (1 << PDIV2);
37
    #endif
38
  }
39

40
  #if defined(USB_CAN_BE_BOTH)
41
  if (Mode == USB_MODE_UID)
42
  {
43
    UHWCON |=  (1 << UIDE);
44
    USB_INT_Enable(USB_INT_IDTI);
45
    USB_CurrentMode = USB_GetUSBModeFromUID();
46
  }
47
  else
48
  {
49
    UHWCON &= ~(1 << UIDE);
50
    USB_CurrentMode = Mode;
51
  }
52
  #endif
53

54
  USB_IsInitialized = true;
55

56
  USB_ResetInterface();
57
}
Moderator Persönliche Seite #5997047
Lesenswert?

Kannst du das bisschen relevanten Text nicht einfach gleich in den 
Beitrag copy&pasten?

"Multiple definition of `main'"

Es gibt in diesem LUFA-Beispiel ganz viele verschiedene Inkarnationen 
von möglichen Geräten. Jede hat dabei ihre eigene Implementierungsdatei 
mit einem eigenen main(). Einige davon benötigen offenbar auch noch 
weitere, von dir zu liefernde Implementierungsdaten ("undefined 
reference") – aber vermutlich sind das Unterprojekte, die du eigentlich 
sowieso gar nicht haben willst und daher gar nicht mit compilieren 
solltest.

Sorry, aber ohne dass du dir selbst wenigstens ein bisschen einen 
Überblick verschaffst, was da im LUFA-Code wofür zuständig ist und was 
du davon genau tatsächlich für deinen Anwendungsfall benutzen musst, 
wird das wohl nicht abgehen. Das ist kein Lego, bei dem man einfach 
irgendwie alles aufeinander stöpseln kann, und dann schon zu irgendeinem 
Ergebnis kommen wird, was zumindest zusammen passt (auch wenn es 
vielleicht nicht das war, was man sich ursprünglich vorgenommen hatte 
:).
OP #5997095
Lesenswert?

Ja, da hast Du Recht. Sorry!!! Ich hab zu schnell gepostet, und erst 
danach die ganzen Meldungen genau gelesen. Hab die unnötigen Dateien 
ausgeschlossen, und jetzt ist es fehlerfrei. JUHUU!!!!
Ich teste mal, ob es auch richtig erkannt wird.....

Das LUFA-Zeug hab ich wirklich falsch eingeschätzt. Ich dachte das binde 
ich einfach ein und mit ein paar wenigen Konfigurationen kann ich meinen 
Anwendungsfall einstellen. Tja, again what learned....

Danke Dir für Deine Antwort!
Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren