浏览代码

Improve E_AXIS_N macro

Scott Lahteine 6 年前
父节点
当前提交
7db0113b53

+ 2
- 2
Marlin/src/gcode/feature/trinamic/M911-M915.cpp 查看文件

163
   void GcodeSuite::M913() {
163
   void GcodeSuite::M913() {
164
     #define TMC_SAY_PWMTHRS(A,Q) tmc_get_pwmthrs(stepper##Q, planner.axis_steps_per_mm[_AXIS(A)])
164
     #define TMC_SAY_PWMTHRS(A,Q) tmc_get_pwmthrs(stepper##Q, planner.axis_steps_per_mm[_AXIS(A)])
165
     #define TMC_SET_PWMTHRS(A,Q) tmc_set_pwmthrs(stepper##Q, value, planner.axis_steps_per_mm[_AXIS(A)])
165
     #define TMC_SET_PWMTHRS(A,Q) tmc_set_pwmthrs(stepper##Q, value, planner.axis_steps_per_mm[_AXIS(A)])
166
-    #define TMC_SAY_PWMTHRS_E(E) do{ constexpr uint8_t extruder = E; tmc_get_pwmthrs(stepperE##E, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }while(0)
167
-    #define TMC_SET_PWMTHRS_E(E) do{ constexpr uint8_t extruder = E; tmc_set_pwmthrs(stepperE##E, value, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }while(0)
166
+    #define TMC_SAY_PWMTHRS_E(E) tmc_get_pwmthrs(stepperE##E, planner.axis_steps_per_mm[E_AXIS_N(E)])
167
+    #define TMC_SET_PWMTHRS_E(E) tmc_set_pwmthrs(stepperE##E, value, planner.axis_steps_per_mm[E_AXIS_N(E)])
168
 
168
 
169
     bool report = true;
169
     bool report = true;
170
     const uint8_t index = parser.byteval('I');
170
     const uint8_t index = parser.byteval('I');

+ 2
- 2
Marlin/src/inc/Conditionals_LCD.h 查看文件

472
  */
472
  */
473
 #if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
473
 #if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
474
   #define XYZE_N (XYZ + E_STEPPERS)
474
   #define XYZE_N (XYZ + E_STEPPERS)
475
-  #define E_AXIS_N (E_AXIS + extruder)
475
+  #define E_AXIS_N(E) (E_AXIS + E)
476
 #else
476
 #else
477
   #undef DISTINCT_E_FACTORS
477
   #undef DISTINCT_E_FACTORS
478
   #define XYZE_N XYZE
478
   #define XYZE_N XYZE
479
-  #define E_AXIS_N E_AXIS
479
+  #define E_AXIS_N(E) E_AXIS
480
 #endif
480
 #endif
481
 
481
 
482
 /**
482
 /**

+ 6
- 6
Marlin/src/module/planner.cpp 查看文件

1687
         }
1687
         }
1688
       #endif // PREVENT_COLD_EXTRUSION
1688
       #endif // PREVENT_COLD_EXTRUSION
1689
       #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
1689
       #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
1690
-        if (ABS(de * e_factor[extruder]) > (int32_t)axis_steps_per_mm[E_AXIS_N] * (EXTRUDE_MAXLENGTH)) { // It's not important to get max. extrusion length in a precision < 1mm, so save some cycles and cast to int
1690
+        if (ABS(de * e_factor[extruder]) > (int32_t)axis_steps_per_mm[E_AXIS_N(extruder)] * (EXTRUDE_MAXLENGTH)) { // It's not important to get max. extrusion length in a precision < 1mm, so save some cycles and cast to int
1691
           position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
1691
           position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
1692
           #if HAS_POSITION_FLOAT
1692
           #if HAS_POSITION_FLOAT
1693
             position_float[E_AXIS] = target_float[E_AXIS];
1693
             position_float[E_AXIS] = target_float[E_AXIS];
1985
     delta_mm[B_AXIS] = db * steps_to_mm[B_AXIS];
1985
     delta_mm[B_AXIS] = db * steps_to_mm[B_AXIS];
1986
     delta_mm[C_AXIS] = dc * steps_to_mm[C_AXIS];
1986
     delta_mm[C_AXIS] = dc * steps_to_mm[C_AXIS];
1987
   #endif
1987
   #endif
1988
-  delta_mm[E_AXIS] = esteps_float * steps_to_mm[E_AXIS_N];
1988
+  delta_mm[E_AXIS] = esteps_float * steps_to_mm[E_AXIS_N(extruder)];
1989
 
1989
 
1990
   if (block->steps[A_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[B_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[C_AXIS] < MIN_STEPS_PER_SEGMENT) {
1990
   if (block->steps[A_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[B_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[C_AXIS] < MIN_STEPS_PER_SEGMENT) {
1991
     block->millimeters = ABS(delta_mm[E_AXIS]);
1991
     block->millimeters = ABS(delta_mm[E_AXIS]);
2254
   #endif
2254
   #endif
2255
   #if ENABLED(LIN_ADVANCE)
2255
   #if ENABLED(LIN_ADVANCE)
2256
     if (block->use_advance_lead) {
2256
     if (block->use_advance_lead) {
2257
-      block->advance_speed = (STEPPER_TIMER_RATE) / (extruder_advance_K[active_extruder] * block->e_D_ratio * block->acceleration * axis_steps_per_mm[E_AXIS_N]);
2257
+      block->advance_speed = (STEPPER_TIMER_RATE) / (extruder_advance_K[active_extruder] * block->e_D_ratio * block->acceleration * axis_steps_per_mm[E_AXIS_N(extruder)]);
2258
       #if ENABLED(LA_DEBUG)
2258
       #if ENABLED(LA_DEBUG)
2259
         if (extruder_advance_K[active_extruder] * block->e_D_ratio * block->acceleration * 2 < SQRT(block->nominal_speed_sqr) * block->e_D_ratio)
2259
         if (extruder_advance_K[active_extruder] * block->e_D_ratio * block->acceleration * 2 < SQRT(block->nominal_speed_sqr) * block->e_D_ratio)
2260
           SERIAL_ECHOLNPGM("More than 2 steps per eISR loop executed.");
2260
           SERIAL_ECHOLNPGM("More than 2 steps per eISR loop executed.");
2566
 
2566
 
2567
   // When changing extruders recalculate steps corresponding to the E position
2567
   // When changing extruders recalculate steps corresponding to the E position
2568
   #if ENABLED(DISTINCT_E_FACTORS)
2568
   #if ENABLED(DISTINCT_E_FACTORS)
2569
-    if (last_extruder != extruder && axis_steps_per_mm[E_AXIS_N] != axis_steps_per_mm[E_AXIS + last_extruder]) {
2570
-      position[E_AXIS] = LROUND(position[E_AXIS] * axis_steps_per_mm[E_AXIS_N] * steps_to_mm[E_AXIS + last_extruder]);
2569
+    if (last_extruder != extruder && axis_steps_per_mm[E_AXIS_N(extruder)] != axis_steps_per_mm[E_AXIS + last_extruder]) {
2570
+      position[E_AXIS] = LROUND(position[E_AXIS] * axis_steps_per_mm[E_AXIS_N(extruder)] * steps_to_mm[E_AXIS + last_extruder]);
2571
       last_extruder = extruder;
2571
       last_extruder = extruder;
2572
     }
2572
     }
2573
   #endif
2573
   #endif
2578
     LROUND(a * axis_steps_per_mm[A_AXIS]),
2578
     LROUND(a * axis_steps_per_mm[A_AXIS]),
2579
     LROUND(b * axis_steps_per_mm[B_AXIS]),
2579
     LROUND(b * axis_steps_per_mm[B_AXIS]),
2580
     LROUND(c * axis_steps_per_mm[C_AXIS]),
2580
     LROUND(c * axis_steps_per_mm[C_AXIS]),
2581
-    LROUND(e * axis_steps_per_mm[E_AXIS_N])
2581
+    LROUND(e * axis_steps_per_mm[E_AXIS_N(extruder)])
2582
   };
2582
   };
2583
 
2583
 
2584
   #if HAS_POSITION_FLOAT
2584
   #if HAS_POSITION_FLOAT

+ 6
- 6
Marlin/src/module/stepper_indirection.cpp 查看文件

627
     _TMC_INIT(Z3, planner.axis_steps_per_mm[Z_AXIS]);
627
     _TMC_INIT(Z3, planner.axis_steps_per_mm[Z_AXIS]);
628
   #endif
628
   #endif
629
   #if AXIS_IS_TMC(E0)
629
   #if AXIS_IS_TMC(E0)
630
-    _TMC_INIT(E0, planner.axis_steps_per_mm[E_AXIS]);
630
+    _TMC_INIT(E0, planner.axis_steps_per_mm[E_AXIS_N(0)]);
631
   #endif
631
   #endif
632
   #if AXIS_IS_TMC(E1)
632
   #if AXIS_IS_TMC(E1)
633
-    { constexpr uint8_t extruder = 1; _TMC_INIT(E1, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }
633
+    _TMC_INIT(E1, planner.axis_steps_per_mm[E_AXIS_N(1)]);
634
   #endif
634
   #endif
635
   #if AXIS_IS_TMC(E2)
635
   #if AXIS_IS_TMC(E2)
636
-    { constexpr uint8_t extruder = 2; _TMC_INIT(E2, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }
636
+    _TMC_INIT(E2, planner.axis_steps_per_mm[E_AXIS_N(2)]);
637
   #endif
637
   #endif
638
   #if AXIS_IS_TMC(E3)
638
   #if AXIS_IS_TMC(E3)
639
-    { constexpr uint8_t extruder = 3; _TMC_INIT(E3, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }
639
+    _TMC_INIT(E3, planner.axis_steps_per_mm[E_AXIS_N(3)]);
640
   #endif
640
   #endif
641
   #if AXIS_IS_TMC(E4)
641
   #if AXIS_IS_TMC(E4)
642
-    { constexpr uint8_t extruder = 4; _TMC_INIT(E4, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }
642
+    _TMC_INIT(E4, planner.axis_steps_per_mm[E_AXIS_N(4)]);
643
   #endif
643
   #endif
644
   #if AXIS_IS_TMC(E5)
644
   #if AXIS_IS_TMC(E5)
645
-    { constexpr uint8_t extruder = 5; _TMC_INIT(E5, planner.axis_steps_per_mm[E_AXIS_N]); UNUSED(extruder); }
645
+    _TMC_INIT(E5, planner.axis_steps_per_mm[E_AXIS_N(5)]);
646
   #endif
646
   #endif
647
 
647
 
648
   #if USE_SENSORLESS
648
   #if USE_SENSORLESS

正在加载...
取消
保存