Arduino C:对“readArms()”的未定义引用

问题描述 投票:0回答:3

在编译一些 Arduino C 文件时,出现错误“未定义对 `readArms()' 的引用”

代码可以在paste bin找到。

但基本上发生的是:

在我使用的 INO 文件中:

readArms();

在“armfunctions.h”和“armfunctions.c”中声明

.h 文件包含

void readArms(void);

还有 .c 文件:

void readArms(void){
    float motor1 = 0.0;
    int motor = 0;
    motor = analogRead(READMOTOR1);
    motor1 = (float)motor;
    motor1 = (motor1 - 87.0) * (400.0/(1007.0-87.0));
    delay(1000);
}
c function arduino
3个回答
28
投票

我今天已经研究了几个小时,制作和测试了各种草图,并发现(正如您已经发现的那样)将它们更改为

.cpp
是一种解决方法,但如果您想专门创建一个 c 文件,则必须包装标头中的原型以使其编译。有一些关于它的好帖子,但问题的症结在于您的
.h
文件中:

#ifdef __cplusplus
extern "C" {
#endif

void readArms(void);

#ifdef __cplusplus
}
#endif

0
投票

错误消息“未定义对 readArms() 的引用”通常表示代码中正在调用函数 readArms(),但在编译期间未找到其定义。您可以采取以下几个步骤来排查和解决此问题:

检查文件包含: 确保armfunctions.h和armfunctions.c文件都正确包含在您的Arduino草图(INO文件)中。您应该在 INO 文件的开头有一个 #include "armfunctions.h" 语句,以包含声明 readArms() 的头文件。

验证函数定义: 仔细检查 armfunctions.c 文件中 readArms() 函数的定义。确保函数定义与头文件 (armfunctions.h) 中的声明匹配。您提供的定义似乎是正确的,但验证它是否完全匹配很重要。

将所有文件一起编译: 如果您使用多个源文件(例如,armfunctions.c 和主 INO 文件),请确保它们全部包含在 Arduino IDE 或编译命令中。有时,IDE 可能不会自动包含项目中的所有源文件。确保所有文件都可见并且一起编译。

库依赖项: 如果您的函数依赖于任何外部库或依赖项,请确保这些库已正确包含并链接到您的项目中。验证您是否使用这些库中的正确语法和函数。

检查拼写错误和错误: 检查代码是否有任何拼写错误、语法错误或其他可能阻止函数正确编译和链接的问题。即使是小错误也可能导致未定义的参考错误。

清洁和重建: 有时,过时的对象文件或其他工件可能会导致编译问题。尝试清理您的项目并从头开始重建它。在 Arduino IDE 中,您可以通过按住“Shift”键的同时选择“Sketch > 验证/编译”(或单击带有“验证”工具提示的复选标记图标)来完成此操作。

通过遵循这些步骤并确保正确包含和匹配函数声明和定义,您应该能够解决 Arduino 代码中 readArms() 函数的“未定义引用”错误。


-2
投票

您应该在 .C 文件中使用以下内容:

voidarmfunctions::readArms(void)...(::前面的部分是你的.h文件中的类名)

© www.soinside.com 2019 - 2024. All rights reserved.