Sida 1 av 1

Optimering av vektor i C

Postat: 27 januari 2005, 01:03:15
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

Postat: 27 januari 2005, 01:33:13
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

Postat: 27 januari 2005, 01:47:04
av dangraf
Jag kanske uttryckte mig dåligt. Den klagar inte över definitionen, utan att den tar för mycket minne.

Postat: 27 januari 2005, 08:57:20
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å :)

Postat: 27 januari 2005, 10:57:33
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.

Postat: 27 januari 2005, 10:58:51
av henkebenke
Borde det inte hamna i flash eftersom vektorn är deklarerad som const? Annars kan det krävas ett macro-direktiv. Konsultera kompilatordokumentationen.

Postat: 27 januari 2005, 11:10:09
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.

Postat: 27 januari 2005, 11:12:33
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?

Postat: 27 januari 2005, 11:26:50
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?

Postat: 27 januari 2005, 11:38:57
av dangraf
Jo, jag har valt rätt device, annars går det inte ens att flasha ner den i processorn..

Postat: 27 januari 2005, 12:12:55
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...)

Postat: 27 januari 2005, 12:16:13
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

Postat: 27 januari 2005, 12:31:47
av cyr
Testa "rom byte FontLookup ..."

Postat: 27 januari 2005, 12:43:39
av dangraf
TACKAR!! nu funkar det :D