Sida 1 av 1

LCD-program med avrlib - storleken HAR betydelse!

Postat: 17 januari 2007, 22:40:39
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

Postat: 17 januari 2007, 22:58:52
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å.

Postat: 18 januari 2007, 08:48:42
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.

Postat: 18 januari 2007, 16:38:27
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 ^^

Postat: 19 januari 2007, 11:41:56
av Micke_N
Tack för tipsen, nu är det snart är helg så då blir det lite mer test.