🧑‍💻 ALIM(I,ARR) macro
Some checks are pending
CI - Build Tests / Build Test (push) Waiting to run
CI - Unit Tests / Unit Test (push) Waiting to run

This commit is contained in:
Scott Lahteine 2025-05-09 16:37:06 -05:00
parent 54c1a1df4e
commit b12028f4dd
5 changed files with 8 additions and 9 deletions

View file

@ -547,6 +547,9 @@
#endif #endif
// Limit an index to an array size
#define ALIM(I,ARR) _MIN(I, (signed)COUNT(ARR) - 1)
// Macros for adding // Macros for adding
#define INC_0 1 #define INC_0 1
#define INC_1 2 #define INC_1 2

View file

@ -197,7 +197,7 @@ bool MarlinUI::detected() { return true; }
#endif #endif
{ {
#if ENABLED(CUSTOM_BOOTSCREEN_ANIMATED_FRAME_TIME) #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); const millis_t frame_time = pgm_read_word(&custom_bootscreen_animation[fr].duration);
#endif #endif
u8g.firstPage(); u8g.firstPage();

View file

@ -359,7 +359,7 @@ typedef struct PlannerSettings {
#if ENABLED(EDITABLE_STEPS_PER_UNIT) #if ENABLED(EDITABLE_STEPS_PER_UNIT)
float axis_steps_per_mm[DISTINCT_AXES]; float axis_steps_per_mm[DISTINCT_AXES];
#else #else
#define _DLIM(I) _MIN(I, (signed)COUNT(_dasu) - 1) #define _DLIM(I) ALIM(I, _dasu)
#define _DASU(N) _dasu[_DLIM(N)], #define _DASU(N) _dasu[_DLIM(N)],
#define _EASU(N) _dasu[_DLIM(E_AXIS + N)], #define _EASU(N) _dasu[_DLIM(E_AXIS + N)],
static constexpr float axis_steps_per_mm[DISTINCT_AXES] = { static constexpr float axis_steps_per_mm[DISTINCT_AXES] = {

View file

@ -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 #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 // Defaults for reset / fill in on load
static const uint32_t _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION; static const uint32_t _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION;
static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE; static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE;
@ -3619,7 +3616,7 @@ void MarlinSettings::reset() {
constexpr float linAdvanceK[] = ADVANCE_K; constexpr float linAdvanceK[] = ADVANCE_K;
EXTRUDER_LOOP() { 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; planner.extruder_advance_K[e] = a;
TERN_(ADVANCE_K_EXTRA, other_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) #if ENABLED(DISTINCT_E_FACTORS)
constexpr float linAdvanceTau[] = ADVANCE_TAU; constexpr float linAdvanceTau[] = ADVANCE_TAU;
EXTRUDER_LOOP() 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 #else
stepper.set_advance_tau(ADVANCE_TAU); stepper.set_advance_tau(ADVANCE_TAU);
#endif #endif

View file

@ -140,7 +140,6 @@ constexpr ena_mask_t enable_overlap[] = {
#ifdef SHAPING_MAX_STEPRATE #ifdef SHAPING_MAX_STEPRATE
constexpr float max_step_rate = SHAPING_MAX_STEPRATE; constexpr float max_step_rate = SHAPING_MAX_STEPRATE;
#else #else
#define ISALIM(I, ARR) _MIN(I, COUNT(ARR) - 1)
constexpr float _ISDASU[] = DEFAULT_AXIS_STEPS_PER_UNIT; constexpr float _ISDASU[] = DEFAULT_AXIS_STEPS_PER_UNIT;
constexpr feedRate_t _ISDMF[] = DEFAULT_MAX_FEEDRATE; constexpr feedRate_t _ISDMF[] = DEFAULT_MAX_FEEDRATE;
constexpr float max_shaped_rate = TERN0(INPUT_SHAPING_X, _ISDMF[X_AXIS] * _ISDASU[X_AXIS]) + 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) #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 // min_step_isr_frequency is known at compile time on AVRs and any reduction in SRAM is welcome
template<unsigned int INDEX=DISTINCT_AXES> constexpr float max_isr_rate() { template<unsigned int INDEX=DISTINCT_AXES> constexpr float max_isr_rate() {
return _MAX(_ISDMF[ISALIM(INDEX - 1, _ISDMF)] * _ISDASU[ISALIM(INDEX - 1, _ISDASU)], max_isr_rate<INDEX - 1>()); return _MAX(_ISDMF[ALIM(INDEX - 1, _ISDMF)] * _ISDASU[ALIM(INDEX - 1, _ISDASU)], max_isr_rate<INDEX - 1>());
} }
template<> constexpr float max_isr_rate<0>() { template<> constexpr float max_isr_rate<0>() {
return TERN0(ADAPTIVE_STEP_SMOOTHING, min_step_isr_frequency); return TERN0(ADAPTIVE_STEP_SMOOTHING, min_step_isr_frequency);