Compilerfehlermeldungen beim Beispielscode für SD-Kartenleser

Hallo,
nach ca. 2 Jahren Pause befasse ich mich wieder mit Microcontrollern, und habe leider gleiche jede Menge Probleme:
Unter einer neu aufgesetztem Arduino-IDE 1.8.12 unter Linux Mint 19.3 bekomme ich mit meiner NodeMCU 1.0 schon bei den originalen Beispielprogrammen Compilerfehler, wenn ich verschiedene einfache Beispiele zu SD-Card Readern ausprobiere:
Es gibt Fehler bei folgenden Programmen, die ich zum Test meiner SD-Card Applikation nutzen wollte:

  • Sd (generisches Standard-Programm der IDE)
  • Sd(esp8266)
  • esp8266 SdFat 1.1.4 (Bill Greimann)

Hier Auszüge der Fehlermeldungen, sie sind deutlich länger.

ad 1: Sd (generisches Standard-Programm der IDE); Cardinfo
In file included from /home/niels/Arduino/libraries/SdFat/src/FatLib/FatLib.h:27:0,
from /home/niels/Arduino/libraries/SdFat/src/SdFat.h:33,
from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SDFS/src/SDFS.h:36,
from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SD/src/SD.h:25,
from /app/Arduino/libraries/SD/examples/CardInfo/CardInfo.ino:24:
/home/niels/Arduino/libraries/SdFat/src/FatLib/ArduinoFiles.h:122:7: error: redefinition of 'class fs::File'
class File : public FatFile, public Stream {
^
In file included from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SD/src/SD.h:24:0,
from /app/Arduino/libraries/SD/examples/CardInfo/CardInfo.ino:24:
/home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/cores/esp8266/FS.h:52:7: error: previous definition of 'class fs::File'
class File : public Stream

ad 2: Sd(esp8266) ; Datalogger

In file included from /home/niels/Arduino/libraries/SdFat/src/FatLib/FatLib.h:27:0,
from /home/niels/Arduino/libraries/SdFat/src/SdFat.h:33,
from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SDFS/src/SDFS.h:36,
from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SD/src/SD.h:25,
from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SD/examples/Datalogger/Datalogger.ino:24:
/home/niels/Arduino/libraries/SdFat/src/FatLib/ArduinoFiles.h:122:7: error: redefinition of 'class fs::File'
class File : public FatFile, public Stream {
^
In file included from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SD/src/SD.h:24:0,
from /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/SD/examples/Datalogger/Datalogger.ino:24:
/home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/cores/esp8266/FS.h:52:7: error: previous definition of 'class fs::File'
class File : public Stream

ad 3: Sd(esp8266) ; Sdinfo

SdInfo:8:17: error: 'sdfat' is not a namespace-name
using namespace sdfat;
^
SdInfo:8:22: error: expected namespace-name before ';' token
using namespace sdfat;
^
Mehrere Bibliotheken wurden für "SdFat.h" gefunden
Benutzt: /home/niels/Arduino/libraries/SdFat
Nicht benutzt: /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/ESP8266SdFat
exit status 1
'sdfat' is not a namespace-name

Was mich dabei irritiert, ist daß der Compiler auch bei den ersten beiden Punkten anscheinend auf Sdfat Lib zugreift ?!

Früher(TM) hatte ich so gut wie keine Compilerfehler bei ungeänderten Beispielsprogrammen. (IDE 1.6... unter Win 8.1). Weder unter dem AVR, noch den Espressif-Controllern. Dafür um so mehr bei selbstgeschriebenem Code...

Habe ich ein grundsätzliches Problem mit meiner neuen IDE-Installation ?
Oder sind die Bibliotheken nicht mit der aktuellen Arduino-IDE kompatibel ?

Die Boards wurden in den Einstellungen mit
http://arduino.esp8266.com/stable/package_esp8266com_index.json
eingebunden, es wurde die übliche ESP8266 Community version 2.7.1 installiert.

Danke & Gruß,
Tütenflieger

Benutzt: /home/niels/Arduino/libraries/SdFat
Nicht benutzt: /home/niels/.arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/ESP8266SdFat

Wenn Du ganz gerne mit einem ESP8266 spielen möchtest, wäre vll. die 'nicht benutzte' Library hier deutlich geschickter.
Auch eine 'Kleinigkeit', Die man sich mit der Einfachheit des Arduino-Konzept einbrockt: dutzende gleichnamige Lib's, Die Alle irgend etwas super toll können, aber eben nur für Ihr eigenes Beispiel funktionieren.

Suche, wie Du die andere Lib auswählen kannst - der Kompiler hat hier scheinbar kein gutes Händchen.

MfG

Versuche mal mit voll qualifizierten Typen auf File zuzugreifen (ungetestet):

// Entweder das Standard-File (SD)
fs::File myFile = ...
// oder das aus SdFat
sdfat::File myFile = ...

Gruß Tommy

Edit: Die libraries/SdFat solltest Du evtl. löschen

[Gelöst]

Hallo,
ein einfaches Löschen von libraries/SdFat hat das Problem beseitigt, die

  • Esp8266SdFat Sdinfo, sowie
  • Sd(esp8266) Datalogger

kompilieren nun.

Das generische SD cardinfo nicht, aber das beißt sich wohl mit dem ESP.

@postmaster-ino: Danke !

@Tommy56: Deinen Vorschlag habe ich daher nicht mehr umgesetzt, trotzdem Danke!

Die SD-Karten bekomme ich jetzt zwar immer noch nicht initialisiert, bzw. gelesen, aber sind Probleme die ich schon kenne, und werde diverse SD-Karten und ggf. auch die SD-Reader durchprobieren müssen. Hab zum Glück noch ein paar rumliegen.

Gruß,
Tütenflieger

Checke auch mal den offiziellen SD-Formatter der SD-Association. Die Betrübssysteme sind da manches Mal nicht so kompatibel.

Gruß Tommy