marlin
"If Z_MAX is set to a negative value, and Z_DUAL_STEPPER_DRIVERS is enabled, the compiler complains about undeclared variable.
The user do not wants to use Z_MAX, but instead uses two Z_MIN endstops.In this situation, enabling Z_DUAL_STEPPER_DRIVERS which by default enables Z_DUAL_ENDSTOPS leads to a compiler error due to two variables that are uninitialized. Issue 1911: https://github.com/MarlinFirmware/Marlin/issues/1911"
Bug fixed by commit 7336e6df070
| Type | UndeclaredIdentifier |
| Config | "Z_DUAL_STEPPER_DRIVERS" (1st degree) |
| Fix-in | mapping |
| Location | movement/ |
#include <stdbool.h>
#include <stdio.h>
#define PIN_EXISTS(PN) (defined(PN##_PIN) && PN##_PIN >= 0)
#define Z_STEP_PIN 1
#define HAS_Z_MAX (PIN_EXISTS(Z_MAX))
#define HAS_Z_MIN (PIN_EXISTS(Z_MIN))
#define WRITE {printf("making pin high or low");}
#ifdef Z_DUAL_STEPPER_DRIVERS
#define Z_DUAL_ENDSTOPS
#ifdef Z_DUAL_ENDSTOPS
#define Z_MIN 1
#define Z_MAX -1
#endif
#endif // Z_DUAL_STEPPER_DRIVERS
#ifdef Z_DUAL_ENDSTOPS
locked_z_motor = false,
locked_z2_motor = false;
#endif
#if HAS_Z_MIN
static bool old_z_min_endstop = false;
#endif
#if HAS_Z_MAX
static bool old_z_max_endstop = false;
#endif
#ifdef Z_DUAL_ENDSTOPS
static bool old_z2_min_endstop = false;
static bool old_z2_max_endstop = false;
#endif
void function()
{
#ifdef Z_DUAL_STEPPER_DRIVERS
#ifdef Z_DUAL_ENDSTOPS
if (!old_z_max_endstop && !locked_z_motor) WRITE;
if (!old_z2_max_endstop && !locked_z2_motor) WRITE;
#endif
#endif
}
void main(){}
diff --git a/simple/7336e6d.c b/simple/7336e6d.c --- a/simple/7336e6d.c +++ b/simple/7336e6d.c @@ -24,13 +24,8 @@ locked_z2_motor = false; #endif -#if HAS_Z_MIN static bool old_z_min_endstop = false; -#endif - -#if HAS_Z_MAX static bool old_z_max_endstop = false; -#endif #ifdef Z_DUAL_ENDSTOPS static bool old_z2_min_endstop = false;
#include <stdbool.h>
#include <stdio.h>
#define PIN_EXISTS(PN) (defined(PN##_PIN) && PN##_PIN >= 0)
#define Z_STEP_PIN 1
#define HAS_Z_MAX (PIN_EXISTS(Z_MAX))
#define HAS_Z_MIN (PIN_EXISTS(Z_MIN))
#define WRITE {printf("%s", "making pin high or low");}
#ifdef Z_DUAL_STEPPER_DRIVERS
#define Z_DUAL_ENDSTOPS
#ifdef Z_DUAL_ENDSTOPS
#define Z_MIN 1
#define Z_MAX -1
#endif
#endif // Z_DUAL_STEPPER_DRIVERS
void main()
{
#ifdef Z_DUAL_ENDSTOPS
locked_z_motor = false,
locked_z2_motor = false;
#endif
#if HAS_Z_MIN
static bool old_z_min_endstop = false;
#endif
#if HAS_Z_MAX
static bool old_z_max_endstop = false;
#endif
#ifdef Z_DUAL_ENDSTOPS
static bool old_z2_min_endstop = false;
static bool old_z2_max_endstop = false;
#endif
#ifdef Z_DUAL_STEPPER_DRIVERS
#ifdef Z_DUAL_ENDSTOPS
if (!old_z_max_endstop && !locked_z_motor) WRITE;
if (!old_z2_max_endstop && !locked_z2_motor) WRITE;
#endif
#endif
}
. call stepper.cpp:701: AXIS ##_APPLY_STEP(!INVERT_## AXIS ##_STEP_PIN,0); // Function macro . 166: ERROR: if (!(old_z_max_endstop && (count_direction[Z_AXIS] > 0)) && !locked_z_motor) Z_STEP_WRITE(v); \