ZBLOG

Rebuild started: Project: BH-F103 *** Using Compiler 'V5.06 update 4 (build 422)', folder: 'C:\Users\Yuluoqiao\AppData\Local\Keil_v5\ARM\ARMCC\Bin' Rebuild target 'BH-F103' compiling delay.c... compiling stm32f10x_it.c... compiling stm32f10x_crc.c...

根据您提供的构建日志,出现了“Symbol I2C_Init multiply defined”的错误,这意味着在项目中的两个不同源文件中都定义了同名的 I2C_Init 函数。以下是解决此问题的步骤和一些相关建议。

解决步骤

  1. 检查重复定义
    • 请确认 i2c.cstm32f10x_i2c.c 中是否都有实现 I2C_Init 函数。如果是,请选择一个文件保留该函数的实现,并从另一个文件中删除或注释掉该实现。
   // 在 i2c.c 中
   void I2C_Init() {
       // ... 实现 ...
   }

   // 如果 stm32f10x_i2c.c 中也有类似定义,请删除或注释掉它。
  1. 使用头文件声明
    • 确保只在一个源文件中提供函数的实际实现,而在其他需要调用这个函数的源文件中,只做声明。例如:

i2c.h 文件中(如果还没有的话):

   #ifndef I2C_H
   #define I2C_H

   void I2C_Init(void);  // 声明参数类型以避免警告

   #endif // I2C_H
  1. 添加参数类型

    • 您的警告信息提示函数声明缺少参数类型。在 C 中,应该明确指出参数,即使没有参数,也要写上 (void)。将 I2C_Init(); 改为 I2C_Init(void); 以消除警告。
  2. 清理并重建项目

    • 删除所有生成的目标文件,以确保旧的编译结果不会影响新构建。在 Keil 环境中,可以通过菜单项进行清理(Clean),然后重新构建项目(Rebuild)。
  3. 检查包含关系

    • 确保您没有意外地多次包含头文件,尤其是在多个源文件中调用同一库时,确保使用 include guards。

示例代码修改

在 i2c.h 文件中的示例:

// i2c.h
#ifndef I2C_H
#define I2C_H

void I2C_Init(void);  // 提供完整声明,消除警告

#endif // I2C_H

在 i2c.c 文件中的示例:

#include "i2c.h"

void I2C_Init(void) {  // 与头文件一致,添加 (void)
    // ... 实现 ...
}

最后建议

  • 确认所有相关 .h.c 文件都已经被正确修改。
  • 如果仍然遇到链接错误,尝试在 IDE 的输出窗口中查找更详细的信息,看看是否还有其他符号冲突。
  • 检查整个项目结构,以确保不存在多重定义问题。您可以用文本搜索功能搜索整个项目目录,看哪些地方引用了或定义了 I2C_Init

完成这些步骤后,再次尝试构建您的项目,希望能顺利解决问题!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7594

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?