Good evening, I am having a problem after Arduino IDE update 2.10.
The F() flash macro used for storing strings in flash memory no longer appears to be working as of the 2.10 version. The following error is reported during compile for each use.
error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(str) (str)
error cannot convert 'const __FlashStringHelper*' to 'const char '
In file included from C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/Arduino.h:176,
from c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:7:
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp: In static member function 'static const __FlashStringHelper* MFRC522::GetStatusCodeName(MFRC522::StatusCode)':
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1303:29: note: in expansion of macro 'F'
case STATUS_OK: return F("Success.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1304:31: note: in expansion of macro 'F'
case STATUS_ERROR: return F("Error in communication.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1305:34: note: in expansion of macro 'F'
case STATUS_COLLISION: return F("Collision detected.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1306:32: note: in expansion of macro 'F'
case STATUS_TIMEOUT: return F("Timeout in communication.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1307:32: note: in expansion of macro 'F'
case STATUS_NO_ROOM: return F("A buffer is not big enough.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1308:38: note: in expansion of macro 'F'
case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1309:32: note: in expansion of macro 'F'
case STATUS_INVALID: return F("Invalid argument.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1310:34: note: in expansion of macro 'F'
case STATUS_CRC_WRONG: return F("The CRC_A does not match.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1311:35: note: in expansion of macro 'F'
case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1312:23: note: in expansion of macro 'F'
default: return F("Unknown error");
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp: In static member function 'static const __FlashStringHelper* MFRC522::PICC_GetTypeName(MFRC522::PICC_Type)':
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1351:39: note: in expansion of macro 'F'
case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1352:37: note: in expansion of macro 'F'
case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1353:39: note: in expansion of macro 'F'
case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1354:37: note: in expansion of macro 'F'
case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1355:37: note: in expansion of macro 'F'
case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1356:37: note: in expansion of macro 'F'
case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1357:39: note: in expansion of macro 'F'
case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1358:41: note: in expansion of macro 'F'
case PICC_TYPE_MIFARE_DESFIRE: return F("MIFARE DESFire");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1359:36: note: in expansion of macro 'F'
case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1360:39: note: in expansion of macro 'F'
case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete.");
^
C:\Users\Icaro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8\cores\esp32/WString.h:38:42: error: cannot convert 'const char*' to 'const __FlashStringHelper*' in return #define F(string_literal) (string_literal)
^
c:\Users\Icaro\Documents\Arduino\libraries\MFRC522\src\MFRC522.cpp:1362:24: note: in expansion of macro 'F'
default: return F("Unknown type");
^
The implementation of the F() macro was changed in ESP32 core version 2.0.8.
It is now
#define F(string_literal) (string_literal)
instead of casting to const __FlashStrinHelper *.
This breaks use cases like
const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums.
) {
switch (code) {
case STATUS_OK: return F("Success.");
case STATUS_ERROR: return F("Error in communication.");
...
default: return F("Unknown error");
}
} // End GetStatusCodeName()
yes that worked...i downgraded both the esp32 as well as the mfrc522 library...and it worked very well. Thank you, i was struggling with this for 2 days.. thnkss