Как скомпилировать простую программу Arduino? - PullRequest
2 голосов
/ 24 апреля 2019

Я начинаю изучать / программировать 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:
}

Структура каталогов:

enter image description here

Структура проекта в Visual Studio 2017

enter image description here

Структура проекта в Arduino IDE enter image description here

1 Ответ

2 голосов
/ 25 апреля 2019

Согласно опубликованному предложению, я прочитал на GitHub следующее:

Предварительная обработка файлов в эскизе с любым расширением, отличным от .ino, не производится. Кроме того, файлы .h в эскизе автоматически не # включаются из основного файла эскиза. Кроме того, если вы хотите вызывать функции, определенные в файле .c, из файла .cpp (например, сгенерированного из вашего эскиза), вам нужно будет обернуть его объявления в блок 'extern "C" {}', который определен только внутри файлов C ++.

Так что это объясняет мою проблему. Я вложил в класс свою простую функцию WiFi_Setup (), и теперь она успешно компилируется.

class WifiNetwork
{
protected:

public:
    void WiFi_Setup();
};

Кажется, Ардуино хочет, чтобы все жили в классах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...