零基础学习51单片机之keilC51常见错误汇总3

16. ERROR L104: MULTIPLE PUBLIC DEFINITIONS

SYMBOL: K

MODULE: 222.obj (222)

出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c 文件就不需要初始化过程啦

17*** ERROR L121: IMPROPER FIXUP

访问内存指令超出指令的寻址范围了,例如MOVX @Ri 指令超出了PDATA段的范围,或者是ACALL 指令超出了2k的寻址范围.

检查你的调用子函数的命令.特别是那些LCALL,ACALL等

18*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

SYMBOL: MAIN

MODULE: C:\KEIL\C51\LIB\C51S.LIB (?C_INIT)

ADDRESS: 080DH

在main函数里面C_INIT这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。

19 keil4 warning C316:unterminated conditionals

今天用Keil4写程序时遇到这个问题:warning C316:unterminated conditionals

跑了几个论坛,在审视了一遍代码之后,知道了原因:

像类似XX.C(99):warning C316:unterminated conditionals这种警告的话XX.c文件有一个凌乱的条件编译或预编译。因为C语言中有些头文件中的预编译或宏定义,那么条件编译就避免不了。写条件编译时,可能有忘写一个基本的语句。比如说,你用了条件编译#ifndef而忘记写#endif。因为他们本来就是配套的。有前者必有后者。不能丢掉其中任何一个。一个include文件最后的#endif 少了# 前缀或者没有#endif,都会出现类似警告。就像你写C语句,你不会写了int i 而不能忘记写" ; " ,否者就不能把一个语句表达完整。

总之,出现上述问题。先看看整个C文件中是否出现上述错误,或整个工程中自己写的那些头文件中里面的条件编译是否都写对了,即:前面写了#ifndef,后面是否有对应的#endif。

20 DS1302.C(86): error C183: unmodifiable lvalue

code的内容只能读,不能改. 定义数组时把code去掉。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值