mikrocontroller.net

Forum: Compiler & IDEs LUFA ohne makefile


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sebastian R. (lange_leitung)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Sebastian R. (lange_leitung)
Datum:

Bewertung
0 lesenswert
nicht 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.......

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ü).

Autor: Sebastian R. (lange_leitung)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian R. (lange_leitung)
Datum:

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

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann zeig doch mal die relevanten Zeilen und die Definition von 
USB_Init.

Autor: Sebastian R. (lange_leitung)
Datum:

Bewertung
0 lesenswert
nicht 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:
void USB_Init(
               #if defined(USB_CAN_BE_BOTH)
               const uint8_t Mode
               #endif

               #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS))
               ,
               #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS))
               void
               #endif

               #if !defined(USE_STATIC_OPTIONS)
               const uint8_t Options
               #endif
               )
{
  #if !defined(USE_STATIC_OPTIONS)
  USB_Options = Options;
  #endif

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

  if (!(USB_Options & USB_OPT_REG_DISABLED))
    USB_REG_On();
  else
    USB_REG_Off();

  if (!(USB_Options & USB_OPT_MANUAL_PLL))
  {
    #if defined(USB_SERIES_4_AVR)
    PLLFRQ = (1 << PDIV2);
    #endif
  }

  #if defined(USB_CAN_BE_BOTH)
  if (Mode == USB_MODE_UID)
  {
    UHWCON |=  (1 << UIDE);
    USB_INT_Enable(USB_INT_IDTI);
    USB_CurrentMode = USB_GetUSBModeFromUID();
  }
  else
  {
    UHWCON &= ~(1 << UIDE);
    USB_CurrentMode = Mode;
  }
  #endif

  USB_IsInitialized = true;

  USB_ResetInterface();
}

Autor: Sebastian R. (lange_leitung)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 
:).

Autor: Sebastian R. (lange_leitung)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.