Как скомпилировать простую программу Arduino?

#c #c #arduino

#c #c #arduino

Вопрос:

Я начинаю изучать / программировать Arduino и не понимаю, почему я получаю синтаксические ошибки при компиляции моей программы в Visual Studio 2017 с Visual Micro или с Arduino IDE.

Ошибка компиляции вывода из Visual Studio 2017:

 sketchSketchIncomeEligible.ino.cpp.o:(.text.setup 0x0): undefined reference to `WiFi_Setup()'

sketchSketchIncomeEligible.ino.cpp.o: In function `setup':

C:UsersC113850sourcereposIncome_Eligible_Price_DisplaysrcSketchIncomeEligibleSketchIncomeEligible/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"

sketchSketchIncomeEligible.ino.cpp.o:(.text.setup 0x0): undefined reference to `WiFi_Setup()'

sketchSketchIncomeEligible.ino.cpp.o: In function `setup':

C:UsersC113850sourcereposIncome_Eligible_Price_DisplaysrcSketchIncomeEligibleSketchIncomeEligible/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
введите описание изображения здесь

Комментарии:

1. Извините, моя ошибка

2. Это может помочь вам: github.com/arduino/Arduino/wiki/Build-Process

3. Похоже, вы не используете Arduino IDE для компиляции своего проекта. Как заставить SketchWiFi.c быть одним из ваших исходных файлов? Добавьте SketchWiFi.cpp в свой проект с помощью этого кода.

4. используете ли вы Arduino IDE для сборки?

5. ДА. Я скомпилировал в обеих средах, Visual Studio 2017 и Arduino IDE.

Ответ №1:

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

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

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

 class WifiNetwork
{
protected:

public:
    void WiFi_Setup();
};
  

Кажется, Arduino хочет, чтобы все было в классах.

Комментарии:

1. не могли бы вы показать, как были изменены файлы .h и .c?