用keil仿真时显示*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS *** WARNING L16: UNC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用keil仿真时显示*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS *** WARNING L16: UNC相关的知识,希望对你有一定的参考价值。

程序如下
#include <AT89X51.h>
#include <absacc.h>
#include<stdio.h>
#include<math.h>
#define WR_COM XBYTE[0x7ff0]
#define RD_STA XBYTE[0x7ff2]
#define WR_DAT XBYTE[0x7ff1]
#define RD_DAT XBYTE[0x7ff3]
sbit p32=P3^2;
void init_LCD();
void init_cgram();
//void test_lcd();
void clr_lcd();
void PutChar(char t);
void delay();
void lcdprintf(char x,char y,char *s);

char code CGRAM_TABLE[]=0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,// ;年
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //;月
0x0F,0x09,0x09,0x0F,0x0,0x09,0x0F,0x00; // ;日
void delay()

unsigned char i;
for(i=0;i<250;i++);

void init_LCD()

unsigned char i;
WR_COM=0x38; //设置为8位数据总线,16*2,5*7点阵
for(i=0;i<100;i++)
delay();
WR_COM=0x01; //清屏幕
for(i=0;i<50;i++)
delay();
WR_COM=0x06; //光标移动,显示区不移动,读写操作后AC加1
for(i=0;i<50;i++)
delay();
WR_COM=0x0c;
for(i=0;i<50;i++)
delay();


void init_cgram()

unsigned char i;
//;设置自定义字符
WR_COM=0x40;
for(i=0;i<24;i++)

WR_DAT=CGRAM_TABLE[i];

for(i=0;i<40;i++)
delay();


void PutChar(char t)

WR_DAT=t;
delay();
delay();

void clr_lcd()

WR_COM=0x01;
delay();
delay();

void lcdprintf(char x,char y,char *s)

//clr_lcd();
if(y>1)y=1;
WR_COM=(y*0x40+x)|0x80;
delay();
delay();
while(*s!=0)

WR_DAT=*s;
s++;
delay();
delay();


main()
unsigned int period,k,i=0;
float f,m;
char buff[30];
init_LCD();
P2=0x00;
while(1)

TMOD=0X09;
TH0=0;
TL0=0;
while(p32==1);
TR0=1;
while(p32==0);
while(p32==1);
TR0=0;
period=TH0*256+TL0;
while(period<=500) /*判断是否分频及计算分频次数*/
P2++;
i++;
period=period*10;
if(i==6)
P2=0x00;
break;


k=pow(10,i); /* 10的i次方*/
f=((1000000.0/(2*period))*k)*10;
if(f<1000)
sprintf(buff,"f=%5.2fHZ",f);
else
m=f/1000.0;
sprintf(buff,"f=%5.2fKHZ",m);

lcdprintf(0,0,buff);


那位大哥有解决办法请不吝赐教,小弟急用如果可行一定追加悬赏

//void init_cgram()
//
// unsigned char i;
// //;设置自定义字符
// WR_COM=0x40;
// for(i=0;i<24;i++)
//
// WR_DAT=CGRAM_TABLE[i];
//
// for(i=0;i<40;i++)
// delay();
//

//void clr_lcd()
//
// WR_COM=0x01;
// delay();
// delay();
//
这两个函数定义了,主函数中没有调用!,去掉就可以了!

扩展资料:

keil与ARM

Keil公司2005年由ARM公司收购。其两家公司分别更名为ARM Germany GmbH和ARM Inc。Keil公司首席执行官Reinhard Keil表示:“作为ARM Connected Community中的一员,Keil和ARM保持着长期的良好关系。通过这次收购,我们将能更好地向高速发展的32位微控制器市场提供完整的解决方案,同时继续在μVision环境下支持我们的8051和C16x编译器。”

而后ARM Keil推出基于μVision界面,用于调试ARM7,ARM9,Cortex-M内核的MDK-ARM开发工具,用于为控制领域的开发。

参考资料:百度百科-keil



参考技术A

仔细看编译对话框的内容,定义的函数没有被调用。我也遇到过类似的是拼写写错导致报错

1.函数拼写错误,调用时又写成正确的,导致报错定义的函数没有被调用。

*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS

意思是:定义了一个函数,但是在main等函数中并没调用。查找方法:搜索编译对话框中的SEGMENT提示内容,并参考SYMBOL下提示的比对查找

参考技术B WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
不影响运行啊,只是说你定义的函数没有调用而已
参考技术C //void init_cgram()
//
// unsigned char i;
// //;设置自定义字符
// WR_COM=0x40;
// for(i=0;i<24;i++)
//
// WR_DAT=CGRAM_TABLE[i];
//
// for(i=0;i<40;i++)
// delay();
//

//void clr_lcd()
//
// WR_COM=0x01;
// delay();
// delay();
//
这两个函数定义了,主函数中没有调用!,去掉就可以了!本回答被提问者采纳

keil4如何在编译时不编译未调用的函数?

以前用IAR ewarm比较多, 印象中ewarm是不编译未调用的函数的。最近手上有一个用keil4编的arm单片机的工程,代码好大,很多函数没调用,也编译进去了,如何在编译的时候不编译这些没调用的函数?

LS两位在咬文嚼字,LZ的意思是不链接没有调用的函数吧。C/C++ -- One ELF Section per Function 参考技术A 可能是我描述的有问题。我想达到的实际效果就是,没调用的函数不占用生成的hex或bin文件。现在我把main的主循环里的内容全注释掉,编译生成的bin文件仍然有近50k,如何解决这个问题? 参考技术B 会全部编译的,在链接阶段,未调用的函数,会自动被优化掉 参考技术C 不编译你怎么知道没有调用呢,不信你故意将某个没有调用的函数写错试试实际情况如LS描述

以上是关于用keil仿真时显示*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS *** WARNING L16: UNC的主要内容,如果未能解决你的问题,请参考以下文章

转载keil消除*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS警告方法

转载keil消除*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS警告方法

使用keil软件时,建的项目,为啥会自动变成压缩包

用keil仿真也进不了main

keil怎么在SDRAM里面仿真程序

在 Mutation 中出现错误时显示 SnackBar Material UI