浏览代码

Fix LIN_ADVANCE + SWITCHING_EXTRUDER

Followup to #10656
Scott Lahteine 6 年前
父节点
当前提交
65270d6a96
共有 1 个文件被更改,包括 39 次插入17 次删除
  1. 39
    17
      Marlin/src/module/stepper.cpp

+ 39
- 17
Marlin/src/module/stepper.cpp 查看文件

@@ -1646,29 +1646,51 @@ void Stepper::isr() {
1646 1646
     #elif ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
1647 1647
       #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) { if (e_steps < 0) REV_E_DIR(); else NORM_E_DIR(); } }while(0)
1648 1648
     #elif ENABLED(SWITCHING_EXTRUDER)
1649
-      #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) { switch (INDEX) { \
1650
-          case 0: case 1: E0_DIR_WRITE(!INVERT_E0_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); break; \
1651
-          case 2: case 3: E1_DIR_WRITE(!INVERT_E1_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); break; \
1652
-                  case 4: E2_DIR_WRITE(!INVERT_E2_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); \
1653
-      } } }while(0)
1649
+      #if EXTRUDERS > 4
1650
+        #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) { switch (INDEX) { \
1651
+            case 0: case 1: E0_DIR_WRITE(!INVERT_E0_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); break; \
1652
+            case 2: case 3: E1_DIR_WRITE(!INVERT_E1_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); break; \
1653
+                    case 4: E2_DIR_WRITE(!INVERT_E2_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); \
1654
+        } } }while(0)
1655
+      #elif EXTRUDERS > 2
1656
+        #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) { switch (INDEX) { \
1657
+            case 0: case 1: E0_DIR_WRITE(!INVERT_E0_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); break; \
1658
+            case 2: case 3: E1_DIR_WRITE(!INVERT_E1_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); break; \
1659
+        } } }while(0)
1660
+      #else
1661
+        #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) E0_DIR_WRITE(!INVERT_E0_DIR ^ TEST(INDEX, 0) ^ (e_steps < 0)); }while(0)
1662
+      #endif
1654 1663
     #else
1655
-      #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) E## INDEX ##_DIR_WRITE(e_steps < 0 ? INVERT_E## INDEX ##_DIR : !INVERT_E## INDEX ##_DIR); }while(0)
1664
+      #define SET_E_STEP_DIR(INDEX) do{ if (e_steps) E## INDEX ##_DIR_WRITE(!INVERT_E## INDEX ##_DIR ^ (e_steps < 0)); }while(0)
1656 1665
     #endif
1657 1666
 
1658 1667
     #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
1659 1668
       #define START_E_PULSE(INDEX) do{ if (e_steps) E_STEP_WRITE(!INVERT_E_STEP_PIN); }while(0)
1660
-      #define STOP_E_PULSE(INDEX) do{ if (e_steps) { E_STEP_WRITE(INVERT_E_STEP_PIN); e_steps < 0 ? ++e_steps : --e_steps; } }while(0)
1669
+      #define STOP_E_PULSE(INDEX) do{ if (e_steps) { e_steps < 0 ? ++e_steps : --e_steps; E_STEP_WRITE(INVERT_E_STEP_PIN); } }while(0)
1661 1670
     #elif ENABLED(SWITCHING_EXTRUDER)
1662
-      #define START_E_PULSE(INDEX) do{ if (e_steps) { switch (INDEX) { \
1663
-          case 0: case 1: E0_DIR_WRITE(!INVERT_E_STEP_PIN); break; \
1664
-          case 2: case 3: E1_DIR_WRITE(!INVERT_E_STEP_PIN); break; \
1665
-                  case 4: E2_DIR_WRITE(!INVERT_E_STEP_PIN); \
1666
-      } } }while(0)
1667
-      #define STOP_E_PULSE(INDEX) do{ if (e_steps) { switch (INDEX) { \
1668
-          case 0: case 1: E0_DIR_WRITE(!INVERT_E_STEP_PIN); break; \
1669
-          case 2: case 3: E1_DIR_WRITE(!INVERT_E_STEP_PIN); break; \
1670
-                  case 4: E2_DIR_WRITE(!INVERT_E_STEP_PIN); \
1671
-      } } }while(0)
1671
+      #if EXTRUDERS > 4
1672
+        #define START_E_PULSE(INDEX) do{ if (e_steps) { switch (INDEX) { \
1673
+            case 0: case 1: E0_DIR_WRITE(!INVERT_E_STEP_PIN); break; \
1674
+            case 2: case 3: E1_DIR_WRITE(!INVERT_E_STEP_PIN); break; \
1675
+                    case 4: E2_DIR_WRITE(!INVERT_E_STEP_PIN); } \
1676
+        } }while(0)
1677
+        #define STOP_E_PULSE(INDEX) do{ if (e_steps) { \
1678
+          e_steps < 0 ? ++e_steps : --e_steps; \
1679
+          switch (INDEX) { \
1680
+            case 0: case 1: E0_DIR_WRITE(INVERT_E_STEP_PIN); break; \
1681
+            case 2: case 3: E1_DIR_WRITE(INVERT_E_STEP_PIN); break; \
1682
+                    case 4: E2_DIR_WRITE(INVERT_E_STEP_PIN); } \
1683
+        } }while(0)
1684
+      #elif EXTRUDERS > 2
1685
+        #define START_E_PULSE(INDEX) do{ if (e_steps) { if (INDEX < 2) E0_DIR_WRITE(!INVERT_E_STEP_PIN); else E1_DIR_WRITE(!INVERT_E_STEP_PIN); } }while(0)
1686
+        #define STOP_E_PULSE(INDEX) do{ if (e_steps) { \
1687
+          e_steps < 0 ? ++e_steps : --e_steps; \
1688
+          if (INDEX < 2) E0_DIR_WRITE(INVERT_E_STEP_PIN); else E1_DIR_WRITE(INVERT_E_STEP_PIN); \
1689
+        } }while(0)
1690
+      #else
1691
+        #define START_E_PULSE(INDEX) do{ if (e_steps) E0_DIR_WRITE(!INVERT_E_STEP_PIN); }while(0)
1692
+        #define STOP_E_PULSE(INDEX) do{ if (e_steps) { e_steps < 0 ? ++e_steps : --e_steps; E0_DIR_WRITE(INVERT_E_STEP_PIN); }while(0)
1693
+      #endif
1672 1694
     #else
1673 1695
       #define START_E_PULSE(INDEX) do{ if (e_steps) E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN); }while(0)
1674 1696
       #define STOP_E_PULSE(INDEX) do { if (e_steps) { e_steps < 0 ? ++e_steps : --e_steps; E## INDEX ##_STEP_WRITE(INVERT_E_STEP_PIN); } }while(0)

正在加载...
取消
保存