关于C51 keil使用中.c文件的链接心得

Posted buttonandline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C51 keil使用中.c文件的链接心得相关的知识,希望对你有一定的参考价值。

这个问题一直烦了我很久,使用C51 keil进行.c文件链接的时候,老是报错诸如下面的信息:

*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: aa
MODULE: brightnessCTRL.obj (BRIGHTNESSCTRL)
DEFINED: LED_Screen.obj (LED_SCREEN)

但是我发现,我确实只定义了一个这样名称的变量

其实这一点在arm keil中不会出现,arm keil的宽容度要好得多。

经过探索,我总结以下经验:

1.  .h文件中可以包含宏定义(#define)、不知道叫啥(typedef)、函数的声明、sbit、变量的声明(extern),绝不能包含变量的定义。

2.  根据第一点,我们可以把变量定义放在子.c文件中,.h文件中用extern。sbit直接在.h中声明(这里用定义还是声明不好说)

 

3.  #include<>其实是可以包含.c文件的,如#include<XX.c>

4.  根据第三点,我们可以把子.c文件包含在有main函数的主.c文件中。而子.c和主.c文件都要用的.h文件可以一并写在子.c中。这样可以省略写.h文件,就能链接多个.c文件

以上是关于关于C51 keil使用中.c文件的链接心得的主要内容,如果未能解决你的问题,请参考以下文章

“在keil c51中 同一个项目里 如何在main函数里调用其他的c文件”,

Keil科普教程 | Keil C51 和 MDK 的区别

KEIL C51软件安装

KEIL C51软件安装

keil c51为啥按f12时不能跟踪函数

单片机Keil C51 C语言多文件如何使用全局位变量?跪拜!!