diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 85c968b2c6..7c746fa5f0 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -3192,7 +3192,7 @@ void Planner::set_position_mm(const xyze_pos_t &xyze) { if (has_blocks_queued()) buffer_sync_block(BLOCK_BIT_SYNC_POSITION); else - stepper.set_axis_position(E_AXIS, position.e); + stepper.set_e_position(position.e); } #endif // HAS_EXTRUDERS diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 1684a4b60c..bc658e50da 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -3407,6 +3407,18 @@ void Stepper::set_axis_position(const AxisEnum a, const int32_t &v) { #endif } +#if HAS_EXTRUDERS + + void Stepper::set_e_position(const int32_t &v) { + planner.synchronize(); + + AVR_ATOMIC_SECTION_START(); + count_position.e = v; + AVR_ATOMIC_SECTION_END(); + } + +#endif // HAS_EXTRUDERS + #if ENABLED(FT_MOTION) void Stepper::ftMotion_syncPosition() { diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index 511a3aa80d..e5a4249dbd 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -540,6 +540,11 @@ class Stepper { static void set_position(const xyze_long_t &spos); static void set_axis_position(const AxisEnum a, const int32_t &v); + #if HAS_EXTRUDERS + // Save a little when E is the only one used + static void set_e_position(const int32_t &v); + #endif + // Report the positions of the steppers, in steps static void report_a_position(const xyz_long_t &pos); static void report_positions();