LCD-program med avrlib - storleken HAR betydelse!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Micke_N
Inlägg: 26
Blev medlem: 23 oktober 2005, 20:53:53

LCD-program med avrlib - storleken HAR betydelse!

Inlägg av Micke_N »

Jag tänkte knåpa ihop ett litet "Hello world"-program till en ATtiny2313 och en gammal LCD från en Ericsson GA628 som hamnat under släggan. Eftersom jag inte är så säker på hur LCDn fungerar tänkte jag använda beprövad kod så långt som möjligt och då tog jag till i2c-bit-bangar-varianten från avrlib för att utesluta kodfel i protokollet.

Efter det obligatoriska nybörjarstrulet med Makefilen (länge sen sist) fick jag hela härligheten att kompilera. Hexfilen blev mastiga 9 k! Ingen risk att det går att klämma in i min tiny ens med skohorn. Så nu undrar jag om det helt enkelt är så att jag måste gå igenom hela trädet med inkluderade filer och kommentera bort alla onödiga definitioner? Eller finns det något annat smart sätt att utesluta all oanvänd kodmassa?

/Micke
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Vad sägs att kolla hur LCD:n kommunicerar och skriva ett/två eget lib.
Ett för lcd och ett för i2c.

För testa LCD:n så kan man alltid gå upp till mega88 eller så.
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

Du kan ju gå andra vägen också. dvs kopiera in de funktioner du vill ha, och sen klistra in saker som kompilatorn tycker fattas.
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Inlägg av exile »

Avrlib är inte så optimerat, man kan spara 160byte genom att byta ut delay rutinerna i i2csw.c mot:

Kod: Markera allt

#define QDEL	asm volatile("rjmp .+0"); asm volatile("rjmp .+0"); asm volatile("nop");
#define HDEL	asm volatile("rjmp .+0"); asm volatile("rjmp .+0"); asm volatile("rjmp .+0"); asm volatile("rjmp .+0"); asm volatile("rjmp .+0");
Nu är det här ingen super optimering... man skulle säkert kunna spara 100byte till genom ytligare optimeringar bara på delay rutinen.

Vilken Optimerar använder du på gcc? (om du använder gcc)
Jag skulle rekommendera att du använder -Os, Halverar storleken på den generade koden som kompilatorn ger ut jämfört med -O0 ^^
Anledningen till jag fundera är att i2csw.c vid kompilering blir ca 600byte...

Att ange Hex- filens storlek är lite miss visande (inte helt), hex filens storlek kan multipliceras med 0.372.

Det är bättre att använda ett skript som visar storleken på "programet" den visar även hur mycket ram som har används oxå ^^

Om du använder AVRStudio så kör skriptet automatiskt när man kompilerar ^^
Micke_N
Inlägg: 26
Blev medlem: 23 oktober 2005, 20:53:53

Inlägg av Micke_N »

Tack för tipsen, nu är det snart är helg så då blir det lite mer test.
Skriv svar