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 misc.c... compiling main.c... compiling IIC.c... ..\..\User\IIC....

根据你提供的编译信息,你遇到了几个问题,主要涉及函数声明不匹配和调用参数错误。以下是详细的分析和解决方案:

错误分析

  1. 警告:printf 声明隐式

    • 编译器给出警告 function "printf" declared implicitly,这表明你使用了 printf 函数,但未包含相应的头文件。为了解决这个问题,需要在你的源文件顶部添加 #include <stdio.h>
  2. 错误:不兼容的函数声明

    • 编译器报告两个相关的错误:
      • I2C_Init(void) 在你的源代码中被定义为无参数的函数。
      • 但是,在包含的头文件中,它被声明为 I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct),需要两个参数。
  3. 错误:函数调用时参数过多

    • 因为你在实现中将 I2C_Init(void) 定义为空函数而没有接收任何参数,所以当你尝试调用它并传递参数时,会导致“too many arguments in function call”的错误。

解决方案

1. 修复函数声明不匹配

首先,你需要决定正确的函数签名。如果头文件中定义的是带有两个参数的版本,而你的实现却是无参版本,那么你应该修改实现以匹配头文件中的声明。

// i2c.h
#ifndef __I2C_H
#define __I2C_H

#include "stm32f10x_i2c.h"

void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);

#endif /* __I2C_H */
// iic.c 或者 i2c.c
#include "i2c.h"

void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct) {
    // 实现初始化逻辑
}

确保在相应的位置对结构体进行适当配置。

3. 添加 stdio.h 的引用

在使用 printf 的源文件(例如 iIC.c)顶部添加以下行,以避免隐式声明警告:

#include <stdio.h>

4. 清理与重新编译

在修正了上述所有问题后,执行清理操作,然后重新编译项目,以确保所有更改生效并消除旧错误。

总结

  • 确保所有函数的声明和实现是一致的,包括参数数量和类型。
  • 加入必要的头文件来避免隐式声明的问题。
  • 最后,不要忘记清理并重新构建项目。希望这些步骤能帮助你解决当前遇到的问题!如果还有其他问题,请随时告诉我。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?