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

[复制链接]
1353|5
 楼主| caohua0902 发表于 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 头文件被包含了多次,但是从代码上看不应该被包含多次,有朋友知道是什么原因吗???




 楼主| caohua0902 发表于 2019-9-19 10:10 | 显示全部楼层
有没有人遇到过这种问题??
蛮大头 发表于 2019-9-19 15:24 | 显示全部楼层
加上 #define        ALLOCATE_EXTERN
玛尼玛尼哄 发表于 2019-9-25 00:04 | 显示全部楼层
楼上方法对吗,清理一下工程
玛尼玛尼哄 发表于 2019-9-25 00:04 | 显示全部楼层
楼主解决了没以前我也遇到过,后来删了重新弄就好了。
yiy 发表于 2019-9-28 18:08 | 显示全部楼层
放一个文件试试看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

1

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