[技术支持] Keil环境下头文件包含异常

[复制链接]
296|5
 楼主 | 2019-9-16 18:10 | 显示全部楼层 |阅读模式

复制代码
在KEIL环境下使用 HC89F0531进行开发。现在刚刚新建了个很简单的工程,里面有两个c源文件 main.c 和 clock.c和一个h头文件head.h。main.c 文件内容如下:
  1. #include "head.h"

  2. void main(void)
  3. {
  4.     uchar i;

  5.     InitClock();
  6.     while (1)
  7.     {
  8.         i++;
  9.     }
  10. }
复制代码


clock.c 文件内容如下:
  1. #include "head.h"

  2. void InitClock(void)
  3. {
  4. CLKSWR  = 0x51;
  5. CLKDIV = 0X01;
  6. }
复制代码


head.h头文件内容如下:
  1. #ifndef HEAD_H_
  2. #define HEAD_H_

  3. #include "HC89F0531.h"

  4. void InitClock(void);

  5. #endif
复制代码


整个工程没有其他源文件和头文件了,很简单的一个工程, 然后编译工程出现了下面的这两种错误:
  1. linking...
  2. ***ERROR L104: MULTIPLE PUBLIC DEFINITIONS
  3. SYMBOL: P0M0
  4. MODULE: .\Out\clock.obj(CLOCK)
  5. ...
  6. ...
  7. ...
  8. ***WARNING L6: XDATA SPACE MEMORY OVERLAP
  9. FROM: FE80H
  10. TO: FE80H
  11. ...
  12. ...
  13. ...
复制代码
意思就是所有的寄存器定义出现了重定义, 外部数据空间重叠,其实是XSFR空间重叠,看上去根本原因就是 HC89F0531.h 头文件被包含了多次,但是从代码上看不应该被包含多次,有朋友知道是什么原因吗???




使用特权

评论回复
 楼主 | 2019-9-19 10:10 | 显示全部楼层
有没有人遇到过这种问题??

使用特权

评论回复
| 2019-9-19 15:24 | 显示全部楼层
加上 #define        ALLOCATE_EXTERN

使用特权

评论回复
| 2019-9-25 00:04 | 显示全部楼层
楼上方法对吗,清理一下工程

使用特权

评论回复
| 2019-9-25 00:04 | 显示全部楼层
楼主解决了没以前我也遇到过,后来删了重新弄就好了。

使用特权

评论回复
| 2019-9-28 18:08 | 显示全部楼层
放一个文件试试看。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表