今天遇到一个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大小。