Forum: Mikrocontroller und Digitale Elektronik AT32UC3B include Problem


von M. V. (bmtil)


Lesenswert?

Hiho,
ich habe es hingekriegt mti meinem JTAG die Device ID und 
Prozessorspannung zu lesen.
Nun wollte ich ein stinknormales LED-Toggle Programm schreiben, und 
anscheinend hat das Atmel Studio 6 Probleme mit diesem Conntroller, da 
der Compiler bei den Include Funktionen anfaengt zu meckern.
Hier ist erstmal der Code:
1
#include <avr32/io.h>
2
#include "gpio.h"
3
#include "sysclk.h"
4
#include "delay.h"
5
6
int main(void)
7
{
8
   sysclk_init();
9
   delay_init(sysclk_get_cpu_hz());
10
   
11
   while(1)
12
   {
13
    gpio_tgl_gpio_pin(AVR32_PIN_PA10);
14
     delay_ms(500);
15
   }
16
}

dem compiler gefaellt es nicht, dass es keiner der Boards aus dem ASF 
Wizard ist, und er deswegen anscheinend nicht die noetigen Bibliotheken 
aus den Include Befehlen einbinden kann.

Ich bin gerade extremst am verzweifeln, da wenn er schon bei so einem 
Dreizeiler wegen den Bibliotheken nervt, will ich es mir gar nicht erst 
vorstellen, wie er rumnerven wird wenn ich einen Scheduler auf das Teil 
packen soll.

Waere ganz cool, wenn da jemand eine Loesung wuesste,
vielen Dank und grueße, bmtil

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M. V. schrieb:
> dem compiler gefaellt es nicht, dass es keiner der Boards aus dem ASF
> Wizard ist, und er deswegen anscheinend nicht die noetigen Bibliotheken
> aus den Include Befehlen einbinden kann.

Das ist die Fehlermeldung?!

Include-Anweisungen binden keine Bibliotheken ein. Headerdateien (*.h) 
sind keine Bibliotheken (Library, *.lib oder *.a, je nach Compiler).

von M. V. (bmtil)


Lesenswert?

Ok, vllt. war "Library" der falsche Begriff.

Ich moechte im Endeffekt nur die LED zum blinken bringen ueber die Delay 
Funktionen, und bis jetzt ging das immer wenn ich das delay.h ueber 
inlcude reingeschrieben habe.

Der Compiler mecker ueber die Zeilen:
   sysclk_init();
   delay_init(sysclk_get_cpu_hz());

Das Problem ist, der Prozessor laeuft nur mit internen 32kHz und in der 
"sysclk.h" werden die pll.h definiert, die ich aber nicht nutze.
Ich glaube die Loesung waere einfach nur am Anfang des Programms sagen 
dass der Prozessor mit 32kHz laeuft.
Geht das einfach mit:
define CPU 32000Hz
?

achja, außerdem kommmen die Fehlermeldungen:

undefined reference to 'delay_ms'
und
undefined reference to gpio_tgl_gpio_pin'

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M. V. schrieb:
> Der Compiler mecker ueber die Zeilen:
>    sysclk_init();
>    delay_init(sysclk_get_cpu_hz());

Der Compiler "meckert" also. Die Fehlermeldung lautet also "Gemecker", 
oder wie?

M. V. schrieb:
> achja, außerdem kommmen die Fehlermeldungen:
>
> undefined reference to 'delay_ms'

Na, das ist ein Linkerfehler. Da fehlt wohl eine Library.

von M. V. (bmtil)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Der Compiler "meckert" also. Die Fehlermeldung lautet also "Gemecker",
> oder wie?
Wenn ich f7 druecke, dann kommen unten wo die Fehler gemeldet werden 
diese beiden Zeilen mit einem roten Kreis dahinter.

> M. V. schrieb:
>> achja, außerdem kommmen die Fehlermeldungen:
>>
>> undefined reference to 'delay_ms'
>
> Na, das ist ein Linkerfehler. Da fehlt wohl eine Library.

Und das versteh ich nicht, ich meine es ist doch die delay.h 
eingebunden, da eine Library noch fehlt, frage ich mich welche genau. 
Offensichtlich fehlt mir eine .lib datei, kann es sein dass die Delay 
Funktionen in einer Bibliothek stecken, die nicht unbedingt "delay" 
heisst?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M. V. schrieb:
> Wenn ich f7 druecke, dann kommen unten wo die Fehler gemeldet werden
> diese beiden Zeilen mit einem roten Kreis dahinter.

Das ist kein Gemecker des Compilers, sondern Gemecker des Linkers. Der 
kann Dein Programm nicht linken, weil in keiner der ihm angegebenen 
Libraries die beiden Funktionen zu finden sind.

Lies die Dokumentation Deiner Entwicklungsumgebung, da wird beschrieben 
sein, wie man eine Library zu einem Projekt hinzufügt (und wie Libraries 
heißen), und obendrein wird auch irgendwo beschrieben sein, in welcher 
Library die beiden Funktionen zu finden sind.

Üblicherweise gibt es eine Dokumentation der mitgelieferten Libraries, 
in der man nach den Namen von Funktionen suchen kann, und in der 
beschrieben ist, was die Funktion macht, in welcher Headerdatei sie 
deklariert ist und in welcher Library die Implementierung zu finden ist.

von Henry P. (henrylexx)


Lesenswert?

Hast du GPIO, SCFI (System Clock Interface) und PM (Power Manager) über 
Project --> Select Drivers from AVR Software Framework...
hinzugefügt ?

Dabei unterstelle ich dir einfach mal, dass du das AVR Studio 5 =) 
verwendest ;)

von M. V. (bmtil)


Lesenswert?

Ich verwende Atmel Studio 6.
Das mit dem ASF Wizard habe ich im ersten Anlauf gemacht und die 
entsprechenden Libraries zugefuegt. Das Problem beim kompilieren war 
dann, dass der Linker anscheinend nicht verstanden hat welches Board ich 
benutze (Schon der ASF Wizard hat ein Fenster ausgegeben mit einer 
Warnung dass bei meinem Board wahrscheinlich nichts funktioniert wird).
Im Endeffekt muss ich anscheinend so vorgehen:
Durch den ASF Wizard die libraries (delay, power manager, sysclock, etc) 
zufuegen.
Dann in die entsprechenden .h und .c Dateien dieser Libraries reingehen 
und diese an mein Board anpassen (zum Bsp. in den pll.h explizit sagen 
dass ich die interne 32kHz nutze und meine pll Pins nicht angeschlossen 
sind).
Dann das ganze Ding nochmal durchkompilieren, hoffen das alles passt und 
draufflashen.

Meine Fresse, so ein geraffel um 4 Zeilen Code dem Controller 
beizubringen -.-

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.