Hi, mein Projekt ist nun so groß das es nicht mehr in den AVR passt. Nun überlege ich ob ich noch irgendwie Platz sparen kann... Ich nutze zur Zeit einen Atmega48. Als Optimization ist -0s eingestellt. Landen damit auch alle nicht angesprochnen Funktionen mit im Hexfile? ALso Funktionen welche es gibt, aber nicht genutzt werden!? Was ist z.B. mit Funktionen mit einem Warning "Implicit declaration".Ist noch in der Entwicklungphase, habe ich noch keinen Prototypen für angegeben. Ist kein Problem, sind nur 2, aber es interessiert mich in dem Zusammenhang... JJ
habe nun mal auf -0s umgestellt, Rebuild all, gab eine Fehlermeldung:
\..\..\avr\bin\ld.exe: region text is full (test.elf section .text)
Keine Ahnung.
@Timmo:
Danke, guter Tip. Dennoch werde ich keine Wissenschaft daraus machen,
dafür lohnt es nicht... :-)
>>Atmega88/168/328
möchte ich vermeiden, lohnt nicht, habe den 48 noch liegen...
JJ
Zeig halt mal ein bisschen Code, dann kann man vielleicht auch so noch was finden.
>>Zeig halt mal ein bisschen Code,
ich stecke mitten drin, selbst wenn ich wollte wüsste ich nicht wo ich
anfangen soll. Deswegen wäre ich ganz froh zu wissen was das mit dem elf
Fiel Error auf sich hat...und vielleicht noch, ob man mit -03 besser weg
kommt als mit -0s falls man das überhaupt so sagen kann.
Sollte es nicht gehen werde ich für die Entwicklungsphase erstmal 2-
168iger nehmen...
JJ
Program: 4592 bytes (112.1% Full) (.text + .data + .bootloader) Data: 314 bytes (61.3% Full) (.data + .bss + .noinit) JJ
Jens schrieb: >>>Zeig halt mal ein bisschen Code, > > ich stecke mitten drin, selbst wenn ich wollte wüsste ich nicht wo ich > anfangen soll. Deswegen wäre ich ganz froh zu wissen was das mit dem elf > Fiel Error auf sich hat... Dein Programm ist zu groß Entweder du siehst so mal über den Code drüber, oder du lässt dir ein Map-File erzeugen und siehst da mal rein und fahndest nach Funktionen, die dir vergleichsweise groß vorkommen (für das was sie machen). Überall den kleinsten Datentyp nehmen, der möglich ist. Das kommt der Ausführungszeit als auch der Codegröße zu gute. Floating Point Arithmetik braucht viel Platz sprintf ist ein Codefresser. Viel Kleinvieh macht eben auch Mist. > Sollte es nicht gehen werde ich für die Entwicklungsphase erstmal 2- > 168iger nehmen... Ich kenn ja dein Programm nicht. Vielleicht ist da ja wirklich nichts mehr drinn um die Codegröße runterzubringen. Wenn dem so ist, dann wirds wohl darauf hinauslaufen. Ist dem aber nicht so, dann lernst du für die Zukunft mehr, wenn wer anderer da mal drüber schaut.
Jens schrieb: > @Timmo: > > Danke, guter Tip. Dennoch werde ich keine Wissenschaft daraus machen, > dafür lohnt es nicht... :-) Musst du auch nicht. Aber mit "avr-nm" kann man schonmal sehr gut herausfinden welche Funktionen die größten sind und die könnte man sich dann erstmal rauspicken und versuchen zu optimieren. Es kann schon viel bringen z.B. volatile Variablen die in einer Funktion mehrfach angefasst werden erstmal in eine lokale Variable zu kopieren und am ende den Wert dann wieder zurückzuschreiben. Ohne Code wird es für uns natürlich schwierig dir ein paar Tipps zu geben wo noch Optimierungspotential ist. Vielleicht hast du ja auch einen riesen Haufen Strings im Code... da würde ich dann erstmal versuchen ein paar Strings zu kürzen. Funktionen wie (s)printf etc. brauchen z.B. auch sehr viel speicher und sind oftmals unnötig. Auch float/double solltest du vermeiden. Aber wir wissen ja nicht was du da so hast.
minn erst mal den größeren AVR, dann bring zum Läufen. Dann würde ich mir überlegen, ob die Stückzahl den Minderpreis lohnt. Kenn ich aber, hab auch einige kleine Modelle, die man hobbymäßig garnicht kaufen sollte.
Jens schrieb: > Nun > überlege ich ob ich noch irgendwie Platz sparen kann... Häng den kompletten Code als Zip an, alles andere ist Kaffesatzleserei. Peter
bei mir macht der winavr2010 immer noch kleineren code als der aktuellste Atmel compiler aus dem Atmel studio6. Adib.
Jens schrieb: > Ich nutze zur Zeit einen Atmega48. Probiere die IAR-Kickstart Version für AVR. Die erzeugt sehr effizienten Code und ist bis 4k kostenlos.
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.