marlin
"Macro function fails due to wrong parameter type.
SERIAL_ECHOPAIR macro is defined to take two parameters, a string and a float, double or unsigned long. The macro is invoked giving it as a second parameter an integer, thus the error. Issue 2004: https://github.com/MarlinFirmware/Marlin/issues/2004 "
Bug fixed by commit 2db384a21d6
Type | IncompatibleType |
Config | "!DISABLE_M503 && MESH_BED_LEVELING" (2nd degree) |
Fix-in | code |
Location | configuration |
#ifdef MESH_BED_LEVELING #define MESH_NUM_X_POINTS 7 #define MESH_NUM_Y_POINTS 7 #endif #define SERIAL_ECHOPAIR(name,value) do{ serial_echopair_P_l(name,value); }while(0) void serial_echopair_P_l(const char *s_P, unsigned long v) { printf("%s", s_P); printf("%l", v);} #ifndef DISABLE_M503 void Config_PrintSettings(bool forReplay){ #ifdef MESH_BED_LEVELING SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS); // ERROR SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS); // ERROR #endif } #endif int main(int argc, char **argv) { Config_PrintSettings(false); return 0; }
diff --git a/simple/2db384a.c b/simple/2db384a.c --- a/simple/2db384a.c +++ b/simple/2db384a.c @@ -11,8 +11,8 @@ void serial_echopair_P_l(const char *s_P, unsigned long v) { printf("%s", s_P); void Config_PrintSettings(bool forReplay){ #ifdef MESH_BED_LEVELING - SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS); // ERROR - SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS); // ERROR + SERIAL_ECHOPAIR(" X", (unsigned long)MESH_NUM_X_POINTS); + SERIAL_ECHOPAIR(" Y", (unsigned long)MESH_NUM_Y_POINTS); #endif }
#ifdef MESH_BED_LEVELING #define MESH_NUM_X_POINTS 7 #define MESH_NUM_Y_POINTS 7 #endif int main(int argc, char **argv) { #ifndef DISABLE_M503 void Config_PrintSettings(bool forReplay){ #ifdef MESH_BED_LEVELING printf("%s%d"," X", MESH_NUM_X_POINTS); // ERROR printf("%s%d"," Y", MESH_NUM_Y_POINTS); // ERROR #endif } #endif return 0; }
. call Marlin/configuration_store.cpp:592: void Config_PrintSettings(bool forReplay) . 680: SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS); . 681: SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS); // SERIAL_ECHOPAIR takes a float, double or unsigned long as second param. MESH_NUM_X_POINTS and MESH_NUM_Y_POINTS are declared as INTs.