Den funktion jag har skrivit ser ut såhär:
Code: Select all
write_ints(int siffra)
{
char tecken;
if ((siffra/1000) >= 1)
lcd_write_byte((siffra / 1000) + 48);
else
lcd_write_byte(' ');
siffra = (siffra - (siffra / 1000) * 1000);
if((siffra/100) >= 1)
lcd_write_byte((siffra / 100) + 48);
else
lcd_write_byte(' ');
siffra = (siffra - (siffra / 100) * 100);
if((siffra/10) >= 1)
lcd_write_byte((siffra / 10) + 48);
else
lcd_write_byte(' ');
siffra = (siffra - (siffra / 10) * 10);
lcd_write_byte(siffra + 48);
}
Just nu fungerar den inte perfekt, för nollor blir mellanslag istället. Det kanske jag helt enkelt bara löser genom att skriva en nolla istället för ett mellanslag. Men jag hade inte planerat att göra så, helst löser jag det med ännu en liten koll.
Ett riktigt problem som jag har är att den är otroligt platsineffektiv. Bara denna lilla funktion tar upp ca: 3% av kapselns minne. Jag har skrivit en fullständig lcd-drivrutin och en hel del mer på bara 9%. Kan man på något annat sätt skriva rutinen på ett mer effektivt sätt?