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
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
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
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
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
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
Hi binutils und avrlibc nicht vergessen. Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.