BL51: WARNING 16 (UNCALLED SEGMENT, IGNORED FOR OVERLAY …)
原因是声明的函数没有调用。才发生这个正告。
具体阐明见下面网址内部。
http://www.keil.com/support/docs/875.htm
解决办法:
1将没调用的函数部分注释掉。等用到的时分在撤销注释。
2调用一下,这个函数。(废话)
3运用条件编译。
#if 0
void uncalled_function (void)
{ }
#endif
碰到的问题
方针器材:C8051F340
编译环境:Keil uV4.
项目需求,界说了一个数组
U8 xdata recv_para[PARA_LENGTH]={0}; //PARA_LENGTH=64
该数组假如不加xdata润饰,会报错,提示ram空间不行。
*** ERROR L107: ADDRESS SPACE OVERFLOW
加上xdata润饰后,经过测验发现程序不对。debug调试也不履行。不可思议。
然后将xdata润饰符改为idata后。程序能够正常运转。可是这样的话界说的数组仍是会占用单片机内部ram空间。内部只要256字节ram
假如后续还要增加功用,或许内部ram仍是不行用。
所以想使用单片机的外部ram。也便是datasheet里边说的XRAM来寄存这个数组。datasheet里边说c8051f340这个单片机有个4k巨细的XRAM能够用。
经过查网上材料发现用润饰符xdata,是没有过错的。
网上有许多关于data,idata,xdata的用法文档,这儿就不引述了。
终究发现有个网友碰到的问题和我相同。
链接:http://www.amobbs.com/thread-4453022-1-1.html
链接:http://www.amobbs.com/thread-3950965-1-1.html
依据网友的解说:
1.初始化时刻太长 ,看门狗默许开,没关。
2.底子原因是初始化的时刻过长,超过了看门狗的时刻,初始化完结今后才干进入main函数,这时关狗现已来不及了,这时要修正startup.a51(记得把它参加复制到工程而不是修正体系的),在第一条指令前参加关狗的指令,在main函数里再开(假如需求的话)。
所以,我在STARTUP.A51文件里边第131行增加了一条封闭看门狗的句子。
MOV 0D9H,#00h ; 关开门狗
封闭看门狗之后,再用xdata润饰符 润饰数组,然后初始化,就没有问题了。
还有一个解决方法便是界说的全局变量或许数组之类的。不要对其进行初始化。比及main程序里边,经过自动赋值的方法自动初始化。