F() Makro für Serial.print in Main Datei und Header Datei zugleich

Hallo,

ich möchte gerne das F() Makro beim Serial.Print benutzen.

Serial.print(F("Beginn ReadAndSendMeasurementValue..."));
oder
Serial.println(F("Beginn ReadAndSendMeasurementValue..."));

Interessanterweise kann ich dies entweder im Hauptprogramm nutzen oder in allen Header Dateien die ich mit eingebunden habe.
Sobalt ich es im Hauptprogramm und zugleich in mindestens einer Headerdateien nutze, bekomme ich die nachfolgende Fehlermeldung. Hat jemand eine Ahnung warum das so ist?

Am Ende ein befindet sich auch ein Codebeispiel.

Vielen Dank


In file included from C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:259:0,

from sketch\MQTT_Bodensensor.ino.cpp:1:

C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/pgmspace.h:16:51: error: __c causes a section type conflict with __c

#define PSTR(s) (extension({static const char __c[] PROGMEM = (s); &__c[0];}))

^

C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/WString.h:38:76: note: in definition of macro 'FPSTR'

#define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))

^

C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/WString.h:39:34: note: in expansion of macro 'PSTR'

#define F(string_literal) (FPSTR(PSTR(string_literal)))

^

C:\Users\USERNAME\OneDrive...\OneDrive\Privat\Arduino\Projekte\MQTT_Bodensensor - Test\MQTT_Bodensensor\MQTT_Bodensensor.ino:21:18: note: in expansion of macro 'F'

Serial.println(F("\nSerielle Verbindung eingereichtet."));

^

C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/pgmspace.h:16:51: note: '__c' was declared here

#define PSTR(s) (extension({static const char __c[] PROGMEM = (s); &__c[0];}))

^

C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/WString.h:38:76: note: in definition of macro 'FPSTR'

#define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))

^

C:\Users\USERNAME\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/WString.h:39:34: note: in expansion of macro 'PSTR'

#define F(string_literal) (FPSTR(PSTR(string_literal)))

^

sketch\LEDHandler.h:27:20: note: in expansion of macro 'F'

Serial.println(F("Initialisiere LEDHandler..."));

^

exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).


MAIN Programm

#include "LEDHandler.h" // Einbinden der LED Unterstützung.

LEDHandler ledHandler; // LED Handler Initialisieren 

void setup()
{ 
  ledHandler.SetEspLED_Off(); // ESP LED aus (Stromsparen)

  // Initialisiere Serial für Seriellen Monitor
  Serial.begin(115200);
  Serial.println(F("\nSerielle Verbindung eingereichtet."));
}

void loop()
{
  // Hier sollte nichts enthalten sein.
}

LEDHandler.h

// Ist erforderlich, weil dem Linker die Arduino-Befehlsumgebung zu diesem Zeitpunkt noch nicht bekannt ist. 
// (Der Linker ist Programm, dass die einzelnen Programmteile zu eine einem Gesamtprogramm zusammensetzt, 
// damit es vom Compiler in einen vom Arduino verständlichen Maschinencode übersetzt werden kann)
#include <Arduino.h>

// Verhindern, dass die Bibliothek mehrfach geladen werden kann (und so zu Compiler-Fehlermeldungen führt)
#ifndef __LEDHandler__
#define __LEDHandler__

class LEDHandler 
{
  //------------------------------
private:

  //------------------------------
public:

  LEDHandler()
  {
    Serial.println(F("Initialisiere LEDHandler..."));
  }

  void SetEspLED_On()
  {
  }

  void SetEspLED_Off()
  {
  }

  void SetEspLED_TimeOn(int timeOn)
  {
  }
};
#endif

(deleted)

Nutze entweder eine aktuellere EspCoreVersion als die verwendete 2.4.2. oder FPSTR().

oder oder google :smiley:

Gruß Fips