51单片机warning和error

今天遇到一个error,非常的痛苦,keil无法定位只给error。

*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  SMALLCHARS
  MODULE:  .\Objects\lcd5110.obj (LCD5110)

SMALLCHARS是定义的字库,单独定义在ziku.h文件中

code unsigned char SmallChars[]=
{
    0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,//0 0
    0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,//1 
    0x00, 0x42, 0x61, 0x51, 0x49, 0x46,//2 
    0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,//3
    0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,//4
    0x00, 0x27, 0x45, 0x45, 0x45, 0x39,//5
    0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,//6
    0x00, 0x01, 0x71, 0x09, 0x05, 0x03,//7
    0x00, 0x36, 0x49, 0x49, 0x49, 0x36,//8
    0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,//9
    0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,//A 10
    0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,//B
    0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,//C
    0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,//D
    0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,//E
    0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,//F
    0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,//G
    0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,//H
    0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,//I
    0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,//J
    0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,//K
    0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,//L
    0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,//M
    0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,//N
    0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,//O
    0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,//P
    0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,//Q
    0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,//R
    0x00, 0x46, 0x49, 0x49, 0x49, 0x31,//S
    0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,//T
    0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,//U
    0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,//V
    0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,//W
    0x00, 0x63, 0x14, 0x08, 0x14, 0x63,//X
    0x00, 0x07, 0x08, 0x70, 0x08, 0x07,//Y
    0x00, 0x61, 0x51, 0x49, 0x45, 0x43,//Z 35

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// 36 ¿Õ¸ñ
    0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : 37
    0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - 38
    0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / 39
    0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . 40
    0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , 41
    0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 42
    0x08, 0x08, 0x08, 0x2A, 0x1C, 0x08,// -> 43

    0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a 44
    0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
    0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
    0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
    0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
    0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
    0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g 
    0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
    0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
    0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
    0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
    0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l 
    0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
    0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
    0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
    0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
    0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
    0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
    0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
    0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
    0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
    0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
    0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
    0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
    0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
    0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 // z 69
};

接着在lcd5110.c中包含ziku.h文件,使用SmallChars数组,然后就出错了。我这是从32上直接移植的,32上没有问题,但是51就是error,我是怎么都不明白会多次定义。后来google了一下啊,发现51不能直接通过包含头文件的方式来使用文件中的全局变量,所以只能通过extern关键字来将ziku.h中定义的全局变量引用到lcd5110.c文件中使用。编译了一下发现可以了。

*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_OLED_WRITE_NUM4?OLED

上面的是警告,一般警告就直接忽略了,但是看着很不舒服,就google了一下,上面的意思是我定义了OLED_WRITE_NUM4这个函数,但是我的程序运行时没有使用。额。。。。这种警告我猜测可能是为了让我们删除不必要的代码,减小code大小。

你可能感兴趣的:(单片机)