diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 29a625dbc3..4f6b1df98b 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -209,7 +209,10 @@ // "Ternary" that emits or omits the given content #define EMIT(V...) V #define OMIT(...) -#define TERN_(O,A) _TERN(_ENA_1(O),OMIT,EMIT)(A) // OPTION ? 'A' : '' +#define TERN_(O,A) TERF(O,EMIT)(A) // OPTION ? 'A' : '' ; Usage: TERN_(OPTION, EMITTHIS) + +// Call G(...) or swallow with OMIT(...) +#define TERF(O,G) _TERN(_ENA_1(O),OMIT,G) // OPTION ? 'G' : 'OMIT' ; Usage: TERF(OPTION, CALLTHIS)(ARGS...) // Macros to conditionally emit array items and function arguments #define _OPTITEM(A...) A, diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 3d51ce5e4b..ca6f027ade 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2041,33 +2041,15 @@ void Stepper::pulse_phase_isr() { const uint32_t advance_divisor_cached = advance_divisor; // Determine if pulses are needed - #if HAS_X_STEP - PULSE_PREP(X); - #endif - #if HAS_Y_STEP - PULSE_PREP(Y); - #endif - #if HAS_Z_STEP - PULSE_PREP(Z); - #endif - #if HAS_I_STEP - PULSE_PREP(I); - #endif - #if HAS_J_STEP - PULSE_PREP(J); - #endif - #if HAS_K_STEP - PULSE_PREP(K); - #endif - #if HAS_U_STEP - PULSE_PREP(U); - #endif - #if HAS_V_STEP - PULSE_PREP(V); - #endif - #if HAS_W_STEP - PULSE_PREP(W); - #endif + TERF(HAS_X_STEP, PULSE_PREP)(X); + TERF(HAS_Y_STEP, PULSE_PREP)(Y); + TERF(HAS_Z_STEP, PULSE_PREP)(Z); + TERF(HAS_I_STEP, PULSE_PREP)(I); + TERF(HAS_J_STEP, PULSE_PREP)(J); + TERF(HAS_K_STEP, PULSE_PREP)(K); + TERF(HAS_U_STEP, PULSE_PREP)(U); + TERF(HAS_V_STEP, PULSE_PREP)(V); + TERF(HAS_W_STEP, PULSE_PREP)(W); #if ANY(HAS_E0_STEP, MIXING_EXTRUDER) PULSE_PREP(E); @@ -2117,33 +2099,15 @@ void Stepper::pulse_phase_isr() { #endif // Pulse start - #if HAS_X_STEP - PULSE_START(X); - #endif - #if HAS_Y_STEP - PULSE_START(Y); - #endif - #if HAS_Z_STEP - PULSE_START(Z); - #endif - #if HAS_I_STEP - PULSE_START(I); - #endif - #if HAS_J_STEP - PULSE_START(J); - #endif - #if HAS_K_STEP - PULSE_START(K); - #endif - #if HAS_U_STEP - PULSE_START(U); - #endif - #if HAS_V_STEP - PULSE_START(V); - #endif - #if HAS_W_STEP - PULSE_START(W); - #endif + TERF(HAS_X_STEP, PULSE_START)(X); + TERF(HAS_Y_STEP, PULSE_START)(Y); + TERF(HAS_Z_STEP, PULSE_START)(Z); + TERF(HAS_I_STEP, PULSE_START)(I); + TERF(HAS_J_STEP, PULSE_START)(J); + TERF(HAS_K_STEP, PULSE_START)(K); + TERF(HAS_U_STEP, PULSE_START)(U); + TERF(HAS_V_STEP, PULSE_START)(V); + TERF(HAS_W_STEP, PULSE_START)(W); #if ENABLED(MIXING_EXTRUDER) if (step_needed.e) { @@ -2163,33 +2127,15 @@ void Stepper::pulse_phase_isr() { #endif // Pulse stop - #if HAS_X_STEP - PULSE_STOP(X); - #endif - #if HAS_Y_STEP - PULSE_STOP(Y); - #endif - #if HAS_Z_STEP - PULSE_STOP(Z); - #endif - #if HAS_I_STEP - PULSE_STOP(I); - #endif - #if HAS_J_STEP - PULSE_STOP(J); - #endif - #if HAS_K_STEP - PULSE_STOP(K); - #endif - #if HAS_U_STEP - PULSE_STOP(U); - #endif - #if HAS_V_STEP - PULSE_STOP(V); - #endif - #if HAS_W_STEP - PULSE_STOP(W); - #endif + TERF(HAS_X_STEP, PULSE_STOP)(X); + TERF(HAS_Y_STEP, PULSE_STOP)(Y); + TERF(HAS_Z_STEP, PULSE_STOP)(Z); + TERF(HAS_I_STEP, PULSE_STOP)(I); + TERF(HAS_J_STEP, PULSE_STOP)(J); + TERF(HAS_K_STEP, PULSE_STOP)(K); + TERF(HAS_U_STEP, PULSE_STOP)(U); + TERF(HAS_V_STEP, PULSE_STOP)(V); + TERF(HAS_W_STEP, PULSE_STOP)(W); #if ENABLED(MIXING_EXTRUDER) if (step_needed.e) E_STEP_WRITE(mixer.get_stepper(), !STEP_STATE_E); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 5d5ccd3e4d..418f8c498a 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -3131,27 +3131,14 @@ void Temperature::init() { OUT_WRITE(HEATER_0_PIN, ENABLED(HEATER_0_INVERTING)); #endif #endif - #if HAS_HEATER_1 - OUT_WRITE(HEATER_1_PIN, ENABLED(HEATER_1_INVERTING)); - #endif - #if HAS_HEATER_2 - OUT_WRITE(HEATER_2_PIN, ENABLED(HEATER_2_INVERTING)); - #endif - #if HAS_HEATER_3 - OUT_WRITE(HEATER_3_PIN, ENABLED(HEATER_3_INVERTING)); - #endif - #if HAS_HEATER_4 - OUT_WRITE(HEATER_4_PIN, ENABLED(HEATER_4_INVERTING)); - #endif - #if HAS_HEATER_5 - OUT_WRITE(HEATER_5_PIN, ENABLED(HEATER_5_INVERTING)); - #endif - #if HAS_HEATER_6 - OUT_WRITE(HEATER_6_PIN, ENABLED(HEATER_6_INVERTING)); - #endif - #if HAS_HEATER_7 - OUT_WRITE(HEATER_7_PIN, ENABLED(HEATER_7_INVERTING)); - #endif + + TERF(HAS_HEATER_1, OUT_WRITE)(HEATER_1_PIN, ENABLED(HEATER_1_INVERTING)); + TERF(HAS_HEATER_2, OUT_WRITE)(HEATER_2_PIN, ENABLED(HEATER_2_INVERTING)); + TERF(HAS_HEATER_3, OUT_WRITE)(HEATER_3_PIN, ENABLED(HEATER_3_INVERTING)); + TERF(HAS_HEATER_4, OUT_WRITE)(HEATER_4_PIN, ENABLED(HEATER_4_INVERTING)); + TERF(HAS_HEATER_5, OUT_WRITE)(HEATER_5_PIN, ENABLED(HEATER_5_INVERTING)); + TERF(HAS_HEATER_6, OUT_WRITE)(HEATER_6_PIN, ENABLED(HEATER_6_INVERTING)); + TERF(HAS_HEATER_7, OUT_WRITE)(HEATER_7_PIN, ENABLED(HEATER_7_INVERTING)); #if HAS_HEATED_BED #if ENABLED(PELTIER_BED) @@ -3173,33 +3160,15 @@ void Temperature::init() { OUT_WRITE(COOLER_PIN, ENABLED(COOLER_INVERTING)); #endif - #if HAS_FAN0 - INIT_FAN_PIN(FAN0_PIN); - #endif - #if HAS_FAN1 - INIT_FAN_PIN(FAN1_PIN); - #endif - #if HAS_FAN2 - INIT_FAN_PIN(FAN2_PIN); - #endif - #if HAS_FAN3 - INIT_FAN_PIN(FAN3_PIN); - #endif - #if HAS_FAN4 - INIT_FAN_PIN(FAN4_PIN); - #endif - #if HAS_FAN5 - INIT_FAN_PIN(FAN5_PIN); - #endif - #if HAS_FAN6 - INIT_FAN_PIN(FAN6_PIN); - #endif - #if HAS_FAN7 - INIT_FAN_PIN(FAN7_PIN); - #endif - #if ENABLED(USE_CONTROLLER_FAN) - INIT_FAN_PIN(CONTROLLER_FAN_PIN); - #endif + TERF(HAS_FAN0, INIT_FAN_PIN)(FAN0_PIN); + TERF(HAS_FAN1, INIT_FAN_PIN)(FAN1_PIN); + TERF(HAS_FAN2, INIT_FAN_PIN)(FAN2_PIN); + TERF(HAS_FAN3, INIT_FAN_PIN)(FAN3_PIN); + TERF(HAS_FAN4, INIT_FAN_PIN)(FAN4_PIN); + TERF(HAS_FAN5, INIT_FAN_PIN)(FAN5_PIN); + TERF(HAS_FAN6, INIT_FAN_PIN)(FAN6_PIN); + TERF(HAS_FAN7, INIT_FAN_PIN)(FAN7_PIN); + TERF(USE_CONTROLLER_FAN, INIT_FAN_PIN)(CONTROLLER_FAN_PIN); TERN_(HAS_MAXTC_SW_SPI, max_tc_spi.init()); @@ -3229,9 +3198,7 @@ void Temperature::init() { TERN_(POWER_MONITOR_CURRENT, hal.adc_enable(POWER_MONITOR_CURRENT_PIN)); TERN_(POWER_MONITOR_VOLTAGE, hal.adc_enable(POWER_MONITOR_VOLTAGE_PIN)); - #if HAS_JOY_ADC_EN - SET_INPUT_PULLUP(JOY_EN_PIN); - #endif + TERF(HAS_JOY_ADC_EN, SET_INPUT_PULLUP)(JOY_EN_PIN); HAL_timer_start(MF_TIMER_TEMP, TEMP_TIMER_FREQUENCY); ENABLE_TEMPERATURE_INTERRUPT(); @@ -4140,18 +4107,12 @@ void Temperature::isr() { #if HAS_HEATED_BED _PWM_MOD(BED, soft_pwm_bed, temp_bed); - #if ENABLED(PELTIER_BED) - WRITE_PELTIER_DIR(temp_bed.peltier_dir_heating); - #endif + TERF(PELTIER_BED, WRITE_PELTIER_DIR)(temp_bed.peltier_dir_heating); #endif - #if HAS_HEATED_CHAMBER - _PWM_MOD(CHAMBER, soft_pwm_chamber, temp_chamber); - #endif + TERF(HAS_HEATED_CHAMBER, _PWM_MOD)(CHAMBER, soft_pwm_chamber, temp_chamber); - #if HAS_COOLER - _PWM_MOD(COOLER, soft_pwm_cooler, temp_cooler); - #endif + TERF(HAS_COOLER, _PWM_MOD)(COOLER, soft_pwm_cooler, temp_cooler); #if ENABLED(FAN_SOFT_PWM) @@ -4165,30 +4126,14 @@ void Temperature::isr() { WRITE_FAN(N, spcf > pwm_mask ? HIGH : LOW); \ }while(0) - #if HAS_FAN0 - _FAN_PWM(0); - #endif - #if HAS_FAN1 - _FAN_PWM(1); - #endif - #if HAS_FAN2 - _FAN_PWM(2); - #endif - #if HAS_FAN3 - _FAN_PWM(3); - #endif - #if HAS_FAN4 - _FAN_PWM(4); - #endif - #if HAS_FAN5 - _FAN_PWM(5); - #endif - #if HAS_FAN6 - _FAN_PWM(6); - #endif - #if HAS_FAN7 - _FAN_PWM(7); - #endif + TERF(HAS_FAN0, _FAN_PWM)(0); + TERF(HAS_FAN1, _FAN_PWM)(1); + TERF(HAS_FAN2, _FAN_PWM)(2); + TERF(HAS_FAN3, _FAN_PWM)(3); + TERF(HAS_FAN4, _FAN_PWM)(4); + TERF(HAS_FAN5, _FAN_PWM)(5); + TERF(HAS_FAN6, _FAN_PWM)(6); + TERF(HAS_FAN7, _FAN_PWM)(7); #endif } else { @@ -4198,17 +4143,9 @@ void Temperature::isr() { REPEAT(HOTENDS, _PWM_LOW_E); #endif - #if HAS_HEATED_BED - _PWM_LOW(BED, soft_pwm_bed); - #endif - - #if HAS_HEATED_CHAMBER - _PWM_LOW(CHAMBER, soft_pwm_chamber); - #endif - - #if HAS_COOLER - _PWM_LOW(COOLER, soft_pwm_cooler); - #endif + TERF(HAS_HEATED_BED, _PWM_LOW)(BED, soft_pwm_bed); + TERF(HAS_HEATED_CHAMBER, _PWM_LOW)(CHAMBER, soft_pwm_chamber); + TERF(HAS_COOLER, _PWM_LOW)(COOLER, soft_pwm_cooler); #if ENABLED(FAN_SOFT_PWM) #if HAS_FAN0 @@ -4271,17 +4208,9 @@ void Temperature::isr() { REPEAT(HOTENDS, _SLOW_PWM_E); #endif - #if HAS_HEATED_BED - _SLOW_PWM(BED, soft_pwm_bed, temp_bed); - #endif - - #if HAS_HEATED_CHAMBER - _SLOW_PWM(CHAMBER, soft_pwm_chamber, temp_chamber); - #endif - - #if HAS_COOLER - _SLOW_PWM(COOLER, soft_pwm_cooler, temp_cooler); - #endif + TERF(HAS_HEATED_BED, _SLOW_PWM)(BED, soft_pwm_bed, temp_bed); + TERF(HAS_HEATED_CHAMBER, _SLOW_PWM)(CHAMBER, soft_pwm_chamber, temp_chamber); + TERF(HAS_COOLER, _SLOW_PWM)(COOLER, soft_pwm_cooler, temp_cooler); } // slow_pwm_count == 0 @@ -4290,17 +4219,9 @@ void Temperature::isr() { REPEAT(HOTENDS, _PWM_OFF_E); #endif - #if HAS_HEATED_BED - _PWM_OFF(BED, soft_pwm_bed); - #endif - - #if HAS_HEATED_CHAMBER - _PWM_OFF(CHAMBER, soft_pwm_chamber); - #endif - - #if HAS_COOLER - _PWM_OFF(COOLER, soft_pwm_cooler, temp_cooler); - #endif + TERF(HAS_HEATED_BED, _PWM_OFF)(BED, soft_pwm_bed); + TERF(HAS_HEATED_CHAMBER, _PWM_OFF)(CHAMBER, soft_pwm_chamber); + TERF(HAS_COOLER, _PWM_OFF)(COOLER, soft_pwm_cooler, temp_cooler); #if ENABLED(FAN_SOFT_PWM) if (pwm_count_tmp >= 127) { @@ -4309,30 +4230,14 @@ void Temperature::isr() { soft_pwm_count_fan[N] = soft_pwm_amount_fan[N] >> 1; \ WRITE_FAN(N, soft_pwm_count_fan[N] > 0 ? HIGH : LOW); \ }while(0) - #if HAS_FAN0 - _PWM_FAN(0); - #endif - #if HAS_FAN1 - _PWM_FAN(1); - #endif - #if HAS_FAN2 - _PWM_FAN(2); - #endif - #if HAS_FAN3 - _FAN_PWM(3); - #endif - #if HAS_FAN4 - _FAN_PWM(4); - #endif - #if HAS_FAN5 - _FAN_PWM(5); - #endif - #if HAS_FAN6 - _FAN_PWM(6); - #endif - #if HAS_FAN7 - _FAN_PWM(7); - #endif + TERF(HAS_FAN0, _PWM_FAN)(0); + TERF(HAS_FAN1, _PWM_FAN)(1); + TERF(HAS_FAN2, _PWM_FAN)(2); + TERF(HAS_FAN3, _FAN_PWM)(3); + TERF(HAS_FAN4, _FAN_PWM)(4); + TERF(HAS_FAN5, _FAN_PWM)(5); + TERF(HAS_FAN6, _FAN_PWM)(6); + TERF(HAS_FAN7, _FAN_PWM)(7); } #if HAS_FAN0 if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0, LOW);