This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

'code U8 u8data' visible in all sources files ?

Hi all,

I've a file named FONT.H where are located some text fonts in code.
They are defined and initialized like this:

code U8 au8FontSystem5x8[]= {
0x00,0x00,0x00,0x00,0x00, /* Espace	0x20 */
0x00,0x00,0x4f,0x00,0x00, /* ! */
...
...
}

My graphic routines are located in a GLCD.C file.
In the GLCD.H, I've defined and declared structures like this :
typedef struct FONT_DEF
{
	U8 u8Width;     	/* Character width for storage         */
	U8 u8Height;  		/* Character height for storage        */
	U8 *au8FontTable;       /* Font table start address in memory  */
} FONT_DEF;

struct FONT_DEF *pptr;

extern struct FONT_DEF code Font_System5x8 = {5, 8, au8FontSystem5x8};
extern struct FONT_DEF code Font_System7x8 = {7, 8, au8FontSystem7x8};

Using these structures in the GLCD.C file is working fine.


However, an other module which includes the GLCD.H file, should call a Graphic function located in the GLCD.C file which display text and pass the pointer to a font structure as parameter :
GLCD_Printf("Hello world", &FontSystem5x8);

But, an error message occurs when including GLCD.H :
***ÿERROR 202 IN LINE 35 OF GLCD.H: 'au8FontSystem5x8': undefined identifier

This means that the code defined in FONT.H isn't available for other modules than GLCD.C where it's included.

The problem is that I can't include FONT.H in all the modules because of multiple definition and code size.
But how to make this code visible everywhere.

I've tried :
extern code U8 au8FontSystem5x8[]= {
0x00,0x00,0x00,0x00,0x00, /* Espace	0x20 */
0x00,0x00,0x4f,0x00,0x00, /* ! */
...
...
}

without success


Any suggestion ?

Regards
Stephane

Parents
  • I understand that you use a condition to put or not the 'extern' command.
    When including the *.h file from an other module, the datas in code are then declared as extern.

    But when always setting to 'extern', the datas in code are not seen in my other module.

    I don't understand why it isn't, and I don't understand how your code above will solve it... What have I missed ?

    Stephane

Reply
  • I understand that you use a condition to put or not the 'extern' command.
    When including the *.h file from an other module, the datas in code are then declared as extern.

    But when always setting to 'extern', the datas in code are not seen in my other module.

    I don't understand why it isn't, and I don't understand how your code above will solve it... What have I missed ?

    Stephane

Children