Forum: Compiler & IDEs Probleme bei der Portierung von ATMEGA163 auf ATMEGA16


von Lolly (Gast)


Lesenswert?

Hallo leuts,

ich versuche gerade mein Programm für eine Wetterstation vom ATMEGA163
auf den ATMEGA16 zu portieren. Auf dem ATMEGA163 hat das Programm nur
ca. 11KByte. Gebe ich dem AVRGCC jetzt an, er solle das gleiche Progg
für den 16er compilieren meint er der Platz würde nicht ausreichen, da
das Programm zu gross sei!
Warum wird das Programm über 5kByte größer??

Danke schon mal,
Gruß Lolly

von Matthias (Gast)


Lesenswert?

Hi

da ATMega163 und ATMega16 der selben Architektur (avr5) angehöhren
sollte der generierte Code eigentlich identische sein. Kannst du den
Code hier mal reinstellen? Ich jag ihn dann mal durch den Compiler und
schau mir an was dabei rauskommt.

Matthias

von Lolly (Gast)


Angehängte Dateien:

Lesenswert?

Hi Matthias,

hier das C-File

Gruss Lolly

von Lolly (Gast)


Angehängte Dateien:

Lesenswert?

und das H-file

Gruss Lolly

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Im Anhang findest du eine Version die für den ATMega16 durchkompiliert
(aktueller WINAVR). Es kommen zwar einige Warnungen aber die behebst du
bitte selber oder schaust ob man sie ignorieren kann.

Jetzt noch ein paar Bemerkungen:

1. Teile deinen Source in mehrere Dateien. Das Ding ist
unübersichtlich.

2. Verwende kein outp(xxx,yyy); xxx = yyy; tuts auch und ist klarer.

3. sbi(UCSRB,3); Schreibt man besser als UCSRB |= (1<<3);

4. Funktionsprototypen sollten so
   datentyp funktionsname(datentyp);
   und nicht so
   datentyp funktionsname();
   aussehen. Wobei void als Datentyp zu betrachten ist.

5. Verwende unbedingt einen aktuellen Compiler.

6. Achte darauf was der Compiler dir sagt. Zwei Meldungen deuten auf
einen Programmierfehler hin.

Nicht böse sein. Das sind nur gut gemeinte Hinweise die einem das Leben
erleichtern.

Matthias

von Lolly (Gast)


Lesenswert?

Okay, danke mal! Die Wetterstation war mein erstes Programm in C.
Bisher habe ich mich mit Bascom durchgeschlagen.

Ich verwende den avrgcc unter linux und bin grad dabei mir die neuen
versionen zu besorgen. Das Programm ist prinzipiell fertig und läuft
auch schon auf 20 Wetterstationen.
Jetzt wollten noch ein paar leute die wetterstation nachbauen und
reichelt verkauft keine atmega163 mehr :-(
Um die Warnings werd ich mich kümmern, danke für die tipps. Meine Docu
zur avrlib waren schon ziemlich alt und in der stand z.b. ausdrücklich
drin, dass register=wert nicht funktioniert.
Durchkompiliert ist das Proggi immer.. es sei nur zu gross für den
atmega16.

Vielen Dank für deine schnelle Reaktion.

Bis dann,
Florian

von Matthias (Gast)


Lesenswert?

Hi

dann war das aber ein sehr alter GCC. IIRC funktioniert register =
wert; schon über ein Jahr. Daher evtl. auch die Probleme mit dem
ATMega16.

Matthias

von Lolly (Gast)


Lesenswert?

ja wars.. ist irgendwie version 1.2002

ich hab das ganze paket fertig von einem bekannten gekriegt..

naja.. grad compiliert mir die neueste version vom gcc...

Cu then,
Lolly

von Matthias (Gast)


Lesenswert?

Hi

binutils und avrlibc nicht vergessen.

Matthias

von Lolly (Gast)


Lesenswert?

Nach mehreren Stunden die neue Version vom GCC zum compilen zu bewegen
funktioniert es jetzt endlich.
Ich habe jetzt einen selbstkompilieren gcc-3.3.2-avr mit den neuesten
binutils und avr-libc. Und siehe da: es funktioniert auch mit dem
atmega16. Das file wird nun nur noch 20Byte größer als für den 163er.

Vielen Dank für die Hilfe Matthias.

Cu then,
Lolly

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.