问题描述
初次接触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
上一篇:N76E003AT20筋膜枪单片机设计方案
下一篇:N76E003 Keil设置芯片使用FLASH的地址空间
推荐阅读最新更新时间:2024-11-12 11:04