stm32

xiaoxiao2021-02-28  24

编译失败:在轮询点灯中,编写完main.c、led.c、key.c文件之后,进行最后一步,编译工程,出现如下错误,在编译器编译key.c时输出的key.o文件和编译main.c时输出的main.o文件中,有函数重复定义了,分别是:delay_ms()延时函数、Key_GPIO_Config()按键引脚配置函数、KeyScan()按键扫描函数:

 

 

发现错因:在main.c中include了key.c文件

 

尝试解决:通过问郭工知道了,在导入库时不能include XXX.c 文件,这样做等价于把key.c整篇复制到main.c中,于是,我在main.c中把#include"key.c"这行代码删除,观察编译结果,是否去除了多了的函数,发现很多东西没有定义(未定义)

 

 

 

进一步检查错因:

没有编写key.h文件,无法与main.c进行include库链接

因为main.c中要调用这三个函数,即:delay_ms()延时函数、Key_GPIO_Config()按键引脚配置函数、KeyScan()按键扫描函数。调用函数前要定义函数,很显然这三个函数定义在key.c中,已经确定了函数定义的位置,然后要把三个函数调用到另一个C文件即main.c中,就要声明函数,那么应该在哪里声明函数呢?

应该在定义函数的key.c文件对应的key.h文件中声明函数、声明常量,比如KEY_OFF置1都应该写在key.h文件中。然后再在目的地main.c中#include key.h文件,就能将main.c编译成功,不会出现重定义,也不会出现未定义了。

 

1.函数定义处:

 

2.函数声明处:

 

3.函数调用处:

 

编写key.h文件

#ifndef __文件名_H_ #define __文件名_H_ #define 要调用的.c中的常量 对应值 extern void 要调用的。c中的函数(void); #endif

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-2800245.html

最新回复(0)