diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index c75d684566..bef89040b3 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -547,6 +547,9 @@ #endif +// Limit an index to an array size +#define ALIM(I,ARR) _MIN(I, (signed)COUNT(ARR) - 1) + // Macros for adding #define INC_0 1 #define INC_1 2 diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index 29316c553d..721389cb2c 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -197,7 +197,7 @@ bool MarlinUI::detected() { return true; } #endif { #if ENABLED(CUSTOM_BOOTSCREEN_ANIMATED_FRAME_TIME) - const uint8_t fr = _MIN(f, COUNT(custom_bootscreen_animation) - 1); + const uint8_t fr = ALIM(f, custom_bootscreen_animation); const millis_t frame_time = pgm_read_word(&custom_bootscreen_animation[fr].duration); #endif u8g.firstPage(); diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 73c77ee7f5..1c23f95cb1 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -359,7 +359,7 @@ typedef struct PlannerSettings { #if ENABLED(EDITABLE_STEPS_PER_UNIT) float axis_steps_per_mm[DISTINCT_AXES]; #else - #define _DLIM(I) _MIN(I, (signed)COUNT(_dasu) - 1) + #define _DLIM(I) ALIM(I, _dasu) #define _DASU(N) _dasu[_DLIM(N)], #define _EASU(N) _dasu[_DLIM(E_AXIS + N)], static constexpr float axis_steps_per_mm[DISTINCT_AXES] = { diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index d325ef95d9..1a46c6cc2a 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -200,9 +200,6 @@ typedef struct { bool NUM_AXIS_LIST_(X:1, Y:1, Z:1, I:1, J:1, K:1, U:1, V:1, #undef _EN_ITEM -// Limit an index to an array size -#define ALIM(I,ARR) _MIN(I, (signed)COUNT(ARR) - 1) - // Defaults for reset / fill in on load static const uint32_t _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION; static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE; @@ -3619,7 +3616,7 @@ void MarlinSettings::reset() { constexpr float linAdvanceK[] = ADVANCE_K; EXTRUDER_LOOP() { - const float a = linAdvanceK[_MAX(uint8_t(e), COUNT(linAdvanceK) - 1)]; + const float a = linAdvanceK[ALIM(e, linAdvanceK)]; planner.extruder_advance_K[e] = a; TERN_(ADVANCE_K_EXTRA, other_extruder_advance_K[e] = a); } @@ -3630,7 +3627,7 @@ void MarlinSettings::reset() { #if ENABLED(DISTINCT_E_FACTORS) constexpr float linAdvanceTau[] = ADVANCE_TAU; EXTRUDER_LOOP() - stepper.set_advance_tau(linAdvanceTau[_MAX(uint8_t(e), COUNT(linAdvanceTau) - 1)], e); + stepper.set_advance_tau(linAdvanceTau[ALIM(e, linAdvanceTau)], e); #else stepper.set_advance_tau(ADVANCE_TAU); #endif diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index 83ada9202e..1c06d83351 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -140,7 +140,6 @@ constexpr ena_mask_t enable_overlap[] = { #ifdef SHAPING_MAX_STEPRATE constexpr float max_step_rate = SHAPING_MAX_STEPRATE; #else - #define ISALIM(I, ARR) _MIN(I, COUNT(ARR) - 1) constexpr float _ISDASU[] = DEFAULT_AXIS_STEPS_PER_UNIT; constexpr feedRate_t _ISDMF[] = DEFAULT_MAX_FEEDRATE; constexpr float max_shaped_rate = TERN0(INPUT_SHAPING_X, _ISDMF[X_AXIS] * _ISDASU[X_AXIS]) + @@ -149,7 +148,7 @@ constexpr ena_mask_t enable_overlap[] = { #if defined(__AVR__) || !defined(ADAPTIVE_STEP_SMOOTHING) // min_step_isr_frequency is known at compile time on AVRs and any reduction in SRAM is welcome template constexpr float max_isr_rate() { - return _MAX(_ISDMF[ISALIM(INDEX - 1, _ISDMF)] * _ISDASU[ISALIM(INDEX - 1, _ISDASU)], max_isr_rate()); + return _MAX(_ISDMF[ALIM(INDEX - 1, _ISDMF)] * _ISDASU[ALIM(INDEX - 1, _ISDASU)], max_isr_rate()); } template<> constexpr float max_isr_rate<0>() { return TERN0(ADAPTIVE_STEP_SMOOTHING, min_step_isr_frequency);