Guards for large BLOCK_BUFFER_SIZE (>=128) (#20130)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
		| @@ -2759,6 +2759,8 @@ static_assert(   _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2) | |||||||
|  |  | ||||||
| #if !BLOCK_BUFFER_SIZE || !IS_POWER_OF_2(BLOCK_BUFFER_SIZE) | #if !BLOCK_BUFFER_SIZE || !IS_POWER_OF_2(BLOCK_BUFFER_SIZE) | ||||||
|   #error "BLOCK_BUFFER_SIZE must be a power of 2." |   #error "BLOCK_BUFFER_SIZE must be a power of 2." | ||||||
|  | #elif BLOCK_BUFFER_SIZE > 64 | ||||||
|  |   #error "A very large BLOCK_BUFFER_SIZE is not needed and takes longer to drain the buffer on pause / cancel." | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if ENABLED(LED_CONTROL_MENU) && !IS_ULTIPANEL | #if ENABLED(LED_CONTROL_MENU) && !IS_ULTIPANEL | ||||||
|   | |||||||
| @@ -213,7 +213,7 @@ xyze_float_t Planner::previous_speed; | |||||||
| float Planner::previous_nominal_speed_sqr; | float Planner::previous_nominal_speed_sqr; | ||||||
|  |  | ||||||
| #if ENABLED(DISABLE_INACTIVE_EXTRUDER) | #if ENABLED(DISABLE_INACTIVE_EXTRUDER) | ||||||
|   uint8_t Planner::g_uc_extruder_last_move[EXTRUDERS] = { 0 }; |   last_move_t Planner::g_uc_extruder_last_move[EXTRUDERS] = { 0 }; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef XY_FREQUENCY_LIMIT | #ifdef XY_FREQUENCY_LIMIT | ||||||
| @@ -2037,22 +2037,20 @@ bool Planner::_populate_block(block_t * const block, bool split_move, | |||||||
|       #if ENABLED(DISABLE_INACTIVE_EXTRUDER) // Enable only the selected extruder |       #if ENABLED(DISABLE_INACTIVE_EXTRUDER) // Enable only the selected extruder | ||||||
|  |  | ||||||
|         LOOP_L_N(i, EXTRUDERS) |         LOOP_L_N(i, EXTRUDERS) | ||||||
|           if (g_uc_extruder_last_move[i] > 0) g_uc_extruder_last_move[i]--; |           if (g_uc_extruder_last_move[i]) g_uc_extruder_last_move[i]--; | ||||||
|  |  | ||||||
|         #if HAS_DUPLICATION_MODE |  | ||||||
|           if (extruder_duplication_enabled && extruder == 0) { |  | ||||||
|             ENABLE_AXIS_E1(); |  | ||||||
|             g_uc_extruder_last_move[1] = (BLOCK_BUFFER_SIZE) * 2; |  | ||||||
|           } |  | ||||||
|         #endif |  | ||||||
|  |  | ||||||
|         #define ENABLE_ONE_E(N) do{ \ |         #define ENABLE_ONE_E(N) do{ \ | ||||||
|           if (extruder == N) { \ |           if (extruder == N) { \ | ||||||
|             ENABLE_AXIS_E##N(); \ |             ENABLE_AXIS_E##N(); \ | ||||||
|             g_uc_extruder_last_move[N] = (BLOCK_BUFFER_SIZE) * 2; \ |             g_uc_extruder_last_move[N] = (BLOCK_BUFFER_SIZE) * 2; \ | ||||||
|  |             if ((N) == 0 && TERN0(HAS_DUPLICATION_MODE, extruder_duplication_enabled)) \ | ||||||
|  |               ENABLE_AXIS_E1(); \ | ||||||
|           } \ |           } \ | ||||||
|           else if (!g_uc_extruder_last_move[N]) \ |           else if (!g_uc_extruder_last_move[N]) { \ | ||||||
|             DISABLE_AXIS_E##N(); \ |             DISABLE_AXIS_E##N(); \ | ||||||
|  |             if ((N) == 0 && TERN0(HAS_DUPLICATION_MODE, extruder_duplication_enabled)) \ | ||||||
|  |               DISABLE_AXIS_E1(); \ | ||||||
|  |           } \ | ||||||
|         }while(0); |         }while(0); | ||||||
|  |  | ||||||
|       #else |       #else | ||||||
|   | |||||||
| @@ -287,6 +287,10 @@ typedef struct { | |||||||
|   #endif |   #endif | ||||||
| } skew_factor_t; | } skew_factor_t; | ||||||
|  |  | ||||||
|  | #if ENABLED(DISABLE_INACTIVE_EXTRUDER) | ||||||
|  |   typedef IF<(BLOCK_BUFFER_SIZE > 64), uint16_t, uint8_t>::type last_move_t; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| class Planner { | class Planner { | ||||||
|   public: |   public: | ||||||
|  |  | ||||||
| @@ -435,7 +439,7 @@ class Planner { | |||||||
|  |  | ||||||
|     #if ENABLED(DISABLE_INACTIVE_EXTRUDER) |     #if ENABLED(DISABLE_INACTIVE_EXTRUDER) | ||||||
|        // Counters to manage disabling inactive extruders |        // Counters to manage disabling inactive extruders | ||||||
|       static uint8_t g_uc_extruder_last_move[EXTRUDERS]; |       static last_move_t g_uc_extruder_last_move[EXTRUDERS]; | ||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     #if HAS_WIRED_LCD |     #if HAS_WIRED_LCD | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user