Forum: Mikrocontroller und Digitale Elektronik undefined reference to


von Jörg (Gast)


Lesenswert?

Hi,
ich bin vor kurzem auf das AVR-Studio 5 umgestiegen und habe nun 
folgendes Problem "ERROR undefined reference to 'uart0init'".
Im AVR-Studio 4 funktionierte es mit einem externen Makefile.
Alle Dateien befinden sich im gleichen Verzeichnis und ich habe sie im 
Studio5 im Solution Explorer hinzugefügt.

Hat jemand eine Idee woran es liegen könnte.

Umgestiegen weil ATmega88PA vom Studio 4 nicht unterstützt wird nur asm.

Gruß
Jörg

von chenz (Gast)


Lesenswert?

Ist ein linker problem, erzeugt er obj files? vielleicht tut er es auch 
weg optimieren? benutzt du aktiv die funktion?

von Jörg (Gast)


Lesenswert?

Ja, die Funktion wird benutzt.
Aufbau:
1
//uart0.h
2
void uart0init(uint32_t baudrate, uint8_t bits, parityMode parity, uint8_t stopbits);
1
//uart0.c
2
void uart0init(uint32_t baudrate, uint8_t bits, parityMode parity, uint8_t stopbits)
3
{
4
  //implementation
5
}
1
#include "uart0.h"
2
int main( void )
3
{  
4
  uart0init(9600, 8, NONE_PARITY, 1);
5
}

obj files werden erstellt.
Im Makfile steht die uart0.c auch drin.

von Christian H. (christian_h)


Lesenswert?

In deiner .h Datei deklarierst du schon Variablennamen in dem 
Funktionsheader (nur Dateitypen!)? Ist die Funktion dann nicht doppelt 
deklariert? Versuch das mal ganz schnell zu ändern.

von Stefan E. (sternst)


Lesenswert?

Christian H. schrieb:
> In deiner .h Datei deklarierst du schon Variablennamen in dem
> Funktionsheader (nur Dateitypen!)? Ist die Funktion dann nicht doppelt
> deklariert? Versuch das mal ganz schnell zu ändern.

Sorry, aber das ist Unsinn.

Jörg schrieb:
> Im Makfile steht die uart0.c auch drin.

Und hast du das Studio5 auch so eingestellt, dass das externe Makefile 
verwendet wird?

Jörg schrieb:
> Umgestiegen weil ATmega88PA vom Studio 4 nicht unterstützt wird nur asm.

Wie bitte?

von Jörg (Gast)


Lesenswert?

Also
//uart0.h
void uart0init(uint32_t , uint8_t , parityMode , uint8_t );

hilft jedoch leider nichts.

von Jörg (Gast)


Lesenswert?

Ist das vom Studio 5 erzeugte Makefile also gehe ich mal davon aus des 
es verwendet wird.
In Studio 4 funktierte es nur für einen ATmega88P ohne Fehler.

von Stefan E. (sternst)


Lesenswert?

Jörg schrieb:
> Ist das vom Studio 5 erzeugte Makefile also gehe ich mal davon aus des
> es verwendet wird.

Dann poste doch bitte mal den kompletten Build-Output.

Jörg schrieb:
> In Studio 4 funktierte es nur für einen ATmega88P ohne Fehler.

Was soll das heißen? Es gibt doch in Bezug auf die Software gar keinen 
Unterschied zwischen 88P und 88PA.

von Thomas E. (thomase)


Lesenswert?

Jörg schrieb:
> "ERROR undefined reference to 'uart0init'".

Das ist doch nicht der einzige Fehler. Der Compiler meckert doch schon 
an, daß er das Headerfile nicht findet. Oder etwa nicht?

mfg.

von Jörg (Gast)


Lesenswert?

Nein, das ist der einzige Fehler.

von Thomas E. (thomase)


Lesenswert?

Jörg schrieb:
> Nein, das ist der einzige Fehler.

Dann zeig' mal deinen ganzen Code.

mfg.

von Jörg (Gast)


Lesenswert?

Hi,
ich denke ich hab es gefunden.
uart.c
1
#define UART0
2
3
#if defined(UART)
4
void uart0init(uint32_t baudrate, uint8_t bits, parityMode parity, uint8_t stopbits)
5
{
6
  //implementation
7
}
8
#endif

kein wunder das die nicht gefunden wurde.

Jetzt bekomme ich den Fehler F_CPU nicht definiert. Gibt es im Studio 5 
eine möglichkeit dies zu setzten wie im 4er?
oder
#define F_CPU 8000000UL


Danke für die Hilfe.

von Thomas E. (thomase)


Lesenswert?

Jörg schrieb:
> oder
> #define F_CPU 8000000UL

In Studio 5 nur so.

mfg.

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.