From 94ce0d24d6ed84f78e5ff2cf07e6e3be7de8a0ef Mon Sep 17 00:00:00 2001 From: Andrew <18502096+classicrocker883@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:33:37 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20Add=20optimal=20`stepper.set=5Fe?= =?UTF-8?q?=5Fposition()`=20(#27293)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/module/planner.cpp | 2 +- Marlin/src/module/stepper.cpp | 12 ++++++++++++ Marlin/src/module/stepper.h | 5 +++++ 3 files changed, 18 insertions(+), 1 deletion(-) 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();