繁体   English   中英

如何编译一个简单的Arduino程序?

[英]How to compile a simple Arduino program?

我开始学习/编程 Arduino,但我不明白为什么在 Visual Studio 2017 中使用 Visual Micro 或 Arduino IDE 编译我的程序时会出现语法错误。

从 Visual Studio 2017 编译输出错误:

sketch\SketchIncomeEligible.ino.cpp.o:(.text.setup+0x0): undefined reference to `WiFi_Setup()'

sketch\SketchIncomeEligible.ino.cpp.o: In function `setup':

C:\Users\C113850\source\repos\Income_Eligible_Price_Display\src\SketchIncomeEligible\SketchIncomeEligible/SketchIncomeEligible.ino:6: undefined reference to `WiFi_Setup()'

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Adafruit Feather HUZZAH ESP8266.

来自 Arduino IDE 的编译错误:

Arduino: 1.8.9 (Windows 10), Board: "Adafruit Feather HUZZAH ESP8266, 80 MHz, Flash, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

sketch\SketchIncomeEligible.ino.cpp.o:(.text.setup+0x0): undefined reference to `WiFi_Setup()'

sketch\SketchIncomeEligible.ino.cpp.o: In function `setup':

C:\Users\C113850\source\repos\Income_Eligible_Price_Display\src\SketchIncomeEligible\SketchIncomeEligible/SketchIncomeEligible.ino:6: undefined reference to `WiFi_Setup()'

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Adafruit Feather HUZZAH ESP8266.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

以下是我的代码:

SketchWiFi.h 文件:

#ifndef _SKETCHWIFI_h
#define _SKETCHWIFI_h

int WiFi_Setup();

#endif

SketchWiFi.c 文件:

#include "SketchWiFi.h"

int WiFi_Setup()
{
  // put your setup code here, to run once:

  return 1; // Successful
}

Sketch.ino 文件:

#include "SketchWiFi.h"

void setup() {
  Serial.begin(115200);
  Serial.println("Begin setup");

  WiFi_Setup();

  Serial.println("End setup");
}

void loop() {
  // put your main code here, to run repeatedly:
}

目录结构:

在此处输入图片说明

Visual Studio 2017 中的项目结构

在此处输入图片说明

Arduino IDE 中的项目结构在此处输入图片说明

根据发布的建议,我在 GitHub 上阅读了以下内容:

没有对草图中具有除 .ino 以外的任何扩展名的文件进行预处理。 此外,草图中的 .h 文件不会自动从主草图文件中#included。 此外,如果您想从 .cpp 文件(如从草图生成的)调用 .c 文件中定义的函数,则需要将其声明包装在定义的“extern“C”{}”块中仅在 C++ 文件中。

所以这解释了我的问题。 我将我的简单函数 'WiFi_Setup()' 包含在一个类中,现在它编译成功。

class WifiNetwork
{
protected:

public:
    void WiFi_Setup();
};

Arduino 似乎希望一切都生活在课堂上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM