Sida 4 av 4

Postat: 16 april 2007, 21:24:15
av Korken
Okej, men.. Vad menar du?
Ska jag skriva små snuttar med PROGMEM anvädning som ni testar?
Eller vad är detr du menar?

Jo, det är inte en fast 7x5 matris utan variable bredd.

//Emil

Postat: 16 april 2007, 22:13:26
av cykze
Nej, jag menade att du ska skriva lite mindre kod som bara testar att läsningen från Flash-minnet fungerar. Sen när du känner dig säker på det kan du fortsätta och lägga in det i ditt riktiga program. Det var bara ett tips för att öka din förståelse för vad du håller på med. :)

Postat: 16 april 2007, 22:57:18
av Korken
Aha, nu är vi på samma sida. :)

//Emil

Postat: 17 april 2007, 18:06:52
av Korken
Icecap skrev:På mig verkar det som att du vill göra den mest ineffektiva och långsamma kod som möjligt men det kanske är för att"Jag förstår inte heller riktigt din kod".
Påpeka gärna vad du menar så ska jag försöka fixa det!
För jag är inte 100% när det kommer till programmering och då blir det inte den mest perfekta koden på engång och dåfår ni gärna säga till så jag kan effektivisera min kod.

//Emil

Postat: 17 april 2007, 19:33:16
av Icecap
Du kopierar i ett kör, du gör en massa switch() och när allt detta är klart gör du själva jobbet.

Effektivt i hastighet:
1: Indexera.
2: Läs mängden av data
3: Skriv in dessa data till skärmen.

Varför kopiera så mycket?
Varför en massa switch()?

Visst, tabellen kommer att fylla lite men det du kan spara i tabell kommer du att kasta bort ett antal gånger om med alla memcpy(), switch() osv.

Hade du kört med fast storlek på tecknen hade du sparat 256 bytes bara på tabellen.

Det sätt jag anger är kanske inte det snabbaste men bra nära, det är enkelt och överskådligt, enkelt att ändra men det kräver att man skriva HELA jävla tabellen in innan man börjar.

Själv kopierade jag tomma rader i ett helvetes kör och sedan fyllde jag i de olika bitpatterns allt eftersom.

Postat: 17 april 2007, 20:32:48
av Korken
Har fixat det.
Har nu så switchen bara ger ett värder som är teckenets platts i minnet.

//Emil

Postat: 18 april 2007, 07:33:18
av Icecap
Vet du hur en 'switch()' fungerar ens??

Kod: Markera allt

switch(Någonting)
  {
  case 0:
  break;
  case 1:
  break;
  case 2:
  break;
  case 3:
  break;
  case 4:
  break;
  default:
  }

motsvaras i effekt av:
if(Någonting == 0)
  { // case 0:
  }
else if(Någonting == 1)
  { // case 1:
  }
else if(Någonting == 2)
  { // case 2:
  }
else if(Någonting == 3)
  { // case 3:
  }
else if(Någonting == 4)
  { // case 4:
  }
else
  { // default:
  }
Så ska du case'a till t.ex. 245 blir det en jävla massa 'if(xx == yy)' som ska genomlöpas.

Jag tror att du sparar programminne vid att ha tabellen som jag beskrev den, ska det vara riktigt snålt ska du hålla alla tecken till en 5*7-matris (vilket samtidig gör det enkelt att rada upp text), varje switch-case kostar ju en laddning av en pekare vilket i sin tur ger minst 5 bytes EXTRA per tecken, data-innehållet i teckentabellen ska ju LIKAVÄL anges.

Ditt case'ande gör alltså att programmet kör än långsammare och fyller än mer än det borde göra. Vill du snåla på platsen kan du beskära bottnen och toppen av tabellen och ta med det i indexeringen.

Kod: Markera allt

if((ch >= LOWEST_CHAR) && (ch <= HIGHEST_CHAR)) .... (indexera i tabellen med 'ch - LOWEST_CHAR')
else ..... (peka på tom plats)

Postat: 18 april 2007, 17:18:22
av Korken
Jag vet inte om du såg det men det vart en switch därför att tecknena INTE ligger på rad i ASCII tabellen.
Jag har bara de tecken jag behöver och då vart det tuvärr så att det vart en switch.

Och, ja jag vet hur en switch fungerar och jag vet hur if-then-else fungerar.

//Emil

Postat: 18 april 2007, 19:36:07
av Icecap
Du behöver alltså teckenkoder från 32 (0x20) till 127 (0x7f) eller liknande.

Gör då en tabell över dessa koder, med fast längd behöver du bara 5 bytes per tecken, med variabel kan du faktisk nöja dig med 5 bytes per tecken också om du använder MSB'n som stoppkod.

Sedan gör du en
if((ch >= ' ') && (ch <= sizeof(Tabell / 5)) p = Tabell[0][ch - ' '];
else p = Inget_Tecken;

Klart.

Edit: Glömde en sak: fattas det ett par tecken "i mitten" av tabellen är det bara att fylla "finns ej" i dom, de extra utrymme sparar du in på kod och effektivitet.

Postat: 18 april 2007, 23:20:21
av Korken
Okej, nu ser ja hur du tänker!
Ska skriva om koden så. Tackar! :D

//Emil