Forum: Mikrocontroller und Digitale Elektronik ATMega48 mit V-USB (AtmelStudio 6)


von Samuel M. (samuel_m)


Lesenswert?

Hallo zusammen,
ich möchte mit einem ATMega48 Controller über V-USB kommunizieren. Dafür 
bin ich genau wie in diesem Tutorial 
(http://codeandlife.com/2012/01/29/avr-attiny-usb-tutorial-part-3/) 
beschrieben vor gegangen. Leider kommen immer wieder neue Fehler vom 
Compiler die ich teilweiße überhaupt nciht verstehe. Als erstes kahm 
dieser Fehler:
1
Error  1  variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'  C:\Programmieren\USB-Input\USB-Input\USB-Input\V-USB\usbdrv.h  455  6  USB-Input
Dort habe ich dann einfach ein "const" davor gehägt, so wie es der 
Compiler wollte:
1
const char usbDescriptorDevice[];
Damit war er auch erst ein mal zufrieden doch das war noch nicht alles, 
jetzt meint er das "usbInit" nicht definiert ist.
1
Error  1  undefined reference to `usbInit'  C:\Programmieren\USB-Input\USB-Input\USB-Input\Debug/.././USB-Input.c  38  1  USB-Input
Und hier weiß ich erst mal nicht weiter, ich habe die Header-Datei 
"usbdrv.h" eingebunden
1
#include <usbdrv.h>
daran kann es also nicht liegen und in "usbdrv.h" ist die Funktion auch 
angegeben:
1
USB_PUBLIC void usbInit(void);
Was mich etwas verwirrt ist das sonst nicht in dieser Funktion steht und 
"usbInit" auch sonst wo nicht noch ein mal auftaucht.

Hat vielleicht jemand schon mal mit V-USB gearbeitet und kann mir weiter 
helfen? Vielen Dank schon mal im Vorraus.

von Simon K. (simon) Benutzerseite


Lesenswert?

Samuel M. schrieb:
> Error  1  variable 'usbDescriptorDevice' must be const in order to be put into 
read-only section by means of '__attribute__((progmem))' 
C:\Programmieren\USB-Input\USB-Input\USB-Input\V-USB\usbdrv.h  455  6  USB-Input
Interessant, welche Compilerversion hast du da?

> jetzt meint er das "usbInit" nicht definiert ist.Error  1  undefined reference 
to `usbInit' 
C:\Programmieren\USB-Input\USB-Input\USB-Input\Debug/.././USB-Input.c  38  1 
USB-Input
> Und hier weiß ich erst mal nicht weiter, ich habe die Header-Datei
> "usbdrv.h" eingebunden#include <usbdrv.h>daran kann es also nicht liegen und in 
"usbdrv.h" ist die Funktion auch
> angegeben:USB_PUBLIC void usbInit(void);Was mich etwas verwirrt ist das sonst 
nicht in dieser Funktion steht und
> "usbInit" auch sonst wo nicht noch ein mal auftaucht.

Muss man die Funktion usbInit nicht selber schreiben? Als eine Art 
Callback Funktion.
EDIT: Nein, das war eine andere. Kann das sein, dass usbInit in 
Assembler dabei ist?

von Samuel M. (samuel_m)


Angehängte Dateien:

Lesenswert?

Zum Programmieren verwende ich die AtmelStudio6 Entwicklungsumgebung, 
vermutlich wird das dann der AVRGCC (3.4.0.65) Compiler sein der dort 
intigriert ist.

Kann sein das "usbInit" in Assembler vor liegt, aber das müsste dann ja 
eigenltich auch mit dem Namen "usbInit" versehen sein. Aber wenn es da 
ist, warum bekomme ich dann einen Fehler? Im Anhang habe ich jetzt mal 
die Dateien eingefügt.

von absheiper (Gast)


Lesenswert?

The problem is that you have created two classes of "main"

My page: https://vk.com/takuedejia

von absheiper (Gast)


Lesenswert?

absheiper schrieb:
> The problem is that you have created two classes of "main"
> And winavr ;)
> My page: https://vk.com/takuedejia

von Dieter F. (Gast)


Angehängte Dateien:

Lesenswert?

Probiers mal damit. Ich habe alle notwendigen Module eingebettet und die 
Quarz-Frequenz fest auf 20 MHz eingestellt (mit der Berechnung via F_CPU 
wollte er nicht ...).

Lässt sich so problemlos compilieren ...

Übrigens, wenn Du Module (.C oder .H) im Projektverzeichnis hast und per 
ADD einfügst, dann sollte Dein Include-Statement so

#include "usbdrv.h"

und nicht so

#include <usbdrv.h>

aussehen.

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.