Forum: Compiler & IDEs LUFA ohne makefile


von Sebastian R. (lange_leitung)


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

von Karl M. (Gast)


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!

von Sebastian R. (lange_leitung)


Lesenswert?

Karl M. schrieb:
> Ohne das gesamte Projekt von Dir, kann niemand mit einer textlichen
> Beschreibung etwas anfangen.

Das ist ja das schöne. Es ist das 0815-LUFA-Demo-Standardprojekt. 
Keinerlei Zusatzcode. Ich will erstmal nur das Demoding zum Laufen 
bekommen.......

von Dr. Sommer (Gast)


Lesenswert?

Sebastian R. schrieb:
> HostApplication.c.  Das wundert mich, da ich ja ein Device sein möchte

Weiß Eclipse dass diese Datei also nicht mitkompiliert werden soll? 
Woher soll Eclipse wissen dass du ein Device baust? Exkludiere diese 
Datei vom Build-Prozess (Rechtsklick Menü).

von Sebastian R. (lange_leitung)


Lesenswert?

Sebastian R. schrieb:
> In der LUFAConfig.h hab ich noch USB_DEVICE_ONLY definiert.

Der LUFA-Ordner enthält ja alles Mögliche. Davon sollen ja unzählige 
Dateien nicht mitkompiliert werden. Ich nehme an, dass über die 
LUFAConfig.h (bzw. das Makefile) die Infos weitergegeben werden, was 
benötigt wird und was nicht.

von Dr. Sommer (Gast)


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.

von Sebastian R. (lange_leitung)


Lesenswert?

Gut. Habe HostApplication.c ausgeschlossen, jetzt ist es derselbe Fehler 
(„too many arguments to function ‚USB_Init‘.“) in der 
DeviceApplication.c.

von Dr. Sommer (Gast)


Lesenswert?

Dann zeig doch mal die relevanten Zeilen und die Definition von 
USB_Init.

von Sebastian R. (lange_leitung)


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
}

von Sebastian R. (lange_leitung)


Angehängte Dateien:

Lesenswert?

Also am USE_STATIC_OPTIONS Parameter liegt es wahrscheinlich nicht. Der 
ist im Demoprojekt auch gesetzt.
Ich hab das Projekt jetzt neu aufgesetzt und außer ein paar 
Kleinigkeiten (includepfade korrigiert) nicht gemacht. Folgender Fehler 
tritt auf: s. Anhang.

Weiß jemand Rat?
Sebastian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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 
:).

von Sebastian R. (lange_leitung)


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

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.