问题描述
初次接触N76E003开发板,主要根据以下三篇文章搭建了基本的环境:
[N76E003安装环境教程] https://www.cnblogs.com/zhugeanran/p/9554822.html (本文调试遇到警告例子为该文末尾程序)
[N76快速入门及常见坑] https://blog.csdn.net/qlexcel/article/details/81069808
[单片机入门学习笔记:新唐单片机N76E003] https://blog.csdn.net/qq_41068712/article/details/86169439
然后项目编译 0 Error(s), 0 Warning(s),创建却提示了12个Warnings,大致都如同下面所示:
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_TIMER3_DELAY10US?DELAY
在网上查阅资料得知,这是因为程序中有些函数例如COMPARE(或片段)以前(调试过程中)从未被调用过,或者根本没
有调用它的语句。这条警告信息里面还包含一条信息,它指示出是哪个函数导致了这一问题。
这个Warning可以置之不理,但是实际操作中却会出现其他的小问题。譬如即使程序没有调用这个函数,Keil仍然把它编译连接进整个程序。ROM充足并不用过多地担心,但在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可以说是巨大的浪费。
具体的解决方法就是找到Common.h和Delay.h的头文件中,找出所有定义了但未使用的函数,并为每个函数添加如下的格式:
#ifdef _函数名_
~~ 该函数 ~~
#endif
当为所有此类L16的Warning(s)全部添加了这种结构后,Warning就消失了。
然后,有出现了三个Warning(s)如下所示:
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _TIMER0_DELAY1MS
MODULE: .Objectsmain.obj (MAIN)
看到百度知道一位大神的解释最详细,还提到了其他引发错误的可能,在此附上链接:
https://zhidao.baidu.com/question/278387387.html
我这个情况出现的问题是我把我用到的一个函数也预编译掉了,去掉之前为该函数添加的冗余的预编译语句就可以了。
#ifdef Timer0_Delay1ms
#endif
//ifdef Timer0_Delay1ms
void Timer0_Delay1ms(UINT32 u32CNT)
{
clr_T0M; //T0M=0, Timer0 Clock = Fsys/12
TMOD |= 0x01; //Timer0 is 16-bit mode
set_TR0; //Start Timer0
while (u32CNT != 0)
{
TL0 = LOBYTE(TIMER_DIV12_VALUE_1ms); //Find define in "Function_define.h" "TIMER VALUE"
TH0 = HIBYTE(TIMER_DIV12_VALUE_1ms);
while (TF0 != 1); //Check Timer0 Time-Out Flag
clr_TF0;
u32CNT --;
}
clr_TR0; //Stop Timer0
}
//endif
最终,构建工程完成了。
文链接:https://blog.csdn.net/tech_otaku0512/article/details/90695068
设计资源 培训 开发板 精华推荐
- STEVAL-ISA082V1,使用 ST1S40IPHR、4 A 峰值 800 kHz 固定频率 PWM 同步降压转换器的演示板
- OP213FSZ精密比较器的典型应用
- 1811571108 方宇航 新建工程3
- 三位LED数码管
- ADRF6702-EVALZ,用于评估具有 1550 至 2150 MHz Frac-N PLL 和集成 VCO 的 ADRF6702 1200 至 2400 MHz 正交调制器的评估板
- 使用 Microchip Technology 的 TC2950 的参考设计
- 具有改进瞬态响应的 LT1120IS8 稳压器的典型应用电路
- MAXREFDES1086:效率为91.4%的小尺寸,5V / 500mA,同步,无光耦、反激式DC-DC转换器
- 线序可调1.3寸OLED转接板-IIC
- 咩红外 涂鸦版