Probleme bei der Portierung von ATMEGA163 auf ATMEGA16

Gast #76010
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
Gast #76011
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
Gast #76014
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
Angehängte Dateien:
Gast #76015
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
Gast #76019
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren