Optimering av vektor i C

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Optimering av vektor i C

Inlägg av dangraf »

Hej!
Jag har precis lyckats få igång en grafisk display från en slaktad Nokia5110 med en pic 18F248.
Om det är någon som är intresserad hur jag har gjort så finns det exempel här:
http://serdisplib.sourceforge.net/ser/pcd8544.html
http://www.microsyl.com/nokialcd/nokialcd.html

Problemet:
Det finns ingen ASCII tabell i displayen som det finns i de numeriska, alltså måste man definiera upp hur varje bokstav ser ut. Varje bokstav man vill rita ut tar 5 byte vilket blir ganska mycket om man vill ha med hela ACII tabellen.

kompilatorn (C18) klagar om man försöker göra en vektor av typen:
static const byte FontLookup [][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
.
.
.
.
.
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
{ 0x44, 0x64, 0x54, 0x4C, 0x44 } // z
}

jag är inte så jätte bra på det här med vart saker hamnar i minnet. men jag antar att vektorn lägger sig i ramminnet.

storleken på minnet i kretsen är enligt databladet:
Words: 8192x16 (16k)
eeprom: 256 (bytes)
ram: 768 (bytes)

Den totala storleken på vektorn som jag vill lagra är minst 50 tecken, alltså 250 bytes.

Finns det nåot sätt att kringgå detta? så att man kan lägga det i programminnet istället, för jag ska ju bara hämta information, inte ändra i den...

MVH / Daniel Grafström
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

byte const FontLookup [][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp

det booorde funka

edit: hmm kompilatorn bara sväljer det rakt av, förstår ingenting nu, gonatt

/Johan
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

Jag kanske uttryckte mig dåligt. Den klagar inte över definitionen, utan att den tar för mycket minne.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Du ska lägga grafiken i programminnet (flash) som lookup-tables, annars lär du inte få plats med mycket kul. Med 16k programminne får du plats med några bilder också :)
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Ta bort 'static'!

'static' används till att berätta att den följande variablens minneslokation inte får återanvändas någon annan stans i programmet och den betyder alltså RAM.
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Borde det inte hamna i flash eftersom vektorn är deklarerad som const? Annars kan det krävas ett macro-direktiv. Konsultera kompilatordokumentationen.
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Ok, 'static' kan ställa till det. Man ska ha i åtanke att C är inte gjort för Harvard-arkitektur (dvs separat program- och dataminne), vilket kan göra att vissa saker inte är definierade och därmed kompilatorberoende.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

Jag har testat ta bort "static" men får samma felmedelnande.
Felmeddelandet jag får ser ut såhär:

Error - section '.idata_nokia_disp.o' can not fit the section. Section '.idata_nokia_disp.o' length=0x000001a4

Hur gör jag om jag vill lägga vektron i flashen?
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Du får nog ta och titta i manualen till kompilatorn. Som sagt tycker jag att 'const' borde se till att vektorn hamnar i flash-minnet. Men det finns som sagt inga garantier för detta utan kan variera från kompilator till kompilator. Du har valt rätt device i kompilatorn va?
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

Jo, jag har valt rätt device, annars går det inte ens att flasha ner den i processorn..
Michel
Inlägg: 436
Blev medlem: 3 februari 2004, 18:08:04
Ort: Stockholm

Inlägg av Michel »

dangraf skrev:Jag kanske uttryckte mig dåligt. Den klagar inte över definitionen, utan att den tar för mycket minne.
Är inte det charmen med PIC?
:lol:

(sorry, kunde inte låta bli...)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Borde den inte rent naturlingt hamna i kodminnet, eftersom den ändå måste finnas där innan den annars hamnar i RAM-minnet (enligt Harvard-arkitekturen)?
Skapar den annars kod själv som flyttar ut datat till RAM när processorn initierar?

Mvh
speakman
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Testa "rom byte FontLookup ..."
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

TACKAR!! nu funkar det :D
Skriv svar