本文主要记录在使用Keil软件的过程中所遇到Error & Waring的解决方法,文中记录的解决方法大部分来源于网络,并均验证其正确才记录的。
中文翻译:***错误 L107: 地址控件溢出
Error截图:
场景描述:编译C51源程序时,出现该错误。
产生原因:C51的内存模型采用了"Small: varialbles in DATA",但此次工程定义了太多变量,导致内存不够用。
a. 在"Options for Target…“中的"Target"选项卡中,将"Memory Model’的"Small: variables in DATA"改为”Compact: variables in PDATA” 或“Large: variales in XDATA"
b. 对C51源程序重新编译即可解决Error。
small、compact和large是C51的3中内存模型。在small的模式中,所有所有默认变量均装入单片机内部的RAM中,内部RAM的低128B。在compacr模式中,所有默认变量均位于单片机的片外低256B RAM中。在large模式中,所有默认变量优先放在外部64KB的RAM中。其中,small访问速度快、缺点是空间有限,且对堆栈的分配比较少,难以把握,碰到递归调用时候需要小心。这种模式只适用于小程序。compact模式较small模式存储单元宽裕,但速度较small慢,但是比large块,是一种中间状态。large模式的优点是空间大,可存变量多;缺点是:访问速度慢,尤其对于两个以上字节变量访问速度来说更是如此。
所参考的文章:
a. https://blog.csdn.net/weixin_43942316/article/details/112290991
b. https://blog.csdn.net/weixin_34696006/article/details/112753773
中文翻译:***警告 L16: 未调用的段,忽略覆盖过程
Waring截图:
场景描述:编译C51源程序时,出现该错误。
产生原因: 工程中有定义了某个函数,但在程序运行的过程中并没有调用它。
找到没有使用的函数,注释掉或者在程序运行的过程中调用它。也可以忽略该警告。
无