Forum: Compiler & IDEs Compilieren der Waspmote Library mit AtmelStudio (ähnlich arduino)


von Christian A. (see0jay)


Lesenswert?

Hallo Leute!

Muss für meine Schulabschlussarbeit ein Projekt mit der WSN-Platform von 
Libelium umsetzen. Nachdem die IDE sehr unprofessionell ist (gleich wie 
Arduino) möchte ich die Libraries direkt über das Atmel Studio 
kompilieren.

Habe mich derzeit schon zwei Wochen versucht, die API-Bibliotheken 
direkt über das Atmel Studio 6 zu kompilieren.... Leider ohne Erfolg!
Einige Fehler habe ich bereinigen können, jetzt stecke ich bei einem 
Memory overflow fest: "region text overflowed by 119306 bytes"

Ich würde mich sehr freuen und auch sehr dankbar sein, wenn sich ein 
µC-guru die Sache mal ansieht!?!? Muss meine Arbeit in 2 Monaten abgeben 
und komme einfach nicht weiter :(

Mein main.cpp sieht wie folgt aus:
1
#define F_CPU 8000000
2
#define __AVR_LIBC_DEPRECATED_ENABLE__ 1
3
#include <avr/io.h>
4
#include "WaspClasses.h"
5
6
  void setup();
7
  void loop();
8
9
10
void setup()
11
{
12
  
13
  
14
}
15
16
void loop()
17
{
18
  while(1);
19
}
20
21
int main(void)
22
{
23
  init();
24
25
  setup();
26
  
27
  for (;;)
28
  loop();
29
  
30
  return 0;
31
}

Die API ist hier erhältlich:
http://www.libelium.com/v11-files/downloads/waspmote-api-v.032.zip

Bitte um Hilfe!
LG SeeJay

von troll (Gast)


Lesenswert?

Christian Anders schrieb:
> "region text overflowed by 119306 bytes"
Optimierung eingeschaltet? Den richtigen µP gewählt?

von Christian A. (see0jay)


Lesenswert?

Ja, das hab ich... Das Problem liegt irgendwie daran, dass diese IDE von 
Waspmote eine ältere GCC version verwendet und Atmel Studio die 
aktuelle.

von Karl H. (kbuchegg)


Lesenswert?

Christian Anders schrieb:
> Ja, das hab ich... Das Problem liegt irgendwie daran, dass diese IDE von
> Waspmote eine ältere GCC version verwendet und Atmel Studio die
> aktuelle.

Das glaub ich eigentlich nicht.
Nicht bei einer Programmgröße (denn das ist die .text Section) von 
119kB.

In
#include "WaspClasses.h"
wird alles inkludiert, was es überhaupt gibt und ich denke mal, du hast 
auch alles in dein Projekt inkludiert, was da an cpp-Files und c-Files 
auf dem Directory liegt.
Und der Linker, der linkt das alles einfach zusammen ohne Rücksicht 
darauf, ob es vom Programm überhaupt benutzt wird oder nicht.

Genau da, bei den Linker-Einstellungen, dürfte dein Problem liegen.

von Christian A. (see0jay)


Lesenswert?

Danke für den Hinweis!
Hab es hinbekommen, hier eine kurze Anleitung, vielleicht benötigt es ja 
mal jemand:

1.) Atmel Studio starten und neues GCC C++ Executeable Project erstellen
2.) Unter Directories der Projekteinstellungen alle API Folder der 
Library einbinden (Für den C-Compiler und für den C++ Compiler) also 
zwei mal
3.) Unter Symbols (jeweils für C-Compiler und C++ Compiler) folgende 
anlegen:
F_CPU=8000000
__AVR_LIBC_DEPRECATED_ENABLE__=1
4.) Bei den Linker Settings unter Optimization folgende Option anwählen:
Garbage collect unused sections (-Wl, --gc-sections)
5.) Im Solution Explorer für das Projekt einen neuen Ordner namens API 
anlegen und alle c und cpp Files der api hinzufügen. (keine header 
files)
6.) Kompilieren
7.) Es erscheinen möglicherweise noch Fehlermeldungen:
Beispielsweise "variable xxx must be const in order to be put into 
read-onle section...
Hier den Fehler anklicken um zur Codezeile zu navigieren.
Das Schlüsselwort const ganz am Anfang der Variablendefinition einfügen.
8.) Solange Kompilieren und Sourcen modifizieren bis alle 
const-Schlüsselwörter eingefügt wurden (ca. 5 mal)
->Fertig

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.