Forum: Compiler & IDEs Atmega168 + Eclipse + gcc Linker = Probleme mit "Strings"


von N. K. (bennjo)


Lesenswert?

Also nachdem mich dieses Problem jetzt 2 Tage meines Lebens gekostet,
und fast um den Verstand gebracht hat, will ich es anderen ersparen:

Wenn man für den Atmega168 compiliert MUSS man undbedingt dem Linker
mit dem Parameter "-mmcu=atmega168" mitteilen, dass man selbiges
tut.

Ansonsten laufen kleine Test-Programme...sobald es etwas komplizierter
wird oder sobald man char* Konstanten also Strings verwendet bekommt
man ein absolut nicht-deterministisches Verhalten...nach jedem flashen
verhält es sich anders!


Ich hoffe man wird diesen Eintrag mit der Suche finden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Man muss dem Link-Kommando des GCC immer das passende
-mmcu übergeben, das man auch zum Compilieren benutzt hat --
nicht nur beim ATmega168, sondern einfach immer.

(Also, man muss natürlich nicht, aber wenn man das nicht tut,
müsste man anderweitig sicherstellen, dass der Linker auch die
richtigen Bibliotheken, die richtige crtXXX.o usw. benutzt.
Die Angabe von -mmcu vereinfacht dieses Vorgehen eben nur.)

von Arwed Reichel (Gast)


Lesenswert?

Hallo Nikias,

ich moechte wegen Speichermangels von einem ATMega8 auf den ATMega168
umsteigen; beim compilieren meckert der GCC (unter Linux) allerdings,
dass er den 168er nicht kennt:
#avr-gcc -g -mmcu=atmega168 -Wall -Wstrict-prototypes -Os
-mcall-prologues -Os -c i2ctemp_avr_main.c
>unknown MCU `atmega168' specified
>Known MCU names: ... (alle moeglichen, aber eben dieser nicht)

Der GCC ist
# avr-gcc --version
>avr-gcc (GCC) 3.3 20030512 (prerelease)
>Copyright (C) 2003 Free Software Foundation, Inc.

Wo kann ich denn die EInstellungen dazu aendern?
DAnke und viele Gruesse von Arwed

von Karl H. (kbuchegg)


Lesenswert?

>avr-gcc (GCC) 3.3 20030512 (prerelease)

                   ****
Der ist von 2003, wir schreiben aber schon 2006

> Wo kann ich denn die EInstellungen dazu aendern?

Mit einer 'Einstellung ändern' alleine wird das wohl nichts.
Was der Compiler nicht kennt, kennt er nicht. Noch nicht
mal wenn du mit dem Fuss aufstampfst und zornig 'Ich will
aber' schreist.

Wie wäre es ganz einfach mit: eine neuere Version downloaden.

von Arwed Reichel (Gast)


Lesenswert?

Hi Nikias,

dass Schreien nicht hilft, ist schon klar ;-)
Ich hatte mal gehoert, dass die GCC sowas wie ein ProzessorConfig-File
haetten ...

Habe jetzt hier im Forum den Link auf
http://www.roboternetz.de/wissen/index.php/Avr-gcc_und_avrdude_installieren
gefunden und compiliere gerade alles; binutils und avr-gcc sind schon
fertig ...

Haettest Du noch einen Tip wegen der Fusebits? Sind die anders als beim
ATMega8? Ich habe einen externen Quarz und verwende avrdude.

Danke und viele Gruesse
Arwed

von Karl H. (kbuchegg)


Lesenswert?

> Ich hatte mal gehoert, dass die GCC sowas wie ein
> ProzessorConfig-File haetten ...

Da willst du nicht wirklich hineinschauen :-)

> Haettest Du noch einen Tip wegen der Fusebits? Sind die anders als
> beim ATMega8?

Keinen blassen Schimmer. Aber ich weiss jemanden der das weiss :-)
Atmel. Datenblatt downloaden, nachschauen.

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.