Custom char LCD displa behulp PIC16F877

F

flystehu

Guest
Hullo,
Ik probeer weer te geven op maat met behulp van tekens op het LCD PIC 16F877.
De compiler die ik gebruik is IAR.
Toen ik compileren, is het ok.Hewever, bij het maken van het programma en produceren. Hex.
Een fout komt, zeggende:

Making doelgroep Release ...
Link ...
Fout [e104]: Failed to fit alle segmenten in bepaalde reeksen.Probleem ontdekt in segment OVERLAY0.Niet in staat om 3 blok (s) (0x95 byte (s) totaal) in 0x5a byte (s) van het geheugen.Het probleem opgetreden bij het verwerken van het segment plaatsing commando "-P (gegevens) OVERLAY0, WRKSEG, BANK0_I, BANK0_Z, BANK0_N = 20-07F", waar op het moment van plaatsing van het beschikbare geheugen reeksen zijn "20-79"

Totaal aantal fouten: 1
Totaal aantal waarschuwingen: 0

Iedereen kan me helpen herinneren hoe verhelp de fout?
Is het omdat het interne geheugen van de PIC is uitgeput?

//------------------------------------------------ -----
void load_CGRAM_1 (int * p)
(
int i;
LCD_RS = 0;
lcd_write (0x40);
LCD_RS = 1;
for (i = 0; i <32; i )
lcd_write (p );
)
//------------------------------------------------ -----
void load_CGRAM_2 (int * p)
(
int i;
LCD_RS = 0;
lcd_write (0x60);
LCD_RS = 1;
for (i = 0; i <32; i )
lcd_write (p );
)
//------------------------------------------------ ----------------
void display_CGRAM (int Code1, int code2, int code3, int code4)
(
LCD_RS = 0;
lcd_write (0x80);
lcd_putch (Code1);
lcd_putch (code2);

lcd_putch (0x20); / / ruimte
lcd_putch (0x20); / / ruimte
lcd_putch (code3);
lcd_putch (code4);
)

//------------------------------------------------ ----------------
void main ()
(
int chinese_character_matrix_1 [32] =
(
0x02, 0x02, 0x04, 0x0c, 0x14, 0x04, 0x04, 0x04,
0x04, 0x04, 0x1f, 0x04, 0x0e, 0x15, 0x1f, 0x15,
Waarde 0x01, 0x00, 0x07, waarde 0x01, waarde 0x01, 0x03, 0x00, 0x07,
0x18, 0x10, 0x1e, 0x08, 0x18, 0x1c, 0x10, 0x1e,
);
int chinese_character_matrix_2 [32] =
(
0x02, 0x02, 0x04, 0x0c, 0x14, 0x04, 0x04, 0x04,
0x04, 0x04, 0x1f, 0x04, 0x0e, 0x15, 0x1f, 0x15,
0x04, 0x04, 0x10, 0x08, 0x00, 0x05, 0x09, 0x13,
0x0e, 0x0a, 0x0e, 0x0a, 0x0e, 0x1f, 0x15, 0x15,
);

int chinese_character_matrix_3 [32] =
(
0x00, waarde 0x01, 0x04, 0x02, 0x0a, 0x0a, 0x09, 0x08,
0x00, 0x00, 0x08, 0x00, 0x02, 0x02, 0x02, 0x1e,
0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x09, 0x0b, 0x11,
0x04, 0x0f, 0x0a, 0x0a, 0x0f, 0x0a, 0x0a, 0x17,
);
int chinese_character_matrix_4 [32] =
(
0x04, 0x00, 0x0e, 0x04, 0x04, 0x04, 0x0c, 0x07,
0x0e, 0x00, 0x1f, 0x08, 0x0a, 0x0f, 0x00, 0x1f,
0x0e, 0x00, 0x1f, 0x08, 0x08, 0x0a, 0x0a, 0x0f,
0x04, 0x04, 0x1f, 0x05, 0x05, 0x05, 0x05, 0x0b,
);iniPort ();
lcd_init ();

load_CGRAM_1 (chinese_character_matrix_1);
load_CGRAM_2 (chinese_character_matrix_2);
display_CGRAM (0x04, 0x05, 0x06, 0x07);

DelayUs (40);
while (1) ()
)

 
instead of int
.

Heb je ooit overwegen te verklaren uw arrays als unsigned char
in plaats van int.Dit zal halveren van het ROM-verbruik en ik denk dat er geen noodzaak voor integers., so that they are used from ROM and don't get copied to the RAM.

Bovendien moet u verklaren de arrays als const,
zodat ze worden gebruikt uit rom en krijgt niet gekopieerd naar het RAM-geheugen.
Voorbeeld:
const unsigned char chinese_character_matrix_1 [32] =
(
...
)

(IAR nooit gebruikt, dus niet zeker weet of de syntaxis correct is voor IAR -> RTFM)

 
Bedankt.Ik verklaarde de array als const unsigned char en zet hem buiten de belangrijkste functie.Het werkt perfect!

M! K schreef:

instead of int
.
Heb je ooit overwegen te verklaren uw arrays als unsigned char
in plaats van int.

Dit zal halveren van het ROM-verbruik en ik denk dat er geen noodzaak voor integers.

, so that they are used from ROM and don't get copied to the RAM.
Bovendien moet u verklaren de arrays als const,
zodat ze worden gebruikt uit rom en krijgt niet gekopieerd naar het RAM-geheugen.

Voorbeeld:

const unsigned char chinese_character_matrix_1 [32] =

(

...

)(IAR nooit gebruikt, dus niet zeker weet of de syntaxis correct is voor IAR -> RTFM)
 

Welcome to EDABoard.com

Sponsor

Back
Top