diff --git a/Marlin/src/HAL/ESP32/i2s.cpp b/Marlin/src/HAL/ESP32/i2s.cpp index 4b17db3daf..6aeeb0e3dc 100644 --- a/Marlin/src/HAL/ESP32/i2s.cpp +++ b/Marlin/src/HAL/ESP32/i2s.cpp @@ -145,7 +145,7 @@ static void IRAM_ATTR i2s_intr_handler_default(void *arg) { void stepperTask(void *parameter) { uint32_t nextMainISR = 0; #if ENABLED(LIN_ADVANCE) - uint32_t nextAdvanceISR = Stepper::LA_ADV_NEVER; + uint32_t nextAdvanceISR = stepper.LA_ADV_NEVER; #endif for (;;) { @@ -167,13 +167,13 @@ void stepperTask(void *parameter) { if (!using_ftMotion) { if (!nextMainISR) { - Stepper::pulse_phase_isr(); - nextMainISR = Stepper::block_phase_isr(); + stepper.pulse_phase_isr(); + nextMainISR = stepper.block_phase_isr(); } #if ENABLED(LIN_ADVANCE) else if (!nextAdvanceISR) { - Stepper::advance_isr(); - nextAdvanceISR = Stepper::la_interval; + stepper.advance_isr(); + nextAdvanceISR = stepper.la_interval; } #endif else @@ -182,10 +182,10 @@ void stepperTask(void *parameter) { nextMainISR--; #if ENABLED(LIN_ADVANCE) - if (nextAdvanceISR == Stepper::LA_ADV_NEVER) - nextAdvanceISR = Stepper::la_interval; + if (nextAdvanceISR == stepper.LA_ADV_NEVER) + nextAdvanceISR = stepper.la_interval; - if (nextAdvanceISR && nextAdvanceISR != Stepper::LA_ADV_NEVER) + if (nextAdvanceISR && nextAdvanceISR != stepper.LA_ADV_NEVER) nextAdvanceISR--; #endif } diff --git a/Marlin/src/feature/max7219.cpp b/Marlin/src/feature/max7219.cpp index 5a25ea6710..5a61922c1d 100644 --- a/Marlin/src/feature/max7219.cpp +++ b/Marlin/src/feature/max7219.cpp @@ -757,7 +757,7 @@ void Max7219::idle_tasks() { #ifdef MAX7219_DEBUG_MULTISTEPPING static uint8_t last_multistepping = 0; - const uint8_t multistepping = Stepper::steps_per_isr; + const uint8_t multistepping = stepper.steps_per_isr; if (multistepping != last_multistepping) { static uint8_t log2_old = 0; uint8_t log2_new = 0; diff --git a/Marlin/src/feature/mmu3/mmu3_error_converter.cpp b/Marlin/src/feature/mmu3/mmu3_error_converter.cpp index d5d124427e..d7fc651fbd 100644 --- a/Marlin/src/feature/mmu3/mmu3_error_converter.cpp +++ b/Marlin/src/feature/mmu3/mmu3_error_converter.cpp @@ -196,16 +196,16 @@ namespace MMU3 { return FindErrorIndex(ERR_OTHER_UNKNOWN_ERROR); } - uint16_t PrusaErrorCode(const uint8_t i) { return (uint16_t)pgm_read_word(&errorCodes[i]); } + uint16_t PrusaErrorCode(const uint8_t i) { return pgm_read_word(errorCodes + i); } - FSTR_P const PrusaErrorTitle(const uint8_t i) { return (FSTR_P const)pgm_read_ptr(&errorTitles[i]); } - FSTR_P const PrusaErrorDesc(const uint8_t i) { return (FSTR_P const)pgm_read_ptr(&errorDescs[i]); } + FSTR_P const PrusaErrorTitle(const uint8_t i) { return (FSTR_P const)pgm_read_ptr(errorTitles + i); } + FSTR_P const PrusaErrorDesc(const uint8_t i) { return (FSTR_P const)pgm_read_ptr(errorDescs + i); } uint8_t PrusaErrorButtons(const uint8_t i) { return pgm_read_byte(errorButtons + i); } FSTR_P const PrusaErrorButtonTitle(const uint8_t bi) { // -1 represents the hidden NoOperation button which is not drawn in any way - return (FSTR_P const)pgm_read_ptr(&btnOperation[bi - 1]); + return (FSTR_P const)pgm_read_ptr(btnOperation + bi - 1); } Buttons ButtonPressed(const ErrorCode ec) { diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 169f84983c..cd3c1cd573 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -4460,7 +4460,7 @@ static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive." * Direct Stepping requirements */ #if ENABLED(DIRECT_STEPPING) - #if ENABLED(CPU_32_BIT) + #ifdef CPU_32_BIT #error "Direct Stepping is not supported on 32-bit boards." #elif !IS_FULL_CARTESIAN #error "Direct Stepping is incompatible with enabled kinematics." diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 2ffdee798d..137439c6df 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -104,6 +104,10 @@ void menu_backlash(); #endif #if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE) + #define HAS_ADV_FILAMENT_MENU 1 +#endif + +#if HAS_ADV_FILAMENT_MENU // // Advanced Settings > Filament // @@ -138,7 +142,7 @@ void menu_backlash(); EDIT_ITEM_FAST_N(float43, e, MSG_FILAMENT_DIAM_E, &planner.filament_size[e], 1.5f, 3.25f, planner.calculate_volumetric_multipliers); #endif } - #endif + #endif // !NO_VOLUMETRICS #if ENABLED(CONFIGURE_FILAMENT_CHANGE) constexpr float extrude_maxlength = TERN(PREVENT_LENGTHY_EXTRUDE, EXTRUDE_MAXLENGTH, 999); @@ -169,7 +173,7 @@ void menu_backlash(); END_MENU(); } -#endif // !NO_VOLUMETRICS || ADVANCED_PAUSE_FEATURE +#endif // HAS_ADV_FILAMENT_MENU // // Advanced Settings > Temperature helpers @@ -729,7 +733,7 @@ void menu_advanced_settings() { SUBMENU(MSG_TEMPERATURE, menu_advanced_temperature); #endif - #if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE) + #if HAS_ADV_FILAMENT_MENU SUBMENU(MSG_FILAMENT, menu_advanced_filament); #elif ENABLED(LIN_ADVANCE) #if DISTINCT_E < 2 diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h index df2c90425c..af4558cefc 100644 --- a/Marlin/src/lcd/menu/menu_item.h +++ b/Marlin/src/lcd/menu/menu_item.h @@ -276,6 +276,14 @@ class MenuItem_bool : public MenuEditItemBase { * EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, SPEED_EDIT_MIN, SPEED_EDIT_MAX) * MenuItem_int3::action(flabel, &feedrate_percentage, SPEED_EDIT_MIN, SPEED_EDIT_MAX) * MenuItem_int3::draw(sel, row, flabel, &feedrate_percentage, SPEED_EDIT_MIN, SPEED_EDIT_MAX) + * + * Variants use standard suffixes. N:Number Index, S:C-string for substitution, F:F-string label, f:F-string for substitution + * _MENU_ITEM_F(TYPE, V...) Item with optional data + * _MENU_ITEM_N_S_F(TYPE, N, S, V...) Item with index value, C-string, and optional data + * _MENU_ITEM_N_f_F(TYPE, N, f, V...) Item with index value and F-string + * _MENU_ITEM_N_F(TYPE, N, V...) Item with index value + * _MENU_ITEM_S_F(TYPE, S, V...) Item with a unique string + * _MENU_ITEM_f_F(TYPE, f, V...) Item with a unique F-string */ #if ENABLED(ENCODER_RATE_MULTIPLIER) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 561d13fa2a..b3df490cf0 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -780,7 +780,7 @@ block_t* Planner::get_current_block() { * by the provided factors. If entry_factor is 0 don't change the initial_rate. * Assumes that the implied initial_rate and final_rate are no less than * sqrt(block->acceleration_steps_per_s2 / 2). This is ensured through - * minimum_planner_speed_sqr / min_entry_speed_sqr though note there's one + * minimum_planner_speed_sqr / min_entry_speed_sqr - but there's one * exception in recalculate_trapezoids(). * * ############ VERY IMPORTANT ############ @@ -854,6 +854,8 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t block->accelerate_before = accelerate_steps; block->decelerate_start = block->step_event_count - decelerate_steps; block->initial_rate = initial_rate; + block->final_rate = final_rate; + #if ENABLED(S_CURVE_ACCELERATION) block->acceleration_time = acceleration_time; block->deceleration_time = deceleration_time; @@ -861,7 +863,6 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t block->deceleration_time_inverse = deceleration_time_inverse; block->cruise_rate = cruise_rate; #endif - block->final_rate = final_rate; #if ENABLED(LIN_ADVANCE) if (block->la_advance_rate) { @@ -892,30 +893,29 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t * Laser Trap Power works for all Jerk and Curve modes; however Arc-based moves will have issues since * the segments are usually too small. */ - if (cutter.cutter_mode == CUTTER_MODE_CONTINUOUS) { - if (planner.laser_inline.status.isPowered && planner.laser_inline.status.isEnabled) { - if (block->laser.power > 0) { - NOLESS(block->laser.power, laser_power_floor); - block->laser.trap_ramp_active_pwr = (block->laser.power - laser_power_floor) * (initial_rate / float(block->nominal_rate)) + laser_power_floor; - block->laser.trap_ramp_entry_incr = (block->laser.power - block->laser.trap_ramp_active_pwr) / accelerate_steps; - float laser_pwr = block->laser.power * (final_rate / float(block->nominal_rate)); - NOLESS(laser_pwr, laser_power_floor); - block->laser.trap_ramp_exit_decr = (block->laser.power - laser_pwr) / decelerate_steps; - #if ENABLED(DEBUG_LASER_TRAP) - SERIAL_ECHO_MSG("lp:",block->laser.power); - SERIAL_ECHO_MSG("as:",accelerate_steps); - SERIAL_ECHO_MSG("ds:",decelerate_steps); - SERIAL_ECHO_MSG("p.trap:",block->laser.trap_ramp_active_pwr); - SERIAL_ECHO_MSG("p.incr:",block->laser.trap_ramp_entry_incr); - SERIAL_ECHO_MSG("p.decr:",block->laser.trap_ramp_exit_decr); - #endif - } - else { - block->laser.trap_ramp_active_pwr = 0; - block->laser.trap_ramp_entry_incr = 0; - block->laser.trap_ramp_exit_decr = 0; - } - + if (cutter.cutter_mode == CUTTER_MODE_CONTINUOUS + && planner.laser_inline.status.isPowered && planner.laser_inline.status.isEnabled + ) { + if (block->laser.power > 0) { + NOLESS(block->laser.power, laser_power_floor); + block->laser.trap_ramp_active_pwr = (block->laser.power - laser_power_floor) * (initial_rate / float(block->nominal_rate)) + laser_power_floor; + block->laser.trap_ramp_entry_incr = (block->laser.power - block->laser.trap_ramp_active_pwr) / accelerate_steps; + float laser_pwr = block->laser.power * (final_rate / float(block->nominal_rate)); + NOLESS(laser_pwr, laser_power_floor); + block->laser.trap_ramp_exit_decr = (block->laser.power - laser_pwr) / decelerate_steps; + #if ENABLED(DEBUG_LASER_TRAP) + SERIAL_ECHO_MSG("lp:", block->laser.power); + SERIAL_ECHO_MSG("as:", accelerate_steps); + SERIAL_ECHO_MSG("ds:", decelerate_steps); + SERIAL_ECHO_MSG("p.trap:", block->laser.trap_ramp_active_pwr); + SERIAL_ECHO_MSG("p.incr:", block->laser.trap_ramp_entry_incr); + SERIAL_ECHO_MSG("p.decr:", block->laser.trap_ramp_exit_decr); + #endif + } + else { + block->laser.trap_ramp_active_pwr = 0; + block->laser.trap_ramp_entry_incr = 0; + block->laser.trap_ramp_exit_decr = 0; } } #endif // LASER_POWER_TRAP @@ -2440,7 +2440,7 @@ bool Planner::_populate_block( block->acceleration_steps_per_s2 = accel; block->acceleration = accel / steps_per_mm; #if DISABLED(S_CURVE_ACCELERATION) - block->acceleration_rate = (uint32_t)(accel * (float(1UL << 24) / (STEPPER_TIMER_RATE))); + block->acceleration_rate = uint32_t(accel * (float(1UL << 24) / (STEPPER_TIMER_RATE))); #endif #if ENABLED(LIN_ADVANCE) @@ -2448,10 +2448,10 @@ bool Planner::_populate_block( block->la_scaling = 0; if (use_advance_lead) { - // the Bresenham algorithm will convert this step rate into extruder steps + // The Bresenham algorithm will convert this step rate into extruder steps block->la_advance_rate = extruder_advance_K[E_INDEX_N(extruder)] * block->acceleration_steps_per_s2; - // reduce LA ISR frequency by calling it only often enough to ensure that there will + // Reduce LA ISR frequency by calling it only often enough to ensure that there will // never be more than four extruder steps per call for (uint32_t dividend = block->steps.e << 1; dividend <= (block->step_event_count >> 2); dividend <<= 1) block->la_scaling++; @@ -2461,7 +2461,7 @@ bool Planner::_populate_block( SERIAL_ECHOLNPGM("eISR running at > 10kHz: ", block->la_advance_rate); #endif } - #endif + #endif // LIN_ADVANCE // Formula for the average speed over a 1 step worth of distance if starting from zero and // accelerating at the current limit. Since we can only change the speed every step this is a