#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
Комментарии:
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?